Gestion des volumes

La gestion des volumes est contenue dans CarAudioService, qui utilise des volumes fixes en partant du principe que les volumes sont inférieurs au HAL et non dans le logiciel. CarAudioService organise les périphériques de sortie en groupes de volumes pour appliquer les mêmes gains à tous les appareils associés groupe de volumes.

Volumes fixes

Les implémentations AAOS utilisent un amplificateur matériel pour contrôler le volume au lieu d’un mélangeur logiciel. Pour éviter les effets secondaires, définissez l'indicateur config_useFixedVolume sur true (superposition si nécessaire):

<resources>
    <!-- Car uses hardware amplifier for volume. -->
    <bool name="config_useFixedVolume">true</bool>
</resources>

Lorsque l'option config_useFixedVolume n'est pas définie (ou est définie sur false), les applications peuvent appeler AudioManager.setStreamVolume() pour régler le volume par diffusion taper dans le mélangeur logiciel. Cela n'est pas toujours souhaitable en raison sur les autres applications et l'atténuation du volume dans le mélangeur logiciel peut réduire le nombre de bits significatifs disponibles dans le signal lorsqu’il est reçu par l'amplificateur matériel.

Groupes de volumes

Les groupes de volumes permettent de gérer les volumes d'un ensemble d'appareils au sein d'un même dans la zone. Le volume peut être contrôlé indépendamment pour chaque groupe de volumes. La les gains obtenus sont configurés sur les périphériques associés afin d'être appliqués par l'amplificateur du véhicule. Les paramètres de volume sont conservés pour l'utilisateur et sont chargés lorsque l'utilisateur se connecte.

Définir des groupes de volumes

CarAudioService utilise des groupes de volumes définis dans car_audio_configuration.xml:

<audioZoneConfiguration version="2.0">
    <zones>
        <zone name="primary zone" isPrimary="true">
            <volumeGroups>
                <group>
                    <device address="bus0_media_out">
                        <context context="music"/>
                    </device>
                </group>
                <group>
                    <device address="bus1_navigation_out">
                        <context context="navigation"/>
                    </device>
                    <device address="bus2_voice_command_out">
                        <context context="voice_command"/>
                    </device>
                </group>
                ...
            </volumeGroups>
        </zone>
     </zones>
</audioZoneConfiguration>

Chaque groupe de volumes doit contenir un ou plusieurs périphériques de sortie des adresses IP externes. Les adresses doivent correspondre aux périphériques de sortie définis dans audio_policy_configuration.xml

Configurer les gains du groupe de volumes

Chaque groupe de volumes possède des valeurs de gain minimale, maximale et par défaut, ainsi qu'une taille de pas en fonction des valeurs configurées dans audio_policy_configuration.xml pour le appareils associés au groupe de volumes.

<devicePort tagName="bus0_media_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="bus0_media_out">
  <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
  <gains>
    <gain name="" mode="AUDIO_GAIN_MODE_JOINT"
      minValueMB="-3200" maxValueMB="600" defaultValueMB="0" stepValueMB="100"/>
  </gains>
</devicePort>

Lors de l'initialisation, le groupe de volumes vérifie les valeurs de gain des appareils et configure le groupe comme suit:

  • Taille de pas : Doit être identique pour tous les appareils contrôlés par le groupe de volumes.
  • Gain minimal : Gain minimal le plus faible parmi les appareils du groupe.
  • Gain maximal : Gain maximal le plus élevé parmi les appareils du groupe.
  • Gain par défaut. Gain par défaut le plus élevé parmi les appareils du groupe.

Compte tenu de la configuration de ces valeurs, il est possible de définir le gain d'une groupe de volumes situé en dehors de la plage acceptée par un appareil associé au volume groupe. Dans ce cas, pour cet appareil, le gain est défini sur la valeur minimale de l'appareil la valeur de gain maximale selon que la valeur du groupe de volumes est inférieure ou supérieure la plage.

Identifiants de groupe de volumes

