Priorité audio

Avant de démarrer un flux logique, une application cible audio audio tels qu'ils sont utilisés pour le flux logique. L'application doit respecter la sélection de pertes de performance comme prévu dans les cas d'utilisation automobiles.

Bien que l'envoi d'une demande de focus soit recommandé, elle n'est pas appliquée par le système. Par conséquent, considérez la concentration comme un moyen de contrôler indirectement et d'éviter les conflits pendant la lecture au lieu de servir de mécanisme de contrôle audio principal. Le véhicule ne doit pas dépendre du système de sélection pour le fonctionnement du sous-système audio.

Ciblez les interactions

Pour prendre en charge AAOS, les requêtes de ciblage audio sont traitées en fonction d'interactions entre le CarAudioContext de la requête et celui des cibles. Il existe trois types d'interactions:

  • Exclusif
  • Refuser
  • Concurrent

Interaction exclusive

Il s'agit du modèle d'interaction le plus couramment utilisé avec Android.

Dans les interactions exclusives, une seule application peut être sélectionnée à la fois. Par conséquent, une requête de ciblage entrante se voit accorder la priorité, tandis que la sélection existante le détenteur du titre perd sa concentration. Étant donné que les deux applis lisent des contenus multimédias, une seule est autorisée à tenir le focus. Par conséquent, la requête de focus de l'application nouvellement démarrée est renvoyée avec Lorsque l'application lit de la musique, AUDIOFOCUS_REQUEST_GRANTED reçoit une notification événement de changement de focus avec un état de perte correspondant au type de requête qui a été faite.

Refuser l'interaction

Avec les interactions reject, la requête entrante est toujours rejetée. Pour par exemple lorsque vous essayez de lire de la musique alors qu'un appel est en cours. Dans ce Dans ce cas, si l'application Téléphone est sélectionnée pour un appel et qu'une deuxième application demande la sélection pour lire de la musique, l'application musicale reçoit AUDIOFOCUS_REQUEST_FAILED en réponse à la demande. Comme la requête de ciblage est refusée, aucune perte de ciblage n'est envoyée. au conteneur de sélection actuel.

Interaction simultanée

Les interactions concurrentes sont propres à AAOS. Ainsi, les applis qui demandent du son dans la voiture : possibilité de le conserver en même temps que d'autres applications. Pour une une interaction simultanée, les conditions suivantes doivent être remplies. La

Si ces critères sont remplis, la demande de ciblage est renvoyée avec AUDIOFOCUS_REQUEST_GRANTED alors que le conteneur de sélection actuel n'a pas changé de le focus. En revanche, si le responsable de la sélection active les événements "Duck" ou s'interrompt lorsqu'il est abaissé, le conteneur de la sélection n'est plus au premier plan, comme c'est le cas avec une interaction exclusive.

Gérer les flux simultanés

Bien que l'interaction simultanée ait de nombreuses utilisations, faites attention à la combinaison et au niveau matériel sur les périphériques de sortie. Nous vous recommandons vivement Les éléments CarAudioContext autorisés à être lus simultanément doivent être routés vers différents périphériques de sortie.

Le fait d'avoir des périphériques de sortie distincts pour les flux simultanés permet au HAL pour écarter l'un des flux avant de les mélanger ou pour acheminer les flux physiques aux différents haut-parleurs du véhicule. Si les flux logiques sont mélangés Android, les gains ne sont pas modifiés et sont livrés dans le même flux physique.

Par exemple, lorsque la navigation et le contenu multimédia sont fournis simultanément, le gain du flux multimédia peuvent être temporairement réduits les instructions de navigation sont plus claires. Le menu de navigation le flux peut être acheminé vers les enceintes côté conducteur pendant que le contenu multimédia jouer dans le reste de la cabane.

Matrice d'interaction

Le tableau ci-dessous présente la matrice d'interaction telle que définie par CarAudioService. Chaque ligne représente l'élément CarAudioContext du responsable actuel, et chaque ligne représente celle de la requête entrante.

Par exemple, lorsqu'une application multimédia musicale s'active pendant qu'une application de navigation demande la matrice indique que les deux interactions peuvent se jouer simultanément en supposant que les autres critères interactions simultanées sont remplies.

En raison des interactions simultanées, il est possible d'avoir plusieurs conteneur de sélection. Dans ce cas, une requête de sélection entrante est comparée à chacun des les détenteurs de l’attention actuelles avant de déterminer quelle interaction appliquer. Dans ce l'interaction la plus prudente l'emporte. Refuser, puis exclure et et enfin simultanés.

Matrice d'interaction avec focus audio

Figure 1 : Matrice d'interaction avec focus audio.

