In Android 10 wurden car_volumes_groups.xml
und IAudioControl.getBusForContext
durch car_audio_configuration.xml
ersetzt. Die Audiorichtliniendateien, 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 unten zeigt einen allgemeinen Überblick über die Architektur des Autoaudiodienstes, in dem der Autoaudiodienst die Autoaudiokonfigurationsdatei liest, um Audio für das Gerät einzurichten.
Abbildung 1: Übersicht über die Architektur von Infotainmentsystemen
Platzieren Sie die Konfigurationsdatei für die Autoaudioanlage unter vendor\etc\
oder system\etc\
auf dem Gerät. vendor\etc\
ist der erste Ort, an dem der Autoaudiodienst nach der Datei sucht. Die Audiodienste des Autos lesen car_audio_configuration.xml
, um die Audiokonfiguration zu ermitteln.
Zonen für die Auto-Audioanlage:
- Jede Audiozone hat eine eindeutige Audiozonen-ID.
- Jede Audiozone kann einer Belegungszone 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 gleich sein.
Zuordnung von Audiokontext zu Audiogeräten Damit kannst du einen Audiomix erstellen, der Audionutzungen einem Ausgabegerät zuordnet.
Alle Audiokontexte sollten in einer Zone dargestellt werden. So kann das Audio-Routing für alle Verwendungen des Audioattributs korrekt eingerichtet werden.
Audiokontexte
Zur Vereinfachung der Konfiguration von AAOS-Audio wurden ähnliche Verwendungen in CarAudioContexts
gruppiert. Diese Audiokontexte werden in CarAudioService
verwendet, um Routing, Lautstärkegruppen, Audiofokus und Ducking zu verwalten. Die statischen Audiokontexte in AAOS sind unten aufgeführt.
In dieser Tabelle wird die Zuordnung zwischen Audiokontexten und Verwendungen beschrieben. Hervorgehobene Zeilen stehen für eine neue Systemnutzung.
CarAudioContext | Zugehörige Attributverwendungen |
---|---|
MUSIK | UNKNOWN GAME |
NAVIGATION | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
CALL_RING | NOTIFICATION_RINGTONE |
ANRUFEN | VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
WECKER | ALARM |
BENACHRICHTIGUNG | NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
NOTFALL | EMERGENCY |
SICHERHEIT | SAFETY |
VEHICLE_STATUS | VEHICLE_STATUS |
MITTEILUNG | 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
, das Routing und ein Großteil von CarAudioService
deaktiviert sind, greift AAOS auf das Standardverhalten der AudioService
zurück.
Primäre Zone
Standardmäßig wird der gesamte Audioinhalt 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 Entertainmentsystem für die Rücksitzbank. In diesem Szenario können Sie eine mögliche car_audio_configuration.xml
-Version 2 so 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 auf. So kann die 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, Systemtöne von anderen Tönen zu trennen. So können Fahrzeuggeräusche mit höherer Priorität behandelt werden. Der Audiodienst für Autos unterscheidet bereits zwischen Fahrzeuggeräuschen in Bezug auf Fokus und Ducking. So hat beispielsweise eine Anfrage für den Fokus auf Notfalltöne eine höhere Priorität als eine andere Fokusanfrage.
Der Einfachheit halber werden im Beispiel für die sekundäre Zone alle Audiokontexte an ein einzelnes Gerät und eine einzelne Gruppenlautstärke weitergeleitet.
Audiokonfiguration für die Belegungszone
In Android 11 hat car_audio_configuration.xml
zwei neue Felder eingeführt: audioZoneId
und occupantZoneId
. Mit audioZoneId
können Sie die Audiozonenverwaltung steuern. Mit occupantZoneId
können Sie das Routing basierend auf der User-ID konfigurieren.
Wenn wir die obige Audiokonfiguration noch einmal betrachten, aber das neue Feld für die Zuordnung der Belegungsbereichs-ID und der Audiozonen-ID 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>
In der obigen Konfiguration wird eine Zuordnung für die primäre Zone zu „Bewohnerzone 0“ und audioZoneId
1 zu occupantZoneId
1 definiert. Im Allgemeinen kann jede Zuordnung zwischen Belegungszone und Audiozone konfiguriert werden. Die Zuordnung muss jedoch eins zu eins erfolgen. Die Regeln, mit denen die beiden neuen Felder definiert wurden, sind unten aufgeführt.
audioZoneId
für die primäre Zone ist immer diePRIMARY_AUDIO_ZONE
-ID. WennisPrimary="true"
definiert ist, istaudioZoneId
nicht erforderlich.Die Zahlen
audioZoneId
undoccupantZoneId
dürfen nicht wiederholt werden.audioZoneId
undoccupantZoneId
können nur eine Eins-zu-Eins-Zuordnung haben.
Konfiguration der Auto-Audioanlage unter Android 14
In Android 14 wurde der OEM-Plug-in-Dienst eingeführt, mit dem Sie das vom Audiodienst des Autos verwaltete Audioverhalten aktiver verwalten können. Neben den neuen Plug-in-Diensten werden der Konfiguration für die Autoaudioanlage die folgenden Änderungen hinzugefügt:
- Vom OEM definierter Kontext für die Auto-Audioanlage
- Dynamische Konfigurationen für nicht primäre Zonen
Vom OEM definierter Kontext für die Auto-Audioanlage
Für eine flexible Audiokonfiguration können in Android 14 die Audionutzungen im Autoaudiodienst anders gruppiert werden als die oben definierten statischen Audiokontexte.
Dieser vom OEM definierte Kontext kann in der Datei car_audio_configuration.xml
Version 3 definiert werden.
Stattdessen werden die derzeit definierten statischen Audiokontexte verwendet. Das allgemeine Format des vom OEM definierten Kontexts für Autoaudio ist unten dargestellt.
Für die OEM-Kontexte ist jeweils ein name
sowie eine Liste der Audioattribute erforderlich, 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>
...
- Der Kontext
media
enthältAUDIO_USAGE_MEDIA
undAUDIO_USAGE_UNKNOWN
- Der
game
-Kontext enthält nurAUDIO_USAGE_GAME
Der Kontext muss oben in der car_audio_configuration.xml
-Datei definiert sein. Wenn die OEM-Kontexte definiert sind, kann die restliche Konfiguration des Autoaudios wie gewohnt fortgesetzt werden. Für den Kontext „Autoradio“ gelten die folgenden Regeln:
OEM-Kontextdefinitionen sind optional. Stattdessen wird der statische Audiokontext verwendet.
Wiederholen Sie keine Kontextnamen.
Weisen Sie die Verwendung des Audioattributs nicht mehreren Kontexten zu.
Alle in
AudioAttributes
definierten Audionutzungen sollten verwendet werden, um den Kontext zu erstellen.
Streng genommen muss die android.audio.policy.configuration.V7_0.AudioUsage
-Stringdarstellung der Audionutzung für die OEM-Audiokontextdefinition verwendet werden. In Zukunft werden neuere Audioattributnutzungen dem am besten geeigneten Kontext zugewiesen, um Fehler bei der Migration von einer Android-Version zu einer anderen zu reduzieren.
Der vom OEM definierte Kontext wurde eingeführt, um den Audiodienst des OEM-Plug-ins weiter 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 Anhand des Audioattributs wird das beste Abgleichsverhalten ermittelt, das in der Interaktionsmatrix für den Audiofokus festgelegt wurde. Weitere Informationen finden Sie unter Audiofokus.
Das Audioattribut „Lautstärkeregelung“ wird verwendet, um die beste Übereinstimmung zu ermitteln:
- Volumegruppe basierend auf dem vom OEM definierten Kontext.
- Priorität aus der konfigurierten Liste der statischen Volumes.
Audio-Ducking-Verhalten:
Die Verwendung des Audioattributs für den aktuellen Audiofokus wird verwendet, um die Ausgabegeräteinformationen für Audiogeräte zuzuordnen, wie in der Audiokonfigurationsdatei für das Auto definiert.
Anhand des Audioattributs wird der entsprechende statische Kontext basierend auf der statischen Audio-Ducking-Matrix dem Ducking zugeordnet.
Konfigurationen für dynamische Audiozonen
Unter Android 14 wird das Konfigurationsschema für die Audiowiedergabe im Auto zur Definition von Audiozonen ebenfalls auf Version 3 aktualisiert, um eine dynamische Konfiguration von Audiozonen zu ermöglichen. 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 Datei 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 die Konfiguration von Auto-Audiosystemen 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 Audiozonenkonfiguration eindeutig sein.
Innerhalb einer Audiozone können sich die Audiokonfigurationen unterscheiden:
- Die Konfiguration der Volumegruppen muss nicht identisch sein.
- Die Audiokontextzuweisung muss nicht identisch sein.
Die Namen der Audioausgabegeräte müssen in allen Zonen oder Konfigurationen eindeutig sein. Ein Gerätename sollte nur einmal in einer Audiokonfiguration oder Zone vorkommen.
Audiogeräte, die zu derselben Lautstärkegruppe gehören, sollten dieselben Audioverstärkungskonfigurationen haben.
Für jede Audiokonfiguration müssen alle Audiokontexte (OEM oder statisch) zugewiesen werden.
Vorwärtskompatibilität
Auch wenn mit jeder Aktualisierung neue Funktionen eingeführt werden, können Sie ältere Dateien in neueren Versionen von AAOS weiterhin verwenden.car_audio_configuration.xml
OEMs, die auf neue Android-Versionen aktualisieren, können die car_audio_configuration.xml
-Datei wiederverwenden.
Wenn Sie eine neue Funktion verwenden 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 Autodienstes eine IllegalStateException
ausgegeben. Die Ausnahmemeldung enthält die relevanten Informationen dazu, welche Informationen verwendet werden und welche Mindestversion erforderlich ist.