Les groupes de volumes sont identifiés au moment de l'exécution dans l'ordre défini dans le fichier XML. Les ID sont compris entre 0 et N-1 dans une zone audio, où N correspond au nombre de des groupes de volumes dans cette zone. De cette façon, les ID de groupe de volumes ne sont pas uniques entre les zones. Ces identifiants sont utilisés pour les API CarAudioManager associées avec des groupes de volumes. Toute API qui accepte un groupId sans zoneId utilise par défaut la zone audio principale.

Gestion du volume multizone

Chaque zone audio doit avoir un ou plusieurs groupes de volumes, et chaque volume est associé à une seule zone audio. Cette relation est définie dans le cadre de car_audio_configuration.xml. Pour en savoir plus, consultez l'exemple ci-dessus. dans Définir des groupes de volumes.

Les niveaux de volume actuels pour chaque zone sont conservés pour l'utilisateur associé à dans cette zone. Ces paramètres sont propres à une zone, c'est-à-dire que si un utilisateur se connecte à un d'affichage associé à la zone principale, puis sur les connexions dans une zone associés à une zone audio secondaire, les niveaux de volume chargés et conservés la première zone diffèrent de celles de la zone secondaire.

Gérer les événements de touches de volume

Android définit plusieurs codes de clavier pour le contrôle du volume, y compris:

  • KEYCODE_VOLUME_UP
  • KEYCODE_VOLUME_DOWN
  • KEYCODE_VOLUME_MUTE

Par défaut, Android achemine les événements des touches de volume vers les applications. Automobile les implémentations doivent forcer le traitement de ces événements clés CarAudioService, qui appelle ensuite setGroupVolume ou setMasterMute, en tant que approprié. Pour forcer ce comportement, définissez le paramètre config_handleVolumeKeysInWindowManager sur true:

<resources>
    <bool name="config_handleVolumeKeysInWindowManager">true</bool>
</resources>

Actuellement, les événements de touche de volume n'ont aucun moyen de distinguer quelle zone auxquelles ils sont destinés. On suppose qu'ils sont tous associés zone audio. Lorsqu'un événement de touche de volume est reçu, CarAudioService détermine le groupe de volumes à régler en récupérant les contextes audio puis en ajustant le groupe de volumes contenant le périphérique de sortie associées au contexte audio ayant la priorité la plus élevée. La hiérarchisation est déterminé en fonction d'un ordre fixe défini dans CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY

Fondu et équilibre

Les deux versions de l'HAL AudioControl incluent des API permettant de définir le fondu et l'équilibre dans le véhicule. API système correspondantes pour les valeurs de transmission CarAudioManager au service AudioControl HAL. Ces API nécessitent android.car.permission.CAR_CONTROL_AUDIO_VOLUME Les API AudioControl sont les suivantes:

  • setBalanceTowardRight(float value) déplace le volume du haut-parleur vers le côté droit (+) ou gauche (-) du véhicule.

    • 0,0 est centré
    • La valeur +1,0 correspond parfaitement
    • -1,0 correspond à la limite restante
    • Une valeur non comprise entre -1 et 1 indique une erreur.
  • setFadeTowardFront(float value) déplace le volume du haut-parleur vers le avant (+) ou arrière (-) du véhicule.

    • 0,0 est centré
    • La valeur +1,0 est entièrement transférée.
    • -1.0 est entièrement à l'arrière
    • Une valeur non comprise entre -1 et 1 indique une erreur.

Vous décidez de la manière dont ces valeurs doivent être appliquées et de la manière dont elles doivent s'afficher pour utilisateurs. Elles peuvent s'appliquer exclusivement aux médias ou à tous les publics Sons Android Android 11 est également compatible pour appliquer des effets audio aux périphériques de sortie. Grâce à cela, il est possible de Vous pouvez aussi gérer le fondu et l'équilibre à l'aide d'effets audio des périphériques de sortie plutôt que via ces API.

Diminution du volume

