Konfiguration der Auto-Audioanlage

In Android 10 wurde car_audio_configuration.xml durch car_volumes_groups.xml und IAudioControl.getBusForContext ersetzt. Die Audio-Richtliniendateien, die sich in der Regel in der Anbieterpartition befinden, stellen die Audiohardwarekonfiguration des Boards dar. Alle in car_audio_configuration.xml referenzierten Geräte müssen in audio_policy_configuration.xml definiert sein.

Abbildung 1 zeigt eine Übersicht über die Architektur des Car Audio-Dienstes, in der der Car Audio-Dienst die Car Audio-Konfigurationsdatei liest, um Audio für das Gerät einzurichten.

Übersicht über die Car-Audio-Architektur

Abbildung 1: Übersicht über die Car Audio-Architektur.

Platziere die Konfigurationsdatei für die Audioanlage des Autos auf dem Gerät in vendor/etc/ oder system/etc/. Der Car Audio Service sucht zuerst in vendor/etc/ nach der Datei. Die Car Audio-Dienste lesen car_audio_configuration.xml, um die Audiokonfiguration zu ermitteln.

Audiozonen im Auto:

  • Jede Audiozone enthält eine eindeutige Audiozonen-ID.
  • Jede Audiozone kann einer Zone für Insassen zugeordnet werden.
  • Die Audioaktionen in den einzelnen Zonen sind unabhängig voneinander:

    • Audiofokus
    • Audio routing
    • Audio-Ducking
  • Lautstärkegruppen für Autos:

    • Alle Audiogeräte, die eine Lautstärkegruppe enthalten, werden gemeinsam mit denselben Verstärkungsänderungen gesteuert. Die Konfiguration der Audioverstärkung für alle Geräte in einer Gruppe sollte identisch sein.

    • Zuordnung von Audiokontext zu Audiogeräten: Damit können Sie einen Audio-Mix erstellen, der Audioverwendungen einem Ausgabegerät zuordnet.

    • Alle Audio-Kontexte sollten in einer Zone dargestellt werden. So kann das Audio-Routing für alle Verwendungen von Audioattributen präzise eingerichtet werden.

Audiokontexte

Um die Konfiguration von AAOS-Audio zu vereinfachen, wurden ähnliche Verwendungszwecke in CarAudioContexts gruppiert. Diese Audiokontexte werden in CarAudioService verwendet, um Routing, Lautstärkegruppen, Audiofokus und Ducking-Verwaltung zu definieren. Die statischen Audiokontexte in AAOS sind in dieser Tabelle aufgeführt.

In dieser Tabelle wird die Zuordnung zwischen Audiokontexten und Verwendungen beschrieben. Die hervorgehobenen Zeilen sind für eine neue Systemnutzung vorgesehen.

CarAudioContext Zugehörige AttributeUsages
MUSIC UNKNOWN
GAME
MEDIA
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
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

AAOS-Routing aktivieren

Wenn Sie AAOS-basiertes Routing verwenden möchten, müssen Sie das Flag audioUseDynamicRouting auf true setzen:

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

Wenn false deaktiviert ist, sind das Routing und ein Großteil von CarAudioService deaktiviert und AAOS greift auf das Standardverhalten von AudioService zurück.

Konfigurierbare Audio-Richtlinien-Engine

Um die Verwaltung von Audioinhalten im Auto in Android 14 weiter zu verbessern, wurde in AAOS die Verwendung der Configurable Audio Policy Engine (CAP) eingeführt. Dadurch erhalten Sie mehr Flexibilität bei der Steuerung des Audio-Routings und der Lautstärkeregelung und können Folgendes vielseitig definieren:

Sie können die Engine für konfigurierbare Audio-Richtlinien (Configurable Audio Policy, CAP) über useCoreAudioVolume und useCoreAudioRouting aktivieren. Weitere Informationen finden Sie unter Engine für konfigurierbare Audio-Richtlinien.

Primäre Zone

Standardmäßig wird der gesamte Ton an die primäre Zone weitergeleitet. Es gibt nur eine primäre Zone, die in der Konfiguration durch das Attribut isPrimary="true" angegeben wird. Der primären Zone wird automatisch die Audiomanager.PRIMARY_AUDIO_ZONE zugewiesen.

Beispielkonfiguration (Version 2)

Ein Fahrzeug kann beispielsweise zwei Zonen haben: eine primäre Zone und ein Infotainmentsystem für den Rücksitz. In diesem Szenario können Sie eine mögliche Version 2 von car_audio_configuration.xml so gestalten:

<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>

In diesem Beispiel werden in der primären Zone einige Audiokontexte auf verschiedene Geräte aufgeteilt. So kann das HAL verschiedene Nachbearbeitungseffekte anwenden und die Ausgabe auf jedem Gerät mithilfe der Fahrzeughardware mischen. Die Geräte wurden in mehrere Lautstärkegruppen unterteilt: Medien, Navigation, Anrufe, Wecker und Systemtöne. Wenn das System für useFixedVolume konfiguriert ist, werden die Lautstärkepegel für jede Gruppe an die HAL übergeben, um auf die Ausgabe dieser Geräte angewendet zu werden.

