Configuration audio de la voiture

Dans Android 10, car_audio_configuration.xml a remplacé car_volumes_groups.xml et IAudioControl.getBusForContext . Les fichiers de politique 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 ci-dessous illustre un aperçu général 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.

Présentation de l'architecture audio de la voiture

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 vendor\etc\ étant le premier endroit recherché pour le fichier par le service audio de la voiture. 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 de zone audio unique.
  • Chaque zone audio peut être mappée à une zone d'occupant.
  • Les actions audio dans chaque zone sont indépendantes les unes des autres :

    • Focus audio
    • Routage audio
    • Ducking audio
  • Groupes de volumes de voitures :

    • Tous les appareils audio contenant un groupe de volume sont contrôlés avec les mêmes changements de gain. La configuration du gain audio pour tous les appareils d'un groupe doit être la même.

    • Mappage du contexte audio avec les périphériques audio. Utilisez-le pour construire un mixage 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 avec précision le routage audio pour toutes les utilisations des attributs audio.

Contextes audio

Pour simplifier la configuration de l'audio AAOS, des 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 focalisation audio et la gestion du ducking. Les contextes audio statiques dans AAOS sont répertoriés ci-dessous.

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 Utilisations d'attributs associés
MUSIQUE UNKNOWN
GAME
MEDIA
LA NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
COMMANDE VOCALE ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING NOTIFICATION_RINGTONE
APPEL VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARME ALARM
NOTIFICATION NOTIFICATION
NOTIFICATION_*
SYSTÈME_SOUND ASSISTANCE_SONIFICATION
URGENCE EMERGENCY
SÉCURITÉ SAFETY
VEHICLE_STATUS VEHICLE_STATUS
ANNONCE 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 et AAOS revient au comportement par défaut de AudioService .

Zone principale

Par défaut, tout l'audio est acheminé vers la zone principale. Une seule zone principale existe, indiquée dans la configuration par l'attribut isPrimary="true" . La zone principale se voit automatiquement attribuer le Audiomanager.PRIMARY_AUDIO_ZONE .

Exemple de configuration (version 2)

Par exemple, un véhicule peut avoir deux zones, une zone principale et un système de divertissement aux places arrière. Dans ce scénario, vous pouvez concevoir une éventuelle version 2 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 au HAL d'appliquer différents effets de post-traitement et de mélanger la sortie sur chaque appareil en utilisant le matériel du véhicule. Les appareils ont été répartis en plusieurs groupes de volumes : médias, navigation, appels, alarmes et sons du système. Si le système est configuré pour useFixedVolume , les niveaux de volume de chaque groupe sont transmis au HAL pour s'appliquer à la sortie de ces périphériques.

Pour la zone principale, nous recommandons que les sons du système soient séparés des autres sons. Cela permet de traiter les bruits des véhicules avec une priorité plus élevée. Le service audio automobile fait déjà ces distinctions pour les sons des véhicules en termes de gestion de la concentration et de l'esquive. Par exemple, une demande de mise au point sonore d'urgence a une priorité plus élevée qu'une autre demande de mise au point.

Pour simplifier les choses, dans l'exemple de la zone secondaire, tous les contextes audio sont acheminés vers un seul périphérique et un groupe de volumes.

Configuration audio de la zone 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 revisitant la configuration audio ci-dessus, mais en utilisant le nouveau champ pour le mappage de l'identifiant de zone d'occupant et de l'identifiant 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 ci-dessus définit un mappage pour la zone principale vers la zone d'occupant 0 et audioZoneId 1 vers occupantZoneId 1. En général, tout mappage entre la zone d'occupant et la zone audio peut être configuré. Cependant, le mappage doit être un à un. Les règles qui ont défini les deux nouveaux champs sont répertoriées ci-dessous.

  • audioZoneId pour la zone principale est toujours l’identifiant PRIMARY_AUDIO_ZONE . Si isPrimary="true" est défini, alors audioZoneId n'est pas nécessaire.

  • Les numéros audioZoneId et occupantZoneId ne peuvent pas être répétés.

  • audioZoneId et occupantZoneId ne peuvent avoir qu’un mappage un-à-un.

Configuration audio de voiture Android 14

Dans Android 14, AAOS a introduit le service de plugin OEM, qui vous permet de gérer plus activement le comportement audio supervisé par le service audio de la voiture. Parallèlement aux nouveaux services de plug-in, les modifications suivantes sont ajoutées au fichier de configuration audio de la voiture :

  • Contexte audio de voiture défini par l'OEM
  • Configurations dynamiques de zone non principale

Contexte audio de voiture défini par l'OEM

Pour permettre une configuration audio flexible, dans Android 14, le service audio de voiture permet de regrouper les utilisations audio différemment des contextes audio statiques définis ci-dessus. Ce contexte défini par l'OEM peut être défini dans le fichier car_audio_configuration.xml version 3.

Au lieu de cela, les contextes audio statiques actuellement définis sont utilisés. Le format général du contexte audio de voiture défini par l'OEM est présenté ci-dessous.

Les contextes OEM nécessitent chacun un name ainsi qu'une liste d'utilisation des attributs audio attribués au contexte. Dans l'exemple ci-dessus, 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 contient AUDIO_USAGE_MEDIA et AUDIO_USAGE_UNKNOWN
  • le contexte game contient uniquement AUDIO_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 des 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 nouvelles utilisations des attributs audio 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 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 mise au point audio. L'attribut audio est utilisé pour déterminer le meilleur comportement de correspondance tel que défini par la matrice d'interaction de focus audio. Pour plus de détails, voir Focus audio .

  • L'attribut audio du 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 statiques configurée.
  • Comportement d'atténuation audio :

    • L'utilisation de l'attribut audio pour le focus audio actuel est utilisée pour mapper les informations du périphérique audio de sortie telles que définies dans le fichier de configuration audio de la voiture.

    • L'attribut audio est utilisé pour mapper le contexte statique correspondant au canard, sur la base de la matrice de ducking audio statique.

Configurations de zones audio dynamiques

Dans Android 14, pour prendre en charge une configuration dynamique des zones audio, le schéma de configuration audio du véhicule pour définir les zones audio est également mis à jour vers la version 3. Le nouveau schéma nécessite la configuration d'une configuration pour 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 (1) 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 configuration de zone audio.

  • Au sein d’une zone audio, les configurations audio peuvent différer :

    • La configuration des groupes de volumes ne doit pas nécessairement être la même.
    • L'attribution du contexte audio n'a pas besoin d'être la même.
  • Les noms des périphériques de sortie audio doivent être uniques dans toutes les zones ou 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 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 mettant à jour vers 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. Tenter d'utiliser une ancienne version d'un fichier avec des informations non prises en charge dans cette version de fichier lève une IllegalStateException lorsque le service de voiture est démarré. Le message d'exception contient les informations pertinentes sur les informations utilisées et la version minimale requise.