L'atténuation audio se produit lorsque le véhicule réduit le gain d'un flux afin que avec un autre flux diffusé simultanément s'entend plus clairement. Dans AAOS, la diminution du volume est mise en œuvre par le HAL. Android n'a aucun contrôle sur les sons au-delà du système d'exploitation. Sous Android 11, les principales informations disponible pour que le HAL puisse prendre des décisions d'atténuation : appareils ont tous deux des flux actifs.

Quand s'écarter

Il revient à chaque OEM de déterminer comment l'atténuation est géré HAL, nous vous recommandons de suivre les consignes ci-dessous.

  • La lecture de plusieurs flux sur Android se produit généralement lorsque deux applications ou services maintenir simultanément la priorité audio. Pour savoir quand Android peut accorder des autorisations consultez la matrice d'interaction dans Types de restrictions. Avec l'introduction du plug-in audio pour voiture, tout dépend de votre Gestion d'AudioFocus.

  • Tous les flux mélangés par Android le sont avant que des gains ne soient appliquée. Ainsi, tout flux qui doit être baissé lorsqu'il est lu simultanément doivent être acheminées vers des périphériques de sortie distincts afin que le HAL puisse avant de les mélanger.

La diminution des interactions simultanées est recommandée :

Interaction Action
EMERGENCY Désactive ou coupe le son de tout sauf de SAFETY
SAFETY Désactive tout, sauf EMERGENCY
NAVIGATION Désactive tout, sauf SAFETY et EMERGENCY
CALL Désactive tout, sauf SAFETY, EMERGENCY, et NAVIGATION
VOICE Canards CALL_RING
VEHICLE_SOUNDS Vous déterminez l'importance du son actif, et s'il dissipe les autres sons.
MUSIC et ANNOUNCEMENT Atténué par tout. à l'exception des tonalités d'interaction tactile SYSTEM_SOUND

Remarques concernant l'atténuation

Certains services et applis, comme la navigation ou un assistant, peuvent utiliser plusieurs joueurs pour effectuer des actions. Éviter une duplication agressive lors d'un flux de données cesse de transiter par les périphériques de sortie pour s'assurer que le contenu multimédia n'est pas le volume avant qu'il ne soit baissé avant la lecture suivante à partir du menu de navigation ou de l'application Assistant Google.

Pour les véhicules dotés de plusieurs étapes acoustiques et une isolation suffisante, vous pouvez : acheminer l'audio vers différentes zones de la voiture au lieu de baisser. Par exemple : les instructions de navigation peuvent être transmises aux haut-parleurs de l'appui-tête du conducteur en continuant à diffuser de la musique dans toute la cabine à un volume normal.

Sons critiques pour la sécurité

Android 11 lancé API HAL Audio Focus : Le HAL garantit les sons critiques pour la sécurité sont prioritaires sur les autres sons. Si le HAL conserve l'audio sélectionner pour USAGE_EMERGENCY, il n'est pas garanti que les applications et services de Android n'émet aucun son. Le HAL détermine les flux Android à utiliser être mélangés ou coupés pour diffuser des sons essentiels pour votre sécurité.

Configurer l'interface utilisateur des paramètres de volume

AAOS dissocie l'interface utilisateur des paramètres de volume de la configuration du groupe de volumes. Ceux-ci peuvent être superposés, comme décrit dans Configurez les gains du groupe de volumes. Cette séparation garantit qu'aucune modification n'est requise si la configuration des groupes de volumes change.

