Car-Audio-Konfiguration

In Android 10 ersetzte car_audio_configuration.xml car_volumes_groups.xml und IAudioControl.getBusForContext . Die Audio-Richtliniendateien, die normalerweise in der Herstellerpartition enthalten sind, stellen die Audio-Hardwarekonfiguration des Boards dar. Alle in car_audio_configuration.xml referenzierten Geräte müssen in audio_policy_configuration.xml definiert werden.

Abbildung 1 unten zeigt einen allgemeinen Überblick ü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.

Überblick über die Car-Audio-Architektur

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

Platzieren Sie die Car-Audio-Konfigurationsdatei unter vendor\etc\ oder system\etc\ auf dem Gerät, wobei vendor\etc\ der erste Ort ist, an dem der Car-Audio-Dienst nach der Datei sucht. Die Car-Audio-Dienste lesen car_audio_configuration.xml , um die Audiokonfiguration zu ermitteln.

Car-Audio-Zonen:

  • Jede Audiozone enthält eine eindeutige Audiozonen-ID.
  • Jede Audiozone kann einer Aufenthaltszone zugeordnet werden.
  • Die Audioaktionen in jeder Zone sind unabhängig voneinander:

    • Audio-Fokus
    • Audio-Routing
    • Audio-Ducking
  • Fahrzeugvolumengruppen:

    • Alle Audiogeräte, die eine Lautstärkegruppe enthalten, werden gemeinsam mit den gleichen Verstärkungsänderungen gesteuert. Die Audioverstärkungskonfiguration für alle Geräte in einer Gruppe sollte gleich sein.

    • Zuordnung von Audiokontext zu Audiogeräten. Verwenden Sie dies, um einen Audiomix zu erstellen, der Audioverwendungen einem Ausgabegerät zuordnet.

    • Alle Audiokontexte sollten innerhalb einer Zone dargestellt werden. Dadurch kann das Audio-Routing für alle Verwendungen von Audioattributen genau eingerichtet werden.

Audiokontexte

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

In dieser Tabelle wird die Zuordnung zwischen Audiokontexten und -verwendungen beschrieben. Hervorgehobene Zeilen werden für eine neue Systemnutzung bereitgestellt.

CarAudioContext Zugehörige Attributverwendungen
MUSIK UNKNOWN
GAME
MEDIA
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
SPRACHBEFEHL ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING NOTIFICATION_RINGTONE
ANRUF VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
BENACHRICHTIGUNG NOTIFICATION
NOTIFICATION_*
SYSTEM_SOUND ASSISTANCE_SONIFICATION
NOTFALL EMERGENCY
SICHERHEIT SAFETY
FAHRZEUG_STATUS VEHICLE_STATUS
BEKANNTMACHUNG ANNOUNCEMENT

Aktivieren Sie AAOS-Routing

Um AAOS-basiertes Routing zu verwenden, müssen Sie das Flag audioUseDynamicRouting auf true setzen:

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

Bei false werden Routing und ein Großteil von CarAudioService deaktiviert und AAOS greift auf das Standardverhalten von AudioService zurück.

Primärzone

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

Beispielkonfiguration (Version 2)

Beispielsweise kann ein Fahrzeug zwei Zonen haben, eine Hauptzone und ein Unterhaltungssystem für den Rücksitz. In diesem Szenario können Sie eine mögliche car_audio_configuration.xml Version 2 wie folgt entwerfen:

<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 trennt die primäre Zone einige Audiokontexte auf verschiedene Geräte. Dadurch kann der HAL verschiedene Nachbearbeitungseffekte anwenden und die Ausgabe auf jedem Gerät unter Verwendung der Fahrzeughardware mischen. Die Geräte wurden in mehrere Lautstärkegruppen eingeteilt: Medien, Navigation, Anrufe, Alarme und Systemtöne. Wenn das System für die useFixedVolume konfiguriert ist, werden die Lautstärkepegel für jede Gruppe an die HAL übergeben, um sie auf den Ausgang dieser Geräte anzuwenden.

Für die primäre Zone empfehlen wir, die Systemtöne von anderen Tönen zu trennen. Dadurch können Fahrzeuggeräusche mit höherer Priorität behandelt werden. Der Car-Audio-Dienst macht diese Unterscheidungen für Fahrzeuggeräusche hinsichtlich der Fokussierung und des Ducking-Managements bereits. Beispielsweise hat eine Fokusanforderung für Notfallgeräusche eine höhere Priorität als eine andere Fokusanforderung.

Der Einfachheit halber werden im Beispiel der sekundären Zone alle Audiokontexte an ein einzelnes Gerät und eine Volume-Gruppe weitergeleitet.

Audiokonfiguration für den Aufenthaltsbereich

In Android 11 wurden car_audio_configuration.xml zwei neue Felder eingeführt: audioZoneId und occupantZoneId . Sie können audioZoneId verwenden, um die Audiozonenverwaltung zu steuern. Sie können occupantZoneId verwenden, um das Routing basierend auf der Benutzer-ID zu konfigurieren.

Unter erneuter Betrachtung der obigen Audiokonfiguration, aber unter Verwendung des neuen Felds für die Zuordnung der Aufenthaltszonen-ID und der Audiozonen-ID kann die neue Konfiguration ohne die Lautstärkegruppendefinitionen wie folgt 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 obige Konfiguration definiert eine Zuordnung für die primäre Zone zur Aufenthaltszone 0 und audioZoneId 1 zu occupantZoneId 1. Im Allgemeinen kann jede Zuordnung zwischen Aufenthaltszone und Audiozone konfiguriert werden. Die Zuordnung muss jedoch eineindeutig sein. Die Regeln, die die beiden neuen Felder definiert haben, sind unten aufgeführt.

  • audioZoneId für die primäre Zone ist immer PRIMARY_AUDIO_ZONE ID. Wenn isPrimary="true" definiert ist, wird audioZoneId nicht benötigt.

  • audioZoneId und occupantZoneId Nummern können nicht wiederholt werden.

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

