Configuration du système audio de la voiture

Dans Android 10, car_audio_configuration.xml a été remplacé car_volumes_groups.xml et IAudioControl.getBusForContext. Règle audio , généralement contenus dans la partition du fournisseur, représentent le matériel audio la configuration du tableau. Tous les appareils référencés dans car_audio_configuration.xml doit être défini dans audio_policy_configuration.xml

La figure 1 ci-dessous présente une vue d'ensemble du service audio pour voiture. architecture dans laquelle le service audio de la voiture lit la configuration audio de la voiture pour configurer l'audio de l'appareil.

Présentation de l'architecture audio pour voiture

Figure 1 : Présentation de l'architecture audio pour voiture.

Placez le fichier de configuration audio de la voiture dans vendor\etc\ ou system\etc\ sur l'appareil (avec le vendor\etc\) d’être le premier endroit à rechercher le fichier par le service audio de la voiture. La voiture les services audio lisent car_audio_configuration.xml pour déterminer le contenu audio configuration.

Zones du système audio pour voiture:

  • Chaque zone audio contient un identifiant de zone audio unique.
  • Chaque zone audio peut être mappée à une zone de l'occupant.
  • Les actions audio de chaque zone sont indépendantes les unes des autres:

    • Priorité audio
    • Routage audio
    • Diminution du volume
  • Groupes de volumes de voiture:

    • Tous les appareils audio contenant un groupe de volumes sont contrôlés ensemble. avec les mêmes variations de gain. Configuration du gain audio pour tous les appareils dans un groupe doivent être identiques.

    • Mise en correspondance du contexte audio avec les appareils audio Utilisez-le pour créer une piste 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 pour que le routage audio soit correctement configuré pour toutes les utilisations d'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 tout au long CarAudioService pour définir le routage, les groupes de volume, le ciblage audio et la diminution gestion de la sécurité. Les contextes audio statiques dans AAOS sont listés ci-dessous.

Ce tableau décrit la correspondance entre les contextes audio et les utilisations. En surbrillance pour chaque nouvelle utilisation du système.

CarAudioContext AttributeUsages associés
MUSIQUE UNKNOWN
GAME
MEDIA
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
COMMANDE_VOCALE ASSISTANT
ASSISTANCE_ACCESSIBILITY
APPEL_SONNE NOTIFICATION_RINGTONE
APPELER VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARME ALARM
NOTIFICATION NOTIFICATION
NOTIFICATION_*
SON SYSTÈME 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'option audioUseDynamicRouting sur true:

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

Lorsque false, le routage et une grande partie de CarAudioService, est désactivé et AAOS cesse de fonctionner. au comportement par défaut de AudioService.

Zone principale

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

Exemple de configuration (version 2)

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

Pour la zone principale, nous vous recommandons de séparer les sons du système des autres sons. Les sons du véhicule sont ainsi traités avec une priorité plus élevée. Le service audio pour voiture effectue déjà ces distinctions pour les sons du véhicule en termes de concentration et de gestion. Par exemple, un signal sonore d'urgence a une priorité plus élevée qu'une autre.

Pour simplifier, dans l'exemple de zone secondaire, tous les contextes audio sont vers un seul appareil et un seul groupe de volumes.

Configuration audio de la zone de l'occupant

Dans Android 11, car_audio_configuration.xml a été 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 en fonction de l'ID utilisateur.

Nous revoyons la configuration audio ci-dessus, mais en utilisant le nouveau champ pour le mappage de l'ID de la zone de l'occupant et de celui de la zone audio, la nouvelle configuration sans les les définitions de groupes de volumes peuvent être configurées 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 entre la zone principale et la zone de l'occupant 0. et audioZoneId de 1 à occupantZoneId 1. En général, tout mappage entre la zone de l'occupant et la zone audio peuvent être configurées. Cependant, le mappage doit être en tête-à-tête. Les règles qui définissent les deux nouveaux champs sont listé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 pour voiture Android 14

Dans Android 14, AAOS a lancé le service de plug-in OEM, qui vous permet de gérer plus activement les comportements audio surveillés par la voiture service audio. Avec les nouveaux services de plug-ins, les modifications suivantes sont ajouté au fichier de configuration audio de la voiture:

  • Contexte audio de la voiture défini par l'OEM
  • Configurations dynamiques de zone secondaire

Contexte audio pour la voiture défini par l'OEM