Dans l'UI des paramètres de la voiture, packages/apps/Car/Settings/res/xml/car_volume_items.xml contient les éléments d'interface utilisateur (ressources de titre et d'icône) associés à chacun définie sur AudioAttributes.USAGE. Ce fichier offre un rendu raisonnable du VolumeGroups défini à l'aide des ressources associées au premier d'utilisation reconnue contenue dans chaque VolumeGroup.

Par exemple, l'exemple suivant définit un VolumeGroup comme incluant voice_communication et voice_communication_signalling. La valeur par défaut de l'interface utilisateur des paramètres de la voiture affiche le VolumeGroup à l'aide de ressources associées à voice_communication, car il s'agit de la première ressource matc dans le fichier.

<carVolumeItems xmlns:car="http://schemas.android.com/apk/res-auto">
    <item car:usage="voice_communication"
          car:title="@*android:string/volume_call"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="voice_communication_signalling"
          car:title="@*android:string/volume_call"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="media"
          car:title="@*android:string/volume_music"
          car:icon="@*android:drawable/ic_audio_media"/>
    <item car:usage="game"
          car:title="@*android:string/volume_music"
          car:icon="@*android:drawable/ic_audio_media"/>
    <item car:usage="alarm"
          car:title="@*android:string/volume_alarm"
          car:icon="@*android:drawable/ic_audio_alarm"/>
    <item car:usage="assistance_navigation_guidance"
          car:title="@string/navi_volume_title"
          car:icon="@drawable/ic_audio_navi"/>
    <item car:usage="notification_ringtone"
          car:title="@*android:string/volume_ringtone"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="assistant"
          car:title="@*android:string/volume_unknown"
          car:icon="@*android:drawable/ic_audio_vol"/>
    <item car:usage="notification"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_communication_request"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_communication_instant"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_communication_delayed"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_event"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="assistance_accessibility"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="assistance_sonification"
          car:title="@*android:string/volume_unknown"
          car:icon="@*android:drawable/ic_audio_vol"/>
    <item car:usage="unknown"
          car:title="@*android:string/volume_unknown"
          car:icon="@*android:drawable/ic_audio_vol"/>
</carVolumeItems>

Les attributs et valeurs utilisés dans la configuration ci-dessus sont déclarés dans packages/apps/Car/Settings/res/values/attrs.xml L'interface utilisateur des paramètres de volume utilise les API CarAudioManager suivantes basées sur VolumeGroup:

  • getVolumeGroupCount() pour savoir combien de commandes doivent être dessinées.
  • getGroupMinVolume() et getGroupMaxVolume() pour obtenir les limites inférieure et supérieure.
  • getGroupVolume() pour obtenir le volume actuel.
  • registerVolumeChangeObserver() pour être informé des changements de volume.

Événement de groupe de volumes de la voiture

Dans l'automobile, les cas d'utilisation de la mise à jour du volume et du bouton de désactivation du son sont contextuels. qui peuvent définir les actions de certaines applications, comme le volume paramètres. Les rappels de volume et de coupure du son actuels de la pile audio de la voiture fournissent des informations contextuelles limitées. Pour mieux répondre aux besoins des utilisateurs du secteur automobile et à l'avenir évolutivité, CarVolumeGroupEvent est ajouté à Android 14. Chaque événement contient trois types d'informations critiques:

  • Liste de CarVolumeGroupInfo
  • EventTypes (mappé sur bit)
  • Liste de ExtraInfos

Informations sur le groupe du volume de la voiture

Le destinataire du rappel d'événement a accès à la liste des voitures concernées des informations sur le groupe de volumes. Cela signifie que l'application n'a pas besoin d'effectuer des appels supplémentaires au framework audio de la voiture pour obtenir le dernier état. Il peut il vous suffit d'utiliser le CarVolumeGroupInfos reçu pour mettre à jour l'UI ou l'adresse différents états. Pour faciliter la tâche des applications, les aspects qui ont changé dans le volume d'une voiture sont également fournis dans EventTypes, comme expliqué ci-dessous.

Types d'événements

Définit quel aspect de CarVolumeGroupInfo a été modifié. Les applis peuvent l'utiliser pour identifier les changements et prendre les mesures nécessaires. Par exemple : EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED indique que les propriétés L'indice de gain de volume maximal de CarVolumeGroups a changé et peut être interrogé en CarVolumeGroupInfo.getMaxVolumeGainIndex()

Le tableau suivant montre la relation entre EventType et CarVolumeGroupInfo

Type d'événement Informations sur le groupe du volume de la voiture
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED CarVolumeGroupInfo.getVolumeGainIndex()
EVENT_TYPE_VOLUME_MIN_INDEX_CHANGED CarVolumeGroupInfo.getMinVolumeGainIndex() (en anglais)
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED CarVolumeGroupInfo.getMaxVolumeGainIndex()
EVENT_TYPE_MUTE_CHANGED CarVolumeGroupInfo.ismuted()
ÉVÉNEMENT_TYPE_VOLUME_BLOCKED_CHANGED CarVolumeGroupInfo.isBlocked()
EVENT_TYPE_ATTENUATION_CHANGED CarVolumeGroupInfo.isAttéated()
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED CarVolumeGroupInfo.getAudioAttributes()

Informations supplémentaires

Fournit des informations supplémentaires sur les raisons de la modification de CarVolumeGroup. Applications peuvent utiliser ces informations pour fournir du contexte supplémentaire afin d'alerter l'utilisateur agir ou avertir. Exemple : EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL indique une atténuation temporaire active due à une surcharge thermique. L'application peut indiquer à l'utilisateur s'il essaie d'augmenter le volume.

Nous ne appliquons aucune procédure pour ExtraInfos. C'est à vous de décider. pour déterminer le processus en fonction de ExtraInfos. Par exemple, si l'atténuation est actif en raison de EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED, vous pouvez également choisir de faire un fondu de l'interface utilisateur de la barre de volume pour empêcher l'utilisateur de modifier le volume. D'autres peuvent afficher un toast indiquant que la diminution est active et autoriser l'utilisateur pour régler le volume.

Le framework audio pour voiture dépend du IAudioGainCallback du composant AudioControl HAL pour Fournissez la ExtraInfos suggérée. Pour en savoir plus, consultez Rappel de gain audio.

CarVolumeGroupEvent évolue pour répondre aux futurs besoins de la structure audio pour voiture. Mer ont l'intention de prendre en charge de nouvelles fonctionnalités uniquement jusqu'à CarVolumeGroupEvent. Mer Nous recommandons vivement aux développeurs d'applications d'utiliser CarVolumeGroupEvent pour gérer les changements de volume du groupe et de coupure du son.

Rappel d'événement de groupe de volumes de la voiture

Android 14 fournit un nouveau rappel pour les accès privilégiés applications de plate-forme pour s'enregistrer et être informé de CarVolumeGroupEvents.

  • Pour vous inscrire au rappel, utilisez CarAudioManager#registerCarVolumeGroupEventCallback()

  • Pour annuler l'enregistrement du rappel, utilisez CarAudioManager#unregisterCarVolumeGroupEventCallback()

Si une application s'enregistre avec la nouvelle CarVolumeGroupEventCallback et l'ancienne CarVolumeCallback, les événements CarVolumeGroupEventCallbacks sont prioritaires. La pile audio pour voiture ne déclenche plus CarVolumeCallback. Cela permet d'éviter en double dans la même application pour le même événement.

Nous vous recommandons vivement d'utiliser CarVolumeGroupEventCallback pour gérer les changements de volume du groupe et de coupure du son.

Rappel de gain audio

Depuis Android 13, AudioControl HAL peut déclencher une un rappel asynchrone pour gérer les mises à jour du niveau de volume en raison des modifications apportées au système audio pour voiture.

API HAL

AudioControl @2.0 AIDL

La version 2.0 d'AudioControl AIDL HAL ajoute l'API suivante:

API Objectif
IAudioControl#registerGainCallback Enregistre une instance de IAudioGainCallback auprès du HAL AudioControl.
IAudioGainCallback#onAudioDeviceGainsChanged Rappel asynchrone pour notifier les modifications apportées à la configuration du gain audio.

Le rappel HAL AudioControl inclut des listes de motifs et les identifiants AudioGainConfigInfo, qui comprend les éléments suivants:

  • ID de zone
  • Adresse du port de l'appareil
  • Index de volume > Un index peut être soit un index restreint, soit un index de mise à jour.

Les raisons peuvent être classées comme suit:

  • Motifs de restriction. Modification temporaire du volume et de la désactivation du son
  • Motifs de mise à jour. Modification définitive du comportement du volume.

Types de restrictions

À compter du AudioControl HAL AIDL V3, les types d'éléments suivants sont acceptés : restrictions:

  • Couper le son
  • Vidéo bloquée
  • Restriction
  • Atténuation
Restriction active Modification du volume déclenchée par l'utilisateur Bouton d'activation du son déclenché par l'utilisateur
Couper le son ❌ (réactiver le son)

✔ (ignorer)
Vidéo bloquée
Restriction ❌ (Au-delà de la limite)

✔ (sous la limite)
Atténuation

La priorité entre les restrictions est Ignorer > Blocage > Restriction > Atténuation.

Restrictions "Ignorer"

Les restrictions Ignorer sont les suivantes:

  • Reasons.TCU_MUTE
  • Reasons.REMOTE_MUTE

Le framework audio pour voiture conserve en interne ces deux états de coupure du son:

  • Coupure du son de l'utilisateur. Basculé en fonction de la demande de l'utilisateur, via CarAudioManager ou des événements clés.

  • Couper le son de HAL. Basculement effectué en fonction des restrictions de masquage reçues via AudioGain .

Pour les auditeurs comme l'application Paramètres, le son global du groupe de volume (CarVolumeGroupInfo.isMuted()) se basera sur le fait que au-dessus des coupures son.

Lorsque le son du HAL est activé, tous les volumes entrants sont modifiés et le son du groupe réactivé sont ignorées pendant toute la durée de la restriction.

Cas d'interaction: la désactivation du son de HAL est active et l'utilisateur demande l'activation/la désactivation du son

Lorsque le son de l'HAL est activé et que celui de l'utilisateur est désactivé:

  • L'état général de la désactivation du son du groupe de volumes est défini sur true.
  • Les demandes de l'utilisateur pour activer la fonctionnalité Ignorer seront traitées.
    • Motif: Pour préserver la vie privée des utilisateurs, les demandes de désactivation du son doivent être appliquées en permanence.

Lorsque le son de HAL est activé et que celui de l'utilisateur est activé:

  • L'état général de la désactivation du son du groupe de volumes est défini sur true.

  • Les demandes de désactivation de "Ignorer" de l'utilisateur seront traitées NOT. Utilisateur en cache le son reste activé.

    • Motif: les demandes de réactivation des utilisateurs ne seront satisfaites qu'en l'absence de restrictions actives.

    • Motif: La réactivation du son mis en cache peut provoquer une explosion du son involontaire et mettre en danger la sécurité des utilisateurs. Cela est particulièrement vrai si le son est activé durant les cycles d'allumage, ce qui réduit conscience du niveau sonore de la perception.

Cas d'interaction: la désactivation du son de HAL est activée et désactivée alors que la désactivation du son de l'utilisateur n'a pas été modifiée

Activer/Désactiver le son du HAL modifie l'état général du son du groupe de volumes. Cependant, il fait pas directement l'état de désactivation du son de l'utilisateur. Lorsque le son de l'utilisateur est désactivé et celui de HAL est coupé rappel d'activation reçu:

  • L'état général de la désactivation du son du groupe de volumes est défini sur true.
  • Les demandes de modification du volume de l'utilisateur seront traitées NOT lorsque le son de HAL sera coupé est activé.

    • Motif: l'utilisateur ne peut pas percevoir le son lorsque le son est coupé. Autorisation... un changement de volume peut provoquer une explosion sonore et mettre en danger la sécurité des utilisateurs.

    • Motif: les applications de volume peuvent enregistrer des rappels et déclencher une réactivation du son (CarAudioManager.setVolumeGroupmute(...,/* mute=*/ true,..)) automatiquement sans intervention de l'utilisateur, s'il s'agit du comportement attendu par l'OEM.

Lorsque le son de l'HAL est désactivé alors que celui de l'utilisateur est désactivé:

  • L'état de désactivation du son du groupe de volumes est désormais false.

    Motif: Faire en sorte que l'état du son soit conservé de manière persistante et demander à l'utilisateur de le réactiver interrompre inutilement l'utilisateur lorsque les états de désactivation du son sont fréquents.

  • Les demandes de modification de volume émanant d'utilisateurs seront traitées normalement.

Vidéo bloquée

Les restrictions de blocage sont les suivantes:

  • Reasons.FORCED_MASTER_MUTE
  • Reasons.REMOTE_MUTE
  • Reasons.TCU_MUTE.

Lorsque les restrictions de blocage sont actives, les demandes des utilisateurs à:

  • Les modifications de volume ne sont pas traitées.
  • La désactivation du son a été traitée.

Restriction

Les restrictions sont les suivantes:

  • Reasons.THERMAL_LIMITATION
  • Reasons.SUSPEND_EXIT_VOL_LIMITATION

Lorsque des restrictions de restriction sont actives, les utilisateurs doivent pouvoir:

  • Régler le volume:

    • sont traitées dans les limites
    • Les contenus ci-dessus ne sont pas traités
  • La désactivation du son a été traitée.

Atténuation

Les restrictions d'atténuation sont les suivantes:

  • Reasons.ADAS_DUCKING
  • Reasons.NAV_DUCKING
  • Reasons.PROJECTION_DUCKING

Lorsque les restrictions d'atténuation sont actives, les demandes des utilisateurs à:

  • Les modifications de volume sont en cours de traitement. Le nouveau niveau de volume actuel est réglé sur (au lieu du volume d'origine). Évolutions futures des volumes sont effectuées à partir de ce niveau.

  • La désactivation du son a été traitée.

Mise à jour de l'index

La commande suivante est considérée comme une mise à jour asynchrone de l'index de volume: Reasons.EXTERNAL_AMP_VOL_FEEDBACK

C'est pourquoi AudioControl HAL peut mettre à jour l'index actuel du groupe de volumes. à l'index spécifié. Elle est principalement utilisée pour le retour d'information du système audio. pour la demande de modification du volume de Car Audio Framework. La mise à jour de l'index est également communiqué avec Apps en tant que rappel CarVolumeGroupEvent pour synchroniser l'index.

Exemples

Cas d'utilisation: l'utilisateur met à jour l'index de volume à 30

  • L'utilisateur utilise l'application Volume pour définir l'index de volume sur 30.

  • Cet index est converti en gain de volume et envoyé à l'HAL audio.

  • Les implémentations de Audio HAL par les fournisseurs reçoivent la nouvelle augmentation de volume et la mise à jour du système audio (comme un ampli externe).

  • Le système audio répond que le niveau de volume n'est mis à jour qu'à l'index 15 (pour des raisons inconnues d'Android).

  • Implémentations par le fournisseur de déclencheurs AudioControl HAL:

    IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {...,  15 /* New index */})
    
  • Le service audio de la voiture utilise le nouvel index du rappel utilisé pour la persistance et les rappels de l'application de volume. L'index demandé par l'utilisateur est de 30. Cependant, le retour asynchrone du système audio met à jour l'index à 15.

