Der Autoaudiodienst verwendet die dynamische Audiorichtlinie von Core Audio, um die Nutzung in Autos zu erleichtern.
Separate Audiowiedergabe für jeden Passagier, auch als Multizonen-Audio bezeichnet, bei der in jeder Zone gleichzeitig Audio wiedergegeben werden kann.
Dynamische Audiozonenkonfiguration.
Audiostream für die primäre Zone der Fahrgäste.
Audio-Spiegelung des Beifahrers.
In jedem Anwendungsfall verwendet der Autoaudiodienst die dynamische Audiorichtlinie, um Audio automatisch an das angegebene Ausgabegerät weiterzuleiten.
Multizonen-Audio
Mit Multizonen-Audio können mehrere Nutzer gleichzeitig mit AAOS interagieren. Einer Zone sind mehrere Ausgabegeräte zugeordnet. Jede Zone hat einen eigenen Audiofokus und eine eigene Lautstärke. Fahrgäste können sich Audioinhalte anhören, während der Fahrer in der primären Zone (in der Regel in der Hauptkabine) eine andere Quelle nutzt.
Mehrzonen-Audioarchitektur
Abbildung 1: Architektur des Autoaudiodienstes
Audiozonen für das Auto sind eine Abstraktion von Audioausgaben, Audiofokus und anderen Audioeinstellungen, die alle unabhängig voneinander verwaltet werden können. Für das Routing wird jede Zone als Gruppe von Audio-Ausgabebusgeräten definiert, die in der Audiorichtlinienkonfiguration angeordnet sind. Die Geräte unterscheiden sich je nach Definition der Audiozone. In Abbildung 1 gehören die Busgeräte 1 bis 5 zu Zone 0, die Busgeräte 6 bis 8 zu Zone 1 und die Busgeräte 9 bis 11 zu Zone 2.
Konfiguration der Auto-Audioanlage
In der Regel werden Ausgabegeräte einer Audiozone zugewiesen. Jede Audiozone wird in car_audio_configuration.xml
definiert. Das folgende Code-Snippet zeigt eine Audiokonfiguration für ein Auto für Abbildung 1:
<carAudioConfiguration version="3">
<zones>
<zone name="Zone0" audioZneId="0" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGoups>
<group>
<device address="bus_1">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_2">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_6">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_7">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
...
...
</zones>
</carAudioConfiguration>
occupantZoneId
ist eine Definition für einen Autoservice, die von CarOccupantZoneManager
verwaltet wird. In Autos wird damit eine Zuordnung eines Nutzers im Auto zu einem bestimmten Sitzplatz definiert. CarOccupantZoneService
definiert auch die Zuordnung von Belegungszonen zu Displays, anderen Peripheriegeräten und dem Nutzer, sobald er sich auf einem Display anmeldet. Eine Audiozone hat:
Eine Audiozonen-ID und eine Belegungszonen-ID.
- Ordnet die Audiozone der Zone der Insassen zu (Sitz, Displays und andere Peripheriegeräte)
- Zuordnen, welcher Nutzer-ID bei der Anmeldung eine Audiozone zugewiesen ist
Eine Liste der Audiokonfigurationen. Jede Audiokonfiguration hat eine Reihe von Lautstärkegruppen. Jede Volumegruppe hat eine Reihe von Audiobus-Geräten.
Wenn die Lautstärke geändert wird, werden alle Audiogeräte in einer Gruppe auf die gleiche Weise gesteuert.
Jedem Audiogerät wird eine Liste von Audioattributen zugewiesen. Anhand dieser Informationen werden die Audiorichtlinien-Mixe mit unterschiedlich zugewiesenen Audioattributen erstellt.
Mit dieser Konfiguration können unterschiedliche Audioattributnutzungen in jeder Zone an unterschiedliche Ausgabegeräte weitergeleitet werden. Je nach Anwendungsfall können verschiedene Töne gleichzeitig abgespielt werden. Sie können beispielsweise die Hauptkabine (primäre Zone) so konfigurieren, dass Medientöne auf allen Lautsprechern, Navigationstöne aber nur auf den Lautsprechern in der Nähe des Fahrers abgespielt werden. Bei der gleichzeitigen Wiedergabe von Audioinhalten können die Insassen der Hauptkabine weiterhin Medien hören, während die Navigation für den Fahrer wiedergegeben wird.
Workflow für die Anmeldung von Fahrgästen mit Audio in mehreren Zonen
Das folgende Sequenzdiagramm zeigt den Ablauf zum Aktivieren der Audioweiterleitung, wenn sich ein Fahrgast auf dem jeweiligen Display anmeldet:
Abbildung 2:
In dieser Abfolge wird die Nutzeranmeldung über den Dienst für die Belegungszone an den Autoaudiodienst weitergegeben.
Der Audiodienst für das Auto (für eine bestimmte Audiozone) verwendet die
AudioPolicy#removeUserIdDeviceAffinity
API, um die Geräteaffinitäten der Nutzer zu entfernen. Für diese API ist eine Nutzer-ID erforderlich. In diesem Fall der Nutzer der vorherigen Zone.Die
AudioPolicy#setUserIdDeviceAffinity
API weist dem neuen Nutzer eine Zone zu, die die Nutzer-ID und alle Geräte für eine bestimmte Zonenkonfiguration enthält.
Dynamische Zonenkonfigurationen
In Android 14 werden dynamische Zonenkonfigurationen eingeführt, damit OEMs unterschiedliche Geräte für Fahrgäste konfigurieren können. Bei diesem Anwendungsfall können die Passagiere auf dem Rücksitz zwischen einem Lautsprecher in der Kopfstütze und einem Kopfhörer wechseln.
In diesem Fall sind zwei Konfigurationen erforderlich. Jeweils eine für die Kopfstütze des Rücksitzes und das Kopfhörer-Peripheriegerät. Audio für einen bestimmten Nutzer wird nur an eine Konfiguration weitergeleitet.
Abbildung 3: Workflow für die dynamische Zonenkonfiguration
Abbildung 3 zeigt die Architektur für den Workflow zur Konfiguration dynamischer Zonen. Audiozone 1 enthält zwei Konfigurationen, Config 0
und Config 1
, die jeweils dem Lautsprecher und der Kopfstütze des Ausgabegeräts zugeordnet sind.
Bei der Anmeldung wird dem Nutzer automatisch die Standardkonfiguration zugewiesen. Wenn der Nutzer die Konfiguration ändern möchte, geschieht dies in der Regel über eine System-UI. Der Autoaudiodienst führt dann den Wechsel zwischen den beiden Konfigurationen aus. So wird das Ausgabegerät zwischen dem Z1-Lautsprecher und der Z1-Kopfstütze umgeschaltet.
Das folgende Code-Snippet zeigt die Einrichtung für diese dynamische Zonenkonfiguration.
<carAudioConfiguration version="3">
<zones>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="Zone 1 Config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_100">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
<zoneConfig name="Zone 1 Config 1">
<volumeGroups>
<group>
<device address="bus_101">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
</zones>
Zur Verwaltung der Audiokonfigurationen stellt der Autoaudiomanager APIs bereit:
- Abfragekonfigurationen, die für eine Zone verfügbar sind.
- Derzeit festgelegte Konfiguration für eine Zone abfragen
- Wechseln Sie zu einer anderen Konfiguration.
Eine System-UI-App oder ein Systemdienst kann diese API verwenden, um die Konfiguration für die Audiozone zu verwalten, wie in Abbildung 4 dargestellt. Die Query API stellt die beiden dem Fahrgast zur Verfügung. Der Nutzer kann eine andere Konfiguration auswählen, indem er auf einen Befehl für die gewünschte Konfiguration tippt.
Abbildung 4: Workflow für die dynamische Zonenkonfiguration
Audiostream für Fahrgäste in der primären Zone
Die Audioübertragung für Fahrgäste in der primären Zone ist eine Funktion, die in Android 14 eingeführt wurde, damit Fahrgäste ihre Medienaudioinhalte in der primären Zone streamen können. So kann das Audio des Medieninhalts des Beifahrers in den Hauptraum gestreamt werden, während der Fahrer die volle Kontrolle behält.
Die folgende Abbildung zeigt eine vereinfachte Version der Architektur für die Audioübertragung von Passagiermedien in der primären Zone.
Abbildung 5: Workflow für die dynamische Zonenkonfiguration
Das Bild zeigt, dass das Medienausgabegerät für den Fahrer mit dem Beifahrer geteilt wird. Das ist nur der Fall, wenn der Beifahrer sich im Modus „Auf primäre Zone streamen“ befindet. Die dynamische Audiorichtlinie wird auch zum Verwalten der Audioweiterleitung für den Fahrer verwendet. Die Geräteaffinitäten für den Fahrer werden jedoch nicht geändert. Für den Fahrgast ändert sich die Liste der Ausgabegeräte folgendermaßen:
- Das Medienausgabegerät für den Beifahrer wird aus der Geräteliste entfernt
- Das Medienausgabegerät für den Treiber wird der Geräteliste hinzugefügt.
- Übrige Ausgabegeräte für Audiozonen für Fahrgäste bleiben in der Geräteliste
Diese neue Geräteliste wird dem Fahrgast von der AudioPolicy#setUserIdDeviceAffinity
API zugewiesen. An die API werden die Liste der Geräte und die Nutzer-ID des Fahrgastes übergeben. Wenn der Audiorichtliniendienst des Audiosystems anfragt, welcher Audiomix für einen mit dem Fahrgast verknüpften Medientrack ausgewählt werden soll, wird der mit der primären Zone verknüpfte Medien-Audiomix ausgewählt.
Eine wichtige Anforderung für die Audioübertragung in der primären Zone ist, dass das Medienausgabegerät der primären Zone von anderen Verwendungen des Audioattributs getrennt ist. Andernfalls werden beim Erstellen der Audiomixe weitere Audioattribute hinzugefügt. Wenn die Mix-Auswahl vom Audiosystem ausgeführt wird, werden alle mit dem Mix verknüpften Töne für die Wiedergabe in der Hauptkabine ausgewählt.
Audiospiegelung für den Beifahrerbereich
Mit der Audio-Mirroring-Funktion können Passagiere Audioinhalte teilen. Bei der Spiegelfunktion werden Audiodaten in jeder Audiozone dupliziert, damit alle Passagiere dieselben Audioinhalte hören können. In diesem Fall wird der Audiofokus mit den Passagieren geteilt, die am Audio-Mirroring teilnehmen.
Audio-Spiegelung
Für die Audioübertragung sind mindestens zwei Fahrgäste erforderlich. Daher ist für eine Audiokonfiguration mit nur zwei Audiozonen für Passagiere ein Spiegelausgabegerät erforderlich. Mit der obigen Definition können zwei gleichzeitige Spiegelungssitzungen gestartet werden.
Die folgende Abbildung zeigt ein vereinfachtes Diagramm für die Audio-Multizonen-Spiegelung zwischen zwei Passagieren. Das Audio von beiden Passagieren wird an ein Audio-Spiegelgerät, bus_1000
, weitergeleitet. Die Audio HAL dupliziert das Signal an die Quellzonen.
Abbildung 6 Workflow für die dynamische Zonenkonfiguration
Diese Weiterleitung ist nur aktiviert, wenn sich die Fahrgäste im Spiegelmodus befinden. Andernfalls werden den Fahrgästen die entsprechenden Geräte für die Audiozone zugewiesen.
Wenn das Spiegeln für einen Fahrgast zum ersten Mal aktiviert wird, ändert die AudioPolicy#setUserIdDeviceAffinity
API die Route:
- Das Medienausgabegerät für den Beifahrer wird aus der Geräteliste entfernt.
- Das Gerät für die Spiegelung der Ausgabe wurde der Geräteliste hinzugefügt.
- Die übrigen Ausgabegeräte für die Audiozone für Fahrgäste bleiben in der Geräteliste.
Mit der Geräteliste wird die API mit der aktualisierten Geräteliste und der Nutzer-ID des Fahrgastes aufgerufen. Das folgende Bild zeigt ein Sequenzdiagramm des Audio-Mirroring-Workflows.
Abbildung 7. Workflow für die Audiospiegelung
In Abbildung 7 werden die APIs des Audiomanagers für die Audiospiegelung vom Mediasystemdienst aufgerufen. Insbesondere die API, mit der das Audio-Mirroring für Nutzer 1 und Nutzer 2 aktiviert wird, CarAudioManager#enableMirrorForAudioZones
.
Der Autoaudiodienst konfiguriert die Audioweiterleitung für Mitfahrer wie oben beschrieben. Der Autoaudiodienst sendet auch ein Signal an die Audio-HAL, um den Audiostream vom gespiegelten Gerät zu den entsprechenden Zonen zu konfigurieren und zu duplizieren.
Im Bild oben sendet der Autoaudiodienst mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20
wo
bus_1000
ist der Quellbus und bus_10
und bus_20
sind die Zielbusse.
Im Sequenzdiagramm ist das Signal nicht zu sehen, das über die AudioManager#setParameters
API gesendet wird und die HAL über den Audiodienst erreicht.
Wenn die Audiospiegelung deaktiviert wird, wird das folgende Signal gesendet: mirroring_src=bus_1000;mirroring=off
. Dieses Signal kann von der HAL verwendet werden, um die Audioduplizierung zu deaktivieren, wenn die Audiospiegelung nicht aktiviert ist. Zum Definieren von Geräten für die Audiospiegelung enthält die Konfigurationsdatei für die Autoaudiowiedergabe einen Abschnitt namens mirroringDevices
, wie im folgenden Snippet gezeigt.
In diesem Snippet werden zwei Spiegelgeräte, bus_1000
und bus_2000
, definiert, damit vier Passagiere Audio-Spiegelung nutzen können.
<carAudioConfiguration version="3">
<mirroringDevices>
<mirroringDevice address="bus_1000"/>
<mirroringDevice address="bus_2000"/>
</mirroringDevices>
<zones>
....
</zones>
</carAudioConfiguration>