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.
Comportement de diminution recommandé
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()
etgetGroupMaxVolume()
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:
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.
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.
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 leCarVolumeGroupInfo
mis à jour, Event-type (ce qui a changé) et des informations supplémentaires (pourquoi elle a changé).
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.
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
- Port de l'appareil :
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.