Pour activer une configuration audio flexible, dans Android 14, le service audio de la voiture permet que les utilisations de l'audio soient regroupés 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 du fichier.

À la place, les contextes audio statiques actuellement définis sont utilisés. Généralités du contexte audio de voiture défini par l'OEM ci-dessous.

Les contextes OEM nécessitent chacun un name, ainsi qu'une liste d'attributs audio. qui sont affectés au contexte. Dans l'exemple ci-dessus, deux contextes sont définie:

<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 ne contient que AUDIO_USAGE_GAME.

Le contexte doit être défini en haut de car_audio_configuration.xml. . Une fois les contextes OEM définis, le reste de la configuration audio de la voiture peut procéder comme précédemment. Les règles suivantes s'appliquent au contexte audio d'une voiture:

  • Les définitions de contexte OEM sont facultatives. Le contexte audio statique est utilisé à la place.

  • Ne répétez pas les noms des contextes.

  • N'attribuez pas l'utilisation d'attributs audio à plusieurs contextes.

  • Toutes les utilisations audio définies dans AudioAttributes doivent être utilisées pour créer le contexte.

À proprement parler, le android.audio.policy.configuration.V7_0.AudioUsage La représentation sous forme de chaîne de l'utilisation du contenu audio doit être utilisée pour le contexte audio de l'OEM. définition. À l'avenir, les utilisations d'attributs audio plus récentes seront attribuées au le contexte le plus approprié pour réduire les erreurs lors de la migration depuis un vers une autre version.

Le contexte défini par l'OEM a été introduit pour étendre davantage le plug-in OEM. service audio, il peut toujours être utilisé sans le service de plug-in OEM. Audio ressemble à celui du service audio statique:

  • Interactions avec priorité audio. L'attribut audio permet de déterminer le comportement de correspondance tel qu'il est configuré par la matrice d'interaction du ciblage audio. Pour consultez la section Priorité audio.

  • L'attribut audio de contrôle du volume permet de déterminer la meilleure correspondance:

    • Groupe de volumes basé sur le contexte défini par l'OEM.
    • Priorité de la liste des volumes statiques configurés.
  • Comportement de la diminution du volume:

    • L'utilisation de l'attribut audio pour le ciblage audio actuel est utilisée pour mapper le Diffuser les informations de l'appareil audio telles que définies dans la configuration audio de la voiture .

    • L'attribut audio est utilisé pour mapper le contexte statique correspondant à « duck », en fonction de la matrice statique d'atténuation.

Configurations des zones audio dynamiques

Sous Android 14, pour s'adapter à une zone audio dynamique le schéma de configuration audio pour la voiture permettant de définir des zones audio également mis à jour vers la version 3. Le nouveau schéma nécessite la mise en place 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 Début dans sous Android 14, la zone principale ne peut comporter qu'une (1) configuration. Les zones secondaires peuvent avoir plusieurs configurations. Les éléments suivants : s'appliquent aux configurations audio pour voiture:

  • La zone audio principale ne peut avoir qu'une seule configuration.

  • Les zones audio secondaires 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 varier:

    • La configuration des groupes de volumes ne doit pas nécessairement être identique.
    • L'attribution du contexte audio ne doit pas nécessairement être identique.
  • Les noms des périphériques de sortie audio doivent être uniques dans toutes les zones ou configurations. A le nom d'appareil ne doit apparaître qu'une seule fois dans une configuration audio ou une zone.

  • Les appareils audio appartenant au même groupe de volumes doivent partager le même contenu audio des configurations de gain.

  • Tous les contextes audio (OEM ou statiques) doivent être attribués à chaque contenu audio configuration.

Compatibilité ascendante

Bien que les nouvelles versions de car_audio_configuration.xml introduisent de nouvelles dans chaque mise à jour, vous pouvez toujours utiliser les anciens fichiers dans les nouvelles versions AAOS. Les OEM qui effectuent la mise à jour vers les nouvelles versions d'Android peuvent réutiliser car_audio_configuration.xml.

Pour utiliser une nouvelle fonctionnalité nécessitant de nouvelles informations dans le car_audio_configuration.xml, la version doit être mise à jour. Tentative d'utilisation Une ancienne version d'un fichier dont les informations ne sont pas compatibles génère une erreur IllegalStateException lorsque l'entretien du véhicule est lancé. L'exception contient les informations pertinentes sur les informations utilisées et la version minimale requise.