Cas d'utilisation: première lecture audio après la sortie de la suspension

  • L'index de volume avant suspension est défini sur un niveau élevé de 95 (plage: [0-99]).

  • Android passe à l'état "Suspendre".

  • Une fois qu'Android existe une suspension (par exemple, reprendre):

    • Le fournisseur Audio HAL/AudioControl HAL applique un indice de sécurité de 30 au du système audio en local.

    • Le fournisseur AudioControl HAL déclenche également le rappel pour l'index sécurisé:

    IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {...,  30 /* safe index */})
    
  • Le service audio de la voiture utilise le nouvel index du rappel utilisé pour et ses propres rappels à l'application de volume synchronisant l'index. L'index de volume avant suspension est de 95. Cependant, après la reprise, cet index est défini sur un niveau de volume sûr de 30 par l'outil d'implémentation de AudioControl HAL.

Configuration du volume dynamique

Pour cette fonctionnalité, nous prenons en compte les principaux cas d'utilisation suivants:

  1. Configuration de fin de ligne pour les véhicules.

    • Les constructeurs automobiles préfèrent mettre à jour les configurations de volume en fonction de la date de fin de vie de votre système audio. Il s'agit généralement d'un téléchargement indépendant sans mise à jour Image du logiciel Android

    • Les constructeurs automobiles peuvent avoir besoin de mettre à jour la configuration du volume des services Google Cloud.

  2. Configuration de l'environnement d'exécution. Les systèmes audio de l'automobile acceptent des configurations d'amplificateur et que ces ECU peuvent héberger la plage de volume qui sont interrogées au démarrage.

  3. Configuration à la demande. Proposé pour répondre au besoin croissant de Fonctionnalités audio basées sur la demande pour lesquelles les utilisateurs s'abonnent à un signal amélioré pendant un certain temps. Les nouvelles configurations de plages de volumes valable pendant toute la durée de l'abonnement.