Dans Android 11, un nouveau paramètre a été introduit pour permettre aux utilisateurs de modifier le comportement d'interaction entre la navigation et les appels téléphoniques. Une fois définie, android.car.KEY_AUDIO_FOCUS_NAVIGATION_REJECTED_DURING_CALL modifie le interaction entre les requêtes de sélection NAVIGATION entrantes et les CALL actuelles des conteneurs de focus, de concurrents à rejets. Si un utilisateur préfère que instructions de navigation n'interrompent pas un appel, il peut activer le paramètre. Ce est conservée pour l'utilisateur et peut être définie de manière dynamique afin que respectent le nouveau paramètre.

Priorité audio différée

Dans Android 11, AAOS permet de demander la priorité audio retardable. Ce permet de retarder les requêtes de focus non temporaires lorsque leur interaction avec qui entraînent leur refus. Une fois qu'un dans un état où la requête différée peut se concentrer, si la demande est acceptée.

Règles pour les requêtes de priorité audio différée

  • Uniquement pour les requêtes non temporaires. Une requête différée ne peut être effectuée que pour sources non temporaires afin d'éviter les sons temporaires pendant la lecture après qu'elles sont pertinentes.

  • Une seule requête peut être retardée à la fois. Si une demande retardée est effectuée alors qu'il y a déjà une requête retardée, la requête retardée initiale reçoit un événement de modification AUDIOFOCUS_LOSS et la nouvelle requête reçoit une réponse synchrone de AUDIOFOCUS_REQUEST_DELAYED.

  • Les requêtes retardables doivent avoir un OnAudioFocusChangeListener. Une fois est retardée, l'écouteur est utilisé pour avertir le demandeur lorsque est finalement accordée (AUDIOFOCUS_GAIN), ou si elle est refusée ultérieurement (AUDIOFOCUS_LOSS).

Demander une sélection différée

