Dans Android 10, car_audio_configuration.xml
a remplacé car_volumes_groups.xml
et IAudioControl.getBusForContext
. Les fichiers de règles audio, généralement contenus dans la partition du fournisseur, représentent la configuration matérielle audio de la carte. Tous les appareils référencés dans car_audio_configuration.xml
doivent être définis dans audio_policy_configuration.xml
.
La figure 1 illustre une vue d'ensemble de l'architecture du service audio de la voiture, dans laquelle le service audio de la voiture lit le fichier de configuration audio de la voiture pour configurer l'audio de l'appareil.
Figure 1 : Présentation de l'architecture audio de la voiture.
Placez le fichier de configuration audio de la voiture dans vendor/etc/
ou system/etc/
sur l'appareil, vendor/etc/
étant le premier emplacement où le service audio de la voiture recherche le fichier. Les services audio de la voiture lisent car_audio_configuration.xml
pour déterminer la configuration audio.
Zones audio de la voiture :
- Chaque zone audio contient un ID unique.
- Chaque zone audio peut être associée à une zone d'occupant.
Les actions audio de chaque zone sont indépendantes les unes des autres :
- Priorité audio
- Routage audio
- Atténuation audio
Groupes de volumes de la voiture :
Tous les appareils audio contenant un groupe de volume sont contrôlés ensemble avec les mêmes modifications de gain. La configuration du gain audio doit être identique pour tous les appareils d'un groupe.
Mappage du contexte audio aux appareils audio. Utilisez-le pour créer un mix audio qui mappe les utilisations audio à un périphérique de sortie.
Tous les contextes audio doivent être représentés dans une zone. Cela permet de configurer précisément le routage audio pour toutes les utilisations des attributs audio.
Contextes audio
Pour simplifier la configuration de l'audio AAOS, les utilisations similaires ont été regroupées dans CarAudioContexts
. Ces contextes audio sont utilisés dans CarAudioService
pour définir le routage, les groupes de volume, la gestion de la priorité audio et la gestion de la diminution du volume. Les contextes audio statiques dans AAOS sont listés dans ce tableau.
Ce tableau décrit le mappage entre les contextes et les utilisations audio. Des lignes en surbrillance sont fournies pour une nouvelle utilisation du système.
CarAudioContext | Associated AttributeUsages |
---|---|
MUSIC |
UNKNOWN GAME MEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND |
ASSISTANCE_SONIFICATION |
EMERGENCY |
EMERGENCY |
SAFETY |
SAFETY |
VEHICLE_STATUS |
VEHICLE_STATUS |
ANNOUNCEMENT |
ANNOUNCEMENT |
Activer le routage AAOS
Pour utiliser le routage basé sur AAOS, vous devez définir l'indicateur audioUseDynamicRouting
sur true
:
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
Lorsque false
, le routage et une grande partie de CarAudioService
sont désactivés, AAOS revient au comportement par défaut de AudioService
.
Moteur de règles audio configurable
Pour étendre davantage la gestion de l'audio dans les voitures sous Android 14, AAOS a introduit l'utilisation de la gestion audio via le moteur de règles audio configurables (CAP). Cela permet de contrôler plus facilement le routage audio et la gestion du volume, et de définir de manière polyvalente :
Vous pouvez activer le moteur de règles audio configurables (CAP) à l'aide de useCoreAudioVolume
et useCoreAudioRouting
. Pour en savoir plus, consultez Moteur de règles audio configurables.
Zone principale
Par défaut, tous les contenus audio sont routés vers la zone principale. Il n'existe qu'une seule zone principale, qui est indiquée dans la configuration par l'attribut isPrimary="true"
. La zone principale reçoit automatiquement le Audiomanager.PRIMARY_AUDIO_ZONE
.
Exemple de configuration (version 2)
Par exemple, un véhicule peut comporter deux zones : une zone principale et un système de divertissement pour les sièges arrière. Dans ce scénario, vous pouvez concevoir une version 2 possible de car_audio_configuration.xml
comme suit :
<audioZoneConfiguration version="2.0">
<zone name="primary zone" isPrimary="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="music"/>
<context context="announcement"/>
</device>
<device address="bus3_call_ring_out">
<context context="call_ring"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
<group>
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
<group>
<device address="bus4_call_out">
<context context="call"/>
</device>
</group>
<group>
<device address="bus5_alarm_out">
<context context="alarm"/>
</device>
</group>
<group>
<device address="bus7_system_sound_out">
<context context="system_sound"/>
<context context="emergency"/>
<context context="safety"/>
<context context="vehicle_status"/>
</device>
</group>
</volumeGroups>
</zone>
<zone name="rear seat zone" audioZoneId="1">
<volumeGroups>
<group>
<device address="bus100_rear_seat">
<context context="music"/>
<context context="navigation"/>
<context context="voice_command"/>
<context context="call_ring"/>
<context context="call"/>
<context context="alarm"/>
<context context="notification"/>
<context context="system_sound"/>
<context context="emergency"/>
<context context="safety"/>
<context context="vehicle_status"/>
<context context="announcement"/>
</device>
</group>
</volumeGroups>
</zones>
</audioZoneConfiguration>
Dans cet exemple, la zone principale sépare certains contextes audio sur différents appareils. Cela permet à la HAL d'appliquer différents effets de post-traitement et de mixer la sortie sur chaque appareil à l'aide du matériel du véhicule.
Les appareils ont été répartis dans plusieurs groupes de volume : multimédia, navigation, appels, alarmes et sons système. Si le système est configuré sur useFixedVolume
, les niveaux de volume de chaque groupe sont transmis à la HAL pour s'appliquer à la sortie de ces appareils.
Pour la zone principale, nous vous recommandons de séparer les sons système des autres sons. Cela permet de traiter les sons du véhicule avec une priorité plus élevée. Le service audio de la voiture fait déjà ces distinctions pour les sons du véhicule en termes de gestion de la mise en avant et de l'atténuation. Par exemple, une demande de focus audio d'urgence a une priorité plus élevée qu'une autre demande de focus.
Dans l'exemple de zone secondaire, tous les contextes audio sont routés vers un seul appareil et un seul groupe de volumes.
Définition du groupe de volumes pour le moteur CAP
Pour utiliser la gestion du volume via le moteur CAP, comme indiqué dans Moteur de règles audio configurable, la définition du groupe de volume doit également contenir un nom :
<group name="media">
<device address="bus0_media_out">
<context context="music"/>
<context context="announcement"/>
</device>
<device address="bus3_call_ring_out">
<context context="call_ring"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
<group name="navigation">
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
Ce nom de groupe de volumes doit correspondre au nom de volume défini dans le moteur CAP. De plus, useFixedVolume
doit également être défini sur false
. Pour en savoir plus, consultez Indicateurs de configuration audio AAOS.
Configuration audio de la zone de l'occupant
Dans Android 11, car_audio_configuration.xml
a introduit deux nouveaux champs, audioZoneId
et occupantZoneId
. Vous pouvez utiliser audioZoneId
pour contrôler la gestion des zones audio. Vous pouvez utiliser occupantZoneId
pour configurer le routage en fonction de l'ID utilisateur.
En revenant à la configuration audio, mais en utilisant le nouveau champ pour le mappage de l'ID de zone d'occupant et de l'ID de zone audio, la nouvelle configuration sans les définitions de groupe de volume peut être configurée comme suit :
<audioZoneConfiguration version="2.0">
<zone name="primary zone" isPrimary="true" occupantZoneId="0">
...
</zone>
<zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">
...
</zone>
</zones>
</audioZoneConfiguration>
La configuration définit un mappage de la zone principale vers la zone d'occupant 0 et de audioZoneId
1 vers occupantZoneId
1. Vous pouvez configurer n'importe quel mappage entre la zone d'occupant et la zone audio. Toutefois, le mappage doit être un-à-un. Les règles qui définissent les deux nouveaux champs sont les suivantes :
audioZoneId
pour la zone principale est toujours l'IDPRIMARY_AUDIO_ZONE
. SiisPrimary="true"
est défini,audioZoneId
n'est pas nécessaire.Les numéros
audioZoneId
etoccupantZoneId
ne peuvent pas être répétés.audioZoneId
etoccupantZoneId
ne peuvent avoir qu'un mappage un à un.
Configuration audio de la voiture sous Android 14
Dans Android 14, AAOS a introduit le service de plug-in OEM, qui vous permet de gérer le comportement audio supervisé par le service audio de la voiture. En plus des nouveaux services de plug-in, les modifications suivantes sont ajoutées au fichier de configuration audio de la voiture :
- Contexte audio de la voiture défini par l'OEM
- Configurations dynamiques des zones non principales
Contexte audio de la voiture défini par l'OEM
Pour activer une configuration audio flexible, dans Android 14, le service audio automobile permet de regrouper les utilisations audio différemment des contextes audio statiques définis.
Ce contexte défini par l'OEM peut être défini dans le fichier car_audio_configuration.xml
version 3.
Les contextes audio statiques prédéfinis sont utilisés à la place. Le format général du contexte audio de voiture défini par l'OEM est présenté plus loin.
Chaque contexte OEM nécessite un name
ainsi qu'une liste d'attributs audio associés au contexte. Dans l'exemple précédent, deux contextes sont définis :
<carAudioConfiguration version="3">
<oemContexts>
<oemContext name="media">
<audioAttributes>
<usage value="AUDIO_USAGE_MEDIA" />
<usage value="AUDIO_USAGE_UNKNOWN"/>
</audioAttributes>
</oemContext>
<oemContext name="game">
<audioAttributes>
<usage value="AUDIO_USAGE_GAME" />
</audioAttributes>
</oemContext>
...
- Le contexte
media
contientAUDIO_USAGE_MEDIA
etAUDIO_USAGE_UNKNOWN
. - Le contexte
game
ne contient queAUDIO_USAGE_GAME
Le contexte doit être défini en haut du fichier car_audio_configuration.xml
. Une fois les contextes OEM définis, le reste de la configuration audio de la voiture peut se dérouler comme avant. Les règles suivantes s'appliquent au contexte audio de la voiture :
Les définitions de contexte OEM sont facultatives. Le contexte audio statique est utilisé à la place.
Ne répétez pas les noms de contextes.
N'attribuez pas l'utilisation d'attributs audio à plusieurs contextes.
Toutes les utilisations audio définies dans
AudioAttributes
doivent être utilisées pour construire le contexte.
À proprement parler, la représentation sous forme de chaîne android.audio.policy.configuration.V7_0.AudioUsage
de l'utilisation audio doit être utilisée pour la définition du contexte audio OEM. À l'avenir, les utilisations d'attributs audio plus récentes seront attribuées au contexte le plus approprié pour réduire les erreurs lors de la migration d'une version d'Android à une autre.
Bien que le contexte défini par l'OEM ait été introduit pour étendre davantage le service audio du plug-in OEM, il peut toujours être utilisé sans le service de plug-in OEM. Le comportement audio ressemble à celui du service audio statique :
Interactions de priorité audio. L'attribut audio permet de déterminer le comportement de correspondance le mieux adapté, tel qu'il est défini par la matrice d'interaction de focus audio. Pour en savoir plus, consultez Focus audio.
L'attribut audio "Contrôle du volume audio" permet de déterminer la meilleure correspondance :
- Groupe de volume basé sur le contexte défini par l'OEM.
- Priorité configurée dans la liste des volumes statiques.
Comportement de l'atténuation audio :
L'utilisation des attributs audio pour la mise au point audio actuelle est utilisée pour mapper les informations sur le périphérique audio de sortie, telles qu'elles sont définies dans le fichier de configuration audio de la voiture.
L'attribut audio permet de mapper le contexte statique correspondant à la diminution du volume, en fonction de la matrice statique de diminution du volume audio.
Stratégies produit du moteur CAP
Lorsqu'un appareil doit utiliser le moteur CAP pour la gestion du volume ou du routage, le contexte défini par l'OEM doit correspondre à la définition de la stratégie produit du moteur CAP. Sinon, vous pouvez utiliser le contexte défini par l'OEM sans le moteur CAP.
Pour en savoir plus, consultez la stratégie produit du moteur CAP dans AAOS.
Configurations des zones audio dynamiques
Dans Android 14, pour s'adapter à une configuration dynamique des zones audio, le schéma de configuration audio de la voiture permettant de définir les zones audio est également mis à jour vers la version 3. Le nouveau schéma nécessite de configurer chaque zone.
<carAudioConfiguration version="3">
<!-- optional OEM context -->
<oemContexts>
<oemContext name="media">
<audioAttributes>
<usage value="AUDIO_USAGE_MEDIA" />
<usage value="AUDIO_USAGE_UNKNOWN"/>
</audioAttributes>
</oemContext>
<oemContext name="game">
<audioAttributes>
<usage value="AUDIO_USAGE_GAME" />
</audioAttributes>
</oemContext>
...
</oemContexts>
<zones>
<zone name="primary zone" isPrimary="true" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="primary zone config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="media"/>
<context context="game"/>
<context context="announcement"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
...
</zoneConfigs>
</zone
</zones>
Pour en savoir plus, consultez le fichier de version 3 défini dans device/generic/car/emulator/audio/car_audio_configuration.xml
. À partir d'Android 14, la zone principale ne peut avoir qu'une seule configuration. Les zones non principales peuvent comporter plusieurs configurations. Les règles suivantes s'appliquent aux configurations audio de voiture :
La zone audio principale ne peut avoir qu'une seule configuration.
Les zones audio non principales peuvent avoir plusieurs configurations.
Le nom doit être unique pour chaque zone audio et configuration de zone audio.
Les configurations audio peuvent varier au sein d'une zone audio :
- La configuration des groupes de volumes n'a pas besoin d'être identique.
- L'attribution du contexte audio n'a pas besoin d'être identique.
Les noms des périphériques de sortie audio doivent être uniques dans les zones ou les configurations. Un nom d'appareil ne doit apparaître qu'une seule fois dans une configuration audio ou des zones.
Les appareils audio appartenant au même groupe de volume doivent avoir les mêmes configurations de gain audio.
Tous les contextes audio (OEM ou statiques) doivent être attribués à chaque configuration audio.
Compatibilité ascendante
Bien que les nouvelles versions de car_audio_configuration.xml
introduisent de nouvelles fonctionnalités à chaque mise à jour, vous pouvez toujours utiliser d'anciens fichiers dans les versions plus récentes d'AAOS. Les OEM qui passent à de nouvelles versions d'Android peuvent réutiliser le fichier car_audio_configuration.xml
.
Pour utiliser une nouvelle fonctionnalité qui nécessite de nouvelles informations contenues dans car_audio_configuration.xml
, la version doit être mise à jour. Si vous essayez d'utiliser une ancienne version d'un fichier contenant des informations non compatibles avec cette version, une erreur IllegalStateException
s'affiche au démarrage du service automobile. Le message d'exception contient les informations pertinentes sur les informations utilisées et la version minimale requise.