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. Le service audio de la voiture recherche d'abord le fichier dans vendor/etc/. Le service audio de la voiture lit car_audio_configuration.xml pour déterminer la configuration audio.
Zones audio de la voiture :
- Chaque zone audio contient un ID de zone audio unique.
- Chaque zone audio peut être mappée à une zone d'occupant.
Les actions audio de chaque zone sont indépendantes les unes des autres :
- Priorité audio
- Routage de l'audio
- Atténuation audio
Groupes de volumes de la voiture :
Tous les appareils audio contenant un groupe de volumes sont contrôlés ensemble avec les mêmes modifications de gain. La configuration du gain audio pour tous les appareils d'un groupe doit être la même.
Mappage du contexte audio aux appareils audio. Utilisez cette option pour créer un mixage audio qui mappe les utilisations audio à un appareil 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 volumes, la priorité audio et la gestion de l'atténuation. Les contextes audio statiques dans AAOS sont répertoriés dans ce tableau.
Ce tableau décrit le mappage entre les contextes audio et les utilisations. Les lignes en surbrillance sont fournies pour une nouvelle utilisation du système.
| CarAudioContext | AttributUsages associés |
|---|---|
MUSIC |
UNKNOWNGAMEMEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATIONVOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATIONNOTIFICATION_* |
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'option audioUseDynamicRouting sur true :
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
Lorsque la valeur est false, le routage et une grande partie de CarAudioService sont désactivés, et AAOS revient au comportement par défaut de AudioService.
Moteur de règles audio configurable
Pour étendre davantage la gestion audio de la voiture dans Android 14, AAOS a introduit l'utilisation de la gestion audio via le moteur de règles audio configurable (CAP). Cela offre plus de flexibilité pour contrôler le routage audio et la gestion du volume, et permet une définition polyvalente des éléments suivants :
Vous pouvez activer le moteur de règles audio configurable (CAP) à l'aide de
useCoreAudioVolume et useCoreAudioRouting. Pour en savoir plus, consultez
Moteur de règles audio configurable
.
Zone principale
Par défaut, tout l'audio est acheminé vers la zone principale. Il n'existe qu'une seule zone principale
indiquée dans la configuration par l'attribut
isPrimary="true". La zone principale est automatiquement attribuée à 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 passagers 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é regroupés en plusieurs groupes de volumes : mé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 être appliqués à 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 priorité et de l'atténuation. Par exemple, une demande de priorité pour un son d'urgence a une priorité plus élevée qu'une autre demande de priorité.
Dans l'exemple de zone secondaire, tous les contextes audio sont acheminé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 volumes 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
Options de configuration audio AAOS.
Configuration audio de la zone d'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 volumes 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 pour la zone principale vers la zone d'occupant 0 et audioZoneId 1 vers occupantZoneId 1. Tout mappage entre la zone d'occupant et la zone audio peut être configuré. Toutefois, le mappage doit être un-à-un. Les règles qui définissent les deux nouveaux champs sont les suivantes :
audioZoneIdpour la zone principale est toujours l'IDPRIMARY_AUDIO_ZONE. SiisPrimary="true"est défini,audioZoneIdn'est pas nécessaire.Les numéros
audioZoneIdetoccupantZoneIdne peuvent pas être répétés.audioZoneIdetoccupantZoneIdne peuvent avoir qu'un mappage un-à-un.
Configuration audio de la voiture 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 de 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 de la voiture permet de regrouper les utilisations audio différemment des contextes audio statiques Audio contexts 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 la voiture défini par l'OEM est présenté plus loin.
Les contextes OEM nécessitent chacun un name ainsi qu'une liste d'utilisations d'attributs audio qui sont attribuées 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
mediacontientAUDIO_USAGE_MEDIAetAUDIO_USAGE_UNKNOWN. - Le contexte
gamecontient uniquementAUDIO_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 contexte.
N'attribuez pas l'utilisation d'attributs audio à plusieurs contextes.
Toutes les utilisations audio définies dans
AudioAttributesdoivent être utilisées pour construire le contexte.
À proprement parler, la représentation 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é afin de 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 de 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 est utilisé pour déterminer le comportement le plus adapté, tel qu'il est configuré par la matrice d'interaction de priorité audio. Pour en savoir plus, consultez Priorité audio.
L'attribut audio de contrôle du volume audio est utilisé pour déterminer la meilleure correspondance :
- Groupe de volumes basé sur le contexte défini par l'OEM.
- Priorité de la liste de volumes statique configurée.
Comportement d'atténuation audio :
L'utilisation de l'attribut audio pour la priorité audio actuelle est utilisée pour mapper les informations de l'appareil audio de sortie, telles qu'elles sont définies dans le fichier de configuration audio de la voiture.
L'attribut audio est utilisé pour mapper le contexte statique correspondant à l'atténuation, en fonction de la matrice d'atténuation audio statique.
Stratégies de produits 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 de 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 de produit du moteur CAP produit dans AAOS.
Configurations dynamiques des zones audio
Dans Android 14, pour prendre en charge 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 la configuration de 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 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 avoir plusieurs configurations. Les règles suivantes s'appliquent aux configurations audio de la 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 chaque configuration de zone audio.
Dans une zone audio, les configurations audio peuvent différer :
- La configuration des groupes de volumes n'a pas besoin d'être la même.
- L'attribution du contexte audio n'a pas besoin d'être la même.
Les noms des appareils de sortie audio doivent être uniques dans les zones ou les configurations. Le nom d'un 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 volumes doivent avoir les mêmes configurations de gain audio.
Tous les contextes audio (OEM ou statiques) doivent être attribués pour 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 des fichiers plus anciens 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 tentez d'utiliser une ancienne version d'un fichier contenant des informations non compatibles avec cette version de fichier, une exception IllegalStateException est générée au démarrage du service de voiture. Le message d'exception contient les informations pertinentes sur les informations utilisées et la version minimale requise.