Pour créer une requête pouvant être retardée:

  1. Utilisez AudioFocusRequest.Builder#setAcceptsDelayedFocusGain.

    mMediaWithDelayedFocusListener = new MediaWithDelayedFocusListener();
    
    mDelayedFocusRequest = new AudioFocusRequest
         .Builder(AudioManager.AUDIOFOCUS_GAIN)
         .setAudioAttributes(mMusicAudioAttrib)
         .setOnAudioFocusChangeListener(mMediaWithDelayedFocusListener)
         .setForceDucking(false)
         .setWillPauseWhenDucked(false)
         .setAcceptsDelayedFocusGain(true)
         .build();
    
  2. Lorsque vous envoyez la requête, gérez la réponse AUDIOFOCUS_REQUEST_DELAYED:

    int delayedFocusRequestResults = mAudioManager.requestAudioFocus(mDelayedFocusRequest);
    if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
        // start audio playback
        return;
    }
    if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) {
         // audio playback delayed to audio focus listener
         return;
    }
    
  3. Lorsque la requête est retardée, l'écouteur de focus gère les changements dans le focus:

    private final class MediaWithDelayedFocusListener implements
    OnAudioFocusChangeListener {
           @Override
           public void onAudioFocusChange(int focusChange) {
               synchronized (mLock) {
                   switch (focusChange) {
                       case AudioManager.AUDIOFOCUS_GAIN:
                           … // Start focus playback
                       case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                           … // Pause media transiently
                       case AudioManager.AUDIOFOCUS_LOSS:
                           … // Stop media
    

Gestion de la mise au point multizone

Pour les véhicules avec plusieurs zones audio, la priorité audio est gérée indépendamment pour chaque zone. Ainsi, une requête adressée à une zone ne prend pas en compte maintient l'attention dans d'autres zones et n'entraîne pas de blocage vous n'êtes plus au premier plan. Ainsi, l'objectif de la cabine principale peut être géré séparément d'un système de divertissement au niveau du siège arrière, de manière à ne pas interrompre la lecture audio dans une zone en fonction des modifications apportées à une autre zone.

Pour toutes les applications, CarAudioService gère automatiquement la sélection. Un objectif la zone audio de la requête est déterminée par la classe UserId ou UID associée (pour en savoir plus, consultez Routage audio).

Demander le contenu audio de plusieurs zones simultanément

Si une application souhaite lire du contenu audio dans plusieurs zones simultanément, elle doit demander pour chaque zone en incluant AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID dans bundle:

//Create attribute with bundle and AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
Bundle bundle = new Bundle();
bundle.putInt(CarAudioManager.AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID,
               zoneId);

AudioAttributes attributesWithZone = new AudioAttributes.Builder()
     .setUsage(AudioAttributes.USAGE_MEDIA)
     .addBundle(bundle)
     .build();

//Create focus request using built attributesWithZone

Ce paramètre de bundle permet au demandeur de remplacer la zone audio automatique pour utiliser à la place l'ID de zone spécifié. Par conséquent, une application peut générer des requêtes distinctes pour différentes zones audio.

Priorité audio HAL

À partir d'Android 11, le HAL est activé pour demander la sélection au nom de flux externes. Bien que facultative, leur utilisation est vivement recommandée pour permettent aux sons extérieurs de participer de façon optimale à l'écosystème Android et pour offrir une expérience utilisateur fluide.

Le HAL détermine en définitive les sons à privilégier. Dans ce cas, les sons d'urgence et de sécurité critiques doivent être émis indépendamment si le HAL dispose ou non d'une priorité audio et doit continuer à être soit lue correctement, même si le HAL n'est plus au premier plan audio. Il en va de même pour l'ensemble des sons requis par la réglementation gouvernementale.

Le HAL doit couper le son des flux Android de manière proactive lors de la lecture, le cas échéant. les sons d'urgence ou critiques pour la sécurité, afin de les entendre clairement.

AudioControl@2.0

La version 2.0 d'AudioControl HAL introduit les nouvelles API suivantes:

API Objectif
IAudioControl#registerFocusListener Enregistre une instance de IFocusListener avec le paramètre AudioControl HAL. Cet écouteur permet au HAL de demander et d'abandonner l'audio le focus. Le HAl fournit une instance ICloseHandle à utiliser par Android pour annuler l'enregistrement de l'écouteur.
IAudioControl#onAudioFocusChange Informe le HAL des changements d'état des demandes de ciblage effectuées par le HAL via IFocusListener, y compris les réponses aux requêtes initiales et les requêtes de focus.
IFocusListener#requestAudioFocus Les requêtes se concentrent au nom du HAL pour une utilisation spécifiée, un ID de zone et le type de gain de focalisation.
IFocusListener#abandonAudioFocus Abandonne les requêtes de ciblage HAL existantes pour l'utilisation et la zone spécifiées Identifiant

Le HAL peut avoir plusieurs demandes de ciblage en même temps, mais une seule demande est autorisée. par utilisation et par association d'ID de zone. Android suppose que le HAL est immédiatement commence à émettre des sons pour une utilisation après l'envoi de la requête et continue à jusqu'à ce qu'il quitte le focus.

À l'exception de registerFocusListener, ces requêtes sont oneway pour garantir que Android ne retarde pas le HAL pendant le traitement d'une requête de focus. Le HAL doit n'attendez pas pour vous concentrer avant d'écouter des sons essentiels pour votre sécurité. (facultatif) pour que le HAL écoute les changements de priorité audio et y répond IAudioControl#onAudioFocusChange

Service de focalisation audio pour voiture OEM

Dans Android 14, AAOS a lancé les services de plug-ins OEM pour voitures afin de permettre la configurabilité de certains composants de la voiture. Pour Car Audio Plugin Service, le plug-in permet aux OEM de gérer les requêtes de focus interceptées par le système audio Google Cloud. Les OEM disposent ainsi de plus de flexibilité pour gérer la concentration selon les besoins. par des règles et des réglementations. Par conséquent, l'interaction de ciblage audio peut différer entre fabricants, et d'une région à l'autre. Principes de base de la priorité audio maintient, que les applications doivent quand même demander le focus pour une meilleure gestion du son pour améliorer l'expérience utilisateur. En général, certaines règles s'appliquent demande de focus par les applications:

  • Sans priorité audio élevée (comme un appel téléphonique, alerte d'urgence ou notification de sécurité) les applications doivent pouvoir accéder au son de manière temporaire ou permanente.

  • Lorsqu'un ciblage multimédia est actif:

    • Les applications demandant la priorité à l'utilisation des appels doivent pouvoir recevoir l'appel : simultanément ou exclusivement.

    • Les applis qui demandent la priorité à l'utilisation de la navigation devraient pouvoir recevoir la navigation. se concentrer simultanément ou exclusivement.

    • Les applis qui demandent une priorité à l'utilisation de l'Assistant devraient pouvoir recevoir ce type de priorité simultanément ou exclusivement.

  • Lorsque vous vous trouvez dans un environnement audio de haute priorité (y compris lors d'un appel téléphonique, alerte d'urgence ou notification de sécurité), les applications la requête de priorité audio différée doit être acceptée ou retardée selon les besoins.

Bien que les suggestions ci-dessus ne soient pas exhaustives, elles peuvent aider les applications qui demandent sélectionner pour se concentrer s'il n'y a pas de sons actifs à priorité élevée. Même à un niveau élevé sons prioritaires sont actifs, les demandes de mise au point différée doivent toujours être respectées Vous devriez pouvoir vous concentrer lorsque le son à priorité élevée s'arrête.