Für die primäre Zone empfehlen wir, dass Systemtöne von anderen Tönen getrennt sind. So können Fahrzeuggeräusche mit höherer Priorität behandelt werden. Der Car Audio-Dienst unterscheidet bereits zwischen Fahrzeuggeräuschen in Bezug auf Fokus und Dämpfungsverwaltung. Beispielsweise hat eine Anfrage für den Fokus auf Notsignale eine höhere Priorität als eine andere Fokusanfrage.

Im Beispiel für die sekundäre Zone werden alle Audiokontexte an ein einzelnes Gerät und eine einzelne Lautstärkegruppe weitergeleitet.

Definition der Volumengruppe für die CAP-Engine

Wenn Sie die Lautstärkeverwaltung über die CAP-Engine verwenden möchten, wie unter Konfigurierbare Audio-Policy-Engine beschrieben, muss die Lautstärkegruppendefinition auch einen Namen enthalten:


<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>

Dieser Volumegruppe-Name muss mit dem in der CAP-Engine definierten Volumennamen übereinstimmen. Außerdem muss useFixedVolume auf false gesetzt sein. Weitere Informationen finden Sie unter AAOS-Flags für die Audiokonfiguration.

Audiokonfiguration für die Fahrgastzelle

In Android 11 wurden in car_audio_configuration.xml zwei neue Felder eingeführt: audioZoneId und occupantZoneId. Mit audioZoneId können Sie die Verwaltung von Audiozonen steuern. Mit occupantZoneId können Sie das Routing basierend auf der Nutzer-ID konfigurieren.

Wenn wir uns die Audiokonfiguration noch einmal ansehen, aber das neue Feld für die Zuordnung von Insassen- und Audiozonen-IDs verwenden, kann die neue Konfiguration ohne die Definitionen der Lautstärkegruppen so eingerichtet werden:

<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>

Die Konfiguration definiert eine Zuordnung für die primäre Zone zur Belegungszone 0 und audioZoneId 1 zu occupantZoneId 1. Es kann eine beliebige Zuordnung zwischen der Insassen- und der Audiozone konfiguriert werden. Die Zuordnung muss jedoch eindeutig sein. Die Regeln, mit denen die beiden neuen Felder definiert wurden, sind:

  • audioZoneId für die primäre Zone ist immer die PRIMARY_AUDIO_ZONE-ID. Wenn isPrimary="true" definiert ist, ist audioZoneId nicht erforderlich.

  • Die Nummern audioZoneId und occupantZoneId dürfen nicht wiederholt werden.

  • audioZoneId und occupantZoneId können nur eine Eins-zu-eins-Zuordnung haben.

Konfiguration der Auto-Audioanlage unter Android 14

In Android 14 wurde in AAOS der OEM-Plug-in-Dienst eingeführt, mit dem Sie das Audioverhalten verwalten können, das vom Car Audio Service überwacht wird. Zusammen mit den neuen Plug-in-Diensten werden der Konfigurationsdatei für die Audioanlage im Auto die folgenden Änderungen hinzugefügt:

  • Vom OEM definierter Kontext für die Audioanlage des Autos
  • Dynamische Konfigurationen für nicht primäre Zonen

Vom OEM definierter Kontext für die Audioanlage des Autos

Um eine flexible Audiokonfiguration zu ermöglichen, können in Android 14 die Audioverwendungen im Car Audio Service anders gruppiert werden als die statischen Audio-Kontexte. Dieser vom OEM definierte Kontext kann in der Datei car_audio_configuration.xml Version 3 definiert werden.

Stattdessen werden die vordefinierten statischen Audiokontexte verwendet. Das allgemeine Format des vom OEM definierten Kontext für die Audioausgabe im Auto wird später beschrieben.

Für die OEM-Kontexte ist jeweils ein name sowie eine Liste der Audioattributverwendungen erforderlich, die dem Kontext zugewiesen sind. Im Beispiel oben sind zwei Kontexte definiert:

<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>
...
  • Der Kontext media enthält AUDIO_USAGE_MEDIA und AUDIO_USAGE_UNKNOWN.
  • Der Kontext von game enthält nur AUDIO_USAGE_GAME

Der Kontext muss oben in der Datei car_audio_configuration.xml definiert werden. Wenn die OEM-Kontexte definiert sind, kann die restliche Konfiguration der Audioanlage im Auto wie bisher erfolgen. Für den Kontext „Car Audio“ gelten die folgenden Regeln:

  • OEM-Kontextdefinitionen sind optional. Stattdessen wird der statische Audio-Kontext verwendet.

  • Wiederholen Sie keine Kontextnamen.

  • Weisen Sie die Verwendung von Audioattributen nicht mehreren Kontexten zu.

  • Alle in AudioAttributes definierten Audioverwendungen sollten zum Erstellen des Kontexts verwendet werden.

Genau genommen muss die android.audio.policy.configuration.V7_0.AudioUsage-Stringdarstellung der Audioverwendung für die Definition des OEM-Audiokontexts verwendet werden. Künftig werden neuere Audioattributverwendungen dem am besten geeigneten Kontext zugewiesen, um Fehler bei der Migration von einer Android-Version zur anderen zu reduzieren.

Der vom OEM definierte Kontext wurde eingeführt, um den Audio-Dienst des OEM-Plug-ins zu erweitern. Er kann aber auch ohne den OEM-Plug-in-Dienst verwendet werden. Das Audioverhalten ähnelt dem des statischen Audiodienstes:

  • Interaktionen mit dem Audiofokus. Das Audioattribut wird verwendet, um das am besten passende Verhalten gemäß der Interaktionsmatrix für den Audiofokus zu ermitteln. Weitere Informationen finden Sie unter Audio-Fokus.

  • Das Audioattribut „Audio-Lautstärkeregelung“ wird verwendet, um die beste Übereinstimmung zu ermitteln:

    • Volumegruppe basierend auf dem vom OEM definierten Kontext.
    • Priorität aus der konfigurierten statischen Volumeliste.
  • Audio-Ducking-Verhalten:

    • Die Verwendung von Audioattributen für den aktuellen Audiofokus wird verwendet, um die Informationen zum Audioausgabegerät zuzuordnen, die in der Konfigurationsdatei für das Audio im Auto definiert sind.

    • Das Audioattribut wird verwendet, um den entsprechenden statischen Kontext basierend auf der statischen Audio-Ducking-Matrix dem Ducking zuzuordnen.

Produktstrategien für die CAP-Engine

Wenn ein Gerät die CAP-Engine für die Lautstärke- oder Routingverwaltung verwenden muss, muss der vom OEM definierte Kontext mit der Produktstrategiedefinition der CAP-Engine übereinstimmen. Andernfalls können Sie den vom OEM definierten Kontext ohne die CAP-Engine verwenden.

Weitere Informationen finden Sie in der Produktstrategie für die CAP-Engine in AAOS.

Konfigurationen für dynamische Audiozonen

In Android 14 wurde das Schema für die Konfiguration von Audiozonen für die Konfiguration dynamischer Audiozonen auf Version 3 aktualisiert. Für das neue Schema muss für jede Zone eine Konfiguration eingerichtet werden.

<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>

Weitere Informationen finden Sie in der in device/generic/car/emulator/audio/car_audio_configuration.xml definierten Datei der Version 3. Ab Android 14 kann die primäre Zone nur eine (1) Konfiguration haben. Nicht primäre Zonen können mehrere Konfigurationen haben. Für die Konfiguration von Audioanlagen im Auto gelten die folgenden Regeln:

  • Die primäre Audiozone kann nur eine Konfiguration haben.

  • Nicht primäre Audiozonen können mehrere Konfigurationen haben.

  • Der Name muss für jede Audiozone und jede Audiozonenkonfiguration eindeutig sein.

  • Innerhalb einer Audiozone können sich die Audiokonfigurationen unterscheiden:

    • Die Einrichtung von Lautstärkegruppen muss nicht identisch sein.
    • Die Zuweisung des Audiokontexts muss nicht identisch sein.
  • Die Namen von Audioausgabegeräten sollten zonen- oder konfigurationsübergreifend eindeutig sein. Ein Gerätename sollte nur einmal in einer Audiokonfiguration oder in Zonen vorkommen.

  • Audiogeräte, die derselben Lautstärkegruppe angehören, sollten dieselben Audioverstärkungskonfigurationen haben.

  • Für jede Audiokonfiguration müssen alle Audiokontexte (OEM oder statisch) zugewiesen werden.

Vorwärtskompatibilität

In den neuen Versionen von car_audio_configuration.xml werden mit jedem Update neue Funktionen eingeführt. Sie können aber weiterhin ältere Dateien in neueren Versionen von AAOS verwenden. OEMs, die auf neue Android-Versionen aktualisieren, können die car_audio_configuration.xml-Datei wiederverwenden.

Wenn Sie eine neue Funktion nutzen möchten, für die neue Informationen in der car_audio_configuration.xml erforderlich sind, muss die Version aktualisiert werden. Wenn Sie versuchen, eine ältere Version einer Datei mit Informationen zu verwenden, die in dieser Dateiversion nicht unterstützt werden, wird beim Starten des Autoservice eine IllegalStateException ausgelöst. Die Fehlermeldung enthält die relevanten Informationen dazu, welche Informationen verwendet werden und welche Mindestversion erforderlich ist.