Conception

La configuration du volume dynamique s'effectue en trois étapes:

  • Découverte : L'implémentation HAL d'AudioControl du fournisseur détecte un nouveau volume des mises à jour de plages via un mécanisme d'IPC personnalisé appartenant au fournisseur.

    Une fois découvert, un rappel est généré AudioControl::IModuleChangeCallback

  • Mettre à jour. La pile audio de la voiture met à jour les états des groupes de volumes avec le nouveau des plages de volume.

    Nous nous efforçons de conserver le même niveau de volume après la mise à jour de la plage de volume. Toutefois, si l'index dépasse les limites, l'index de volume actuel est défini sur une valeur sûre. Par exemple, le niveau par défaut fourni par le fournisseur pendant le rappel.

  • Rappel.

    • Après les mises à jour de la plage des groupes de volumes, la pile audio de la voiture déclenche un rappel pour applications enregistrées via CarVolumeGroupEventCallback.

    • CarVolumeGroupEvent contient le CarVolumeGroupInfo mis à jour, Event-type (ce qui a changé) et des informations supplémentaires (pourquoi elle a changé).

image

Figure 1 : Configuration dynamique du volume.

API HAL

AudioControl @ 3.0 AIDL

La version 3.0 d'AudioControl AIDL HAL introduit les API suivantes:

API
IAudioControl#setModuleChangeCallback Définit une instance de IModuleChangeCallback avec l'HAL AudioControl.
IAudioControl#clearModuleChangeCallback Efface l'instance de IModuleChangeCallback précédemment défini avec le paramètre AudioControl HAL.
IModuleChangeCallback#onAudioPortsChanged Rappel pour notifier les modifications apportées aux AudioPorts

Séquence

Le diagramme séquentiel de la configuration du volume dynamique est présenté ci-dessous.

image

Figure 2. Schéma séquentiel pour la configuration d'un volume dynamique.

Aspects clés

Pour optimiser cette fonctionnalité, tenez compte des points suivants.

  • Les AudioPorts fournis dans le cadre du rappel doivent correspondre aux Définition du BUS:

    • Port de l'appareil : IN_DEVICE, OUT_DEVICE
    • Connexion. BUS
    • Adresse : Définies dans la définition du HAL audio
    • Mode de gain JOINT
  • Les fournisseurs doivent définir un sur-ensemble de définitions de plages de volumes dans la section la règle HAL et utiliser le rappel pour la personnaliser pour des variantes de véhicules. Consultez le IModuleChangeCallbac Définition AIDL pour en savoir plus.

  • Lorsque plusieurs BUS audio appartiennent au même groupe de volumes, chacun doit ont des définitions de plage de volume identiques. Dans le cas contraire, la voiture audio qui rejette la nouvelle définition de la plage de volumes.