Car-Audio-Konfiguration für Android 14

In Android 14 führte AAOS den OEM-Plugin-Dienst ein, der es Ihnen ermöglicht, das vom Car-Audio-Dienst überwachte Audioverhalten aktiver zu verwalten. Zusammen mit den neuen Plugin-Diensten werden die folgenden Änderungen zur Car-Audio-Konfigurationsdatei hinzugefügt:

  • OEM-definierter Car-Audio-Kontext
  • Dynamische Konfigurationen für nicht primäre Zonen

OEM-definierter Car-Audio-Kontext

Um eine flexible Audiokonfiguration zu ermöglichen, ermöglicht der Car-Audio-Dienst in Android 14 eine andere Gruppierung der Audionutzungen als die oben definierten statischen Audiokontexte . Dieser OEM-definierte Kontext kann in der Datei car_audio_configuration.xml Version 3 definiert werden.

Stattdessen werden die aktuell definierten statischen Audiokontexte verwendet. Das allgemeine Format des OEM-definierten Car-Audio-Kontexts ist unten dargestellt.

Die OEM-Kontexte erfordern jeweils einen name zusammen mit einer Liste der Verwendung von Audioattributen, die dem Kontext zugewiesen sind. Im obigen Beispiel 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>
...
  • media enthält AUDIO_USAGE_MEDIA und AUDIO_USAGE_UNKNOWN
  • game enthält nur AUDIO_USAGE_GAME

Der Kontext muss oben in der Datei car_audio_configuration.xml definiert werden. Sobald die OEM-Kontexte definiert sind, kann die restliche Car-Audio-Konfiguration wie bisher erfolgen. Für den Car-Audio-Kontext gelten folgende Regeln:

  • OEM-Kontextdefinitionen sind optional. Stattdessen wird der statische Audiokontext 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 Zeichenfolgendarstellung android.audio.policy.configuration.V7_0.AudioUsage der Audionutzung für die OEM-Audiokontextdefinition verwendet werden. Zukünftig werden neuere Verwendungen von Audioattributen dem am besten geeigneten Kontext zugewiesen, um Fehler bei der Migration von einer Android-Version auf eine andere zu reduzieren.

Obwohl der OEM-definierte Kontext eingeführt wurde, um den OEM-Plugin-Audiodienst weiter zu erweitern, kann er weiterhin ohne den OEM-Plugin-Dienst verwendet werden. Das Audioverhalten ähnelt dem des statischen Audiodienstes:

  • Audio-Fokus-Interaktionen. Das Audioattribut wird verwendet, um das beste Übereinstimmungsverhalten zu bestimmen, das durch die Audiofokus-Interaktionsmatrix festgelegt wird. Einzelheiten finden Sie unter Audiofokus .

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

    • Volume-Gruppe basierend auf dem OEM-definierten Kontext.
    • Priorität aus der konfigurierten statischen Volume-Liste.
  • Audio-Ducking-Verhalten:

    • Die Verwendung von Audioattributen für den aktuellen Audiofokus wird verwendet, um die in der Car-Audio-Konfigurationsdatei definierten Informationen zum Ausgabe-Audiogerät zuzuordnen.

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

Dynamische Audiozonenkonfigurationen

Um eine dynamische Audiozonenkonfiguration zu ermöglichen, wird in Android 14 auch das Car-Audio-Konfigurationsschema zum Definieren von Audiozonen auf Version 3 aktualisiert. Das neue Schema erfordert die Einrichtung einer Konfiguration für jede 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>

Weitere Informationen finden Sie in der Datei der Version 3, die in device/generic/car/emulator/audio/car_audio_configuration.xml definiert ist. Ab Android 14 kann die primäre Zone nur eine (1) Konfiguration haben. Nicht-primäre Zonen können mehrere Konfigurationen haben. Für Car-Audio-Konfigurationen gelten folgende 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 Audiozonenkonfiguration eindeutig sein.

  • Innerhalb einer Audiozone können die Audiokonfigurationen unterschiedlich sein:

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

  • Audiogeräte, die zur gleichen Lautstärkegruppe gehören, sollten über die gleichen Audioverstärkungskonfigurationen verfügen.

  • Alle Audiokontexte (OEM oder statisch) müssen jeder Audiokonfiguration zugewiesen werden.

Vorwärtskompatibilität

Obwohl die neuen Versionen von car_audio_configuration.xml mit jedem Update neue Funktionen einführen, können Sie ältere Dateien weiterhin in neueren Versionen von AAOS verwenden. OEMs, die auf neue Android-Versionen aktualisieren, können die Datei car_audio_configuration.xml wiederverwenden.

Um eine neue Funktion zu verwenden, die neue Informationen in car_audio_configuration.xml erfordert, muss die Version aktualisiert werden. Der Versuch, eine ältere Version einer Datei mit Informationen zu verwenden, die in dieser Dateiversion nicht unterstützt werden, löst beim Starten des Autodienstes eine IllegalStateException aus. Die Ausnahmemeldung enthält die relevanten Informationen darüber, welche Informationen verwendet werden und welche Mindestversion erforderlich ist.