Der Car Audio-Dienst verwendet die dynamische Audio-Richtlinie von Core Audio, um Anwendungsfälle in Autos zu ermöglichen.
Separate Audiowiedergabe für jeden Fahrgast, auch als Mehrzonen-Audio bezeichnet, bei der in jeder Zone gleichzeitig Sound wiedergegeben werden kann.
Dynamische Konfiguration von Audiozonen
Audio-Cast für die primäre Zone des Beifahrers.
Audio-Spiegelung für den Beifahrer.
In jedem Anwendungsfall verwendet der Car Audio-Dienst die dynamische Audio-Richtlinie, um Audio automatisch an das dafür vorgesehene Ausgabegerät weiterzuleiten.
Multiroom-Audio
Mit Multi-Zone-Audio können mehrere Nutzer gleichzeitig mit AAOS interagieren. Einer Zone ist eine Reihe von Ausgabegeräten zugeordnet. Jede Zone behält den Audiofokus und den Lautstärkepegel bei. Fahrgäste können sich Audioinhalte anhören, während der Fahrer in der primären Zone (in der Regel die Hauptkabine) eine andere Quelle hört.
Audioarchitektur mit mehreren Zonen
Abbildung 1: Architektur des Car Audio-Dienstes.
Audiozonen im Auto sind eine Abstraktion von Audioausgängen, Audiofokus und anderen Audioeinstellungen, die alle unabhängig voneinander verwaltet werden können. Für das Routing wird jede Zone als Gruppe von Audioausgabe-Busgeräten definiert, die in der Audiokonfiguration der Richtlinie angeordnet sind. Die Geräte unterscheiden sich je nach Definition der Audiozone. In Abbildung 1 gehören die Busgeräte 1 bis 5 zur Zone 0, die Busgeräte 6 bis 8 zur Zone 1 und die Busgeräte 9 bis 11 zur Zone 2.
Konfiguration der Auto-Audioanlage
Normalerweise werden Ausgabegeräte einer Audiozone zugewiesen. Jede Audiozone wird in car_audio_configuration.xml
definiert. Das folgende Code-Snippet zeigt eine Konfiguration für die Audioausgabe im 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 von CarOccupantZoneManager
verwaltete Dienstdefinition für Autos. Sie wird in Autos verwendet, um eine Zuordnung für einen Nutzer im Auto zu einem bestimmten Sitzplatz zu definieren. CarOccupantZoneService
definiert auch die Zuordnung von Insassenbereichen zu Displays, anderen Peripheriegeräten und dem Nutzer, sobald sich der Nutzer auf einem Display anmeldet. Eine Audiozone hat folgende Eigenschaften:
Eine Audiozonen-ID und eine Insassenzonen-ID.
- Ordnet die Audiozone der Insassenzone (Sitz, Displays und andere Peripheriegeräte) zu
- Zuordnen, welche Nutzer-ID beim Anmelden einer Audiozone zugewiesen wird
Eine Liste der Audiokonfigurationen. Jede Audiokonfiguration hat eine Reihe von Lautstärkegruppen. Jede Lautstärkegruppe hat eine Reihe von Audiobus-Geräten.
Wenn die Lautstärke geändert wird, werden alle Audiogeräte in einer Gruppe auf dieselbe Weise gesteuert.
Jedem Audiogerät wird eine Liste von Audioattributen zugewiesen. Diese Informationen werden verwendet, um die Audio-Richtlinienkombinationen mit unterschiedlich zugewiesenen Audioattributen zu erstellen.
Mit dieser Konfiguration können verschiedene Audioattribute in jeder Zone an unterschiedliche Ausgabegeräte weitergeleitet werden. Je nach Anwendungsfall können verschiedene Sounds gleichzeitig abgespielt werden. Sie können beispielsweise festlegen, dass in der Hauptkabine (primäre Zone) Medientöne über alle Lautsprecher und Navigationsansagen nur über die Lautsprecher in der Nähe des Fahrers wiedergegeben werden. Bei der gleichzeitigen Wiedergabe von Audioinhalten können die Insassen weiterhin Medien hören, während der Fahrer Navigationsanweisungen erhält.
Workflow für die Anmeldung von Beifahrern bei Audio mit mehreren Zonen
Das folgende Sequenzdiagramm zeigt den Ablauf zum Aktivieren des Audio-Routings, wenn sich ein Fahrgast auf seinem jeweiligen Display anmeldet:
Abbildung 2:
In dieser Sequenz wird die Nutzeranmeldung über den Dienst für die Insassenzone an den Car Audio-Dienst weitergegeben.
Der Car Audio-Dienst (für eine bestimmte Audiozone) verwendet die
AudioPolicy#removeUserIdDeviceAffinity
API, um die Affinitäten des Nutzergeräts zu entfernen. Diese API akzeptiert eine Nutzer-ID. In diesem Fall der Nutzer der vorherigen Zone.Über die
AudioPolicy#setUserIdDeviceAffinity
API wird der neue Nutzer einer Zone zugewiesen, die die Nutzer-ID und alle Geräte für eine bestimmte Zonenkonfiguration enthält.
Konfigurationen für dynamische Zonen
In Android 14 werden dynamische Zonenkonfigurationen eingeführt, mit denen OEMs verschiedene Gerätesätze für Fahrgäste konfigurieren können. In diesem Anwendungsfall können Fahrgäste auf dem Rücksitz zwischen einem Lautsprecher in der Kopfstütze und einem Kopfhörer auf dem Rücksitz wechseln.
In diesem Fall sind zwei Konfigurationen erforderlich. Einer für die Kopfstütze des Rücksitzes und einer für das Kopfhörer-Peripheriegerät. Audio für einen bestimmten Nutzer wird immer 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 dem Ausgabegerät „Lautsprecher“ bzw. „Kopfstütze“ zugeordnet sind.
Bei der Anmeldung wird dem Nutzer automatisch die Standardkonfiguration zugewiesen. Wenn der Nutzer die Konfigurationen ändert, in der Regel über eine System-UI, führt der Car Audio Service 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>
Um die Verwaltung der Audiokonfigurationen zu erleichtern, stellt der Car Audio Manager APIs zur Verwaltung der Konfigurationen bereit:
- Abfragekonfigurationen, die für eine Zone verfügbar sind.
- Die aktuell festgelegte Konfiguration für eine Zone abfragen.
- Wechseln Sie zu einer anderen Konfiguration.
Eine System-UI-App oder ein System-UI-Dienst 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.
Audio-Streaming für Beifahrer in der primären Zone
Die Audioübertragung für Beifahrer in der primären Zone ist eine Funktion, die in Android 14 eingeführt wurde, damit Beifahrer ihre Media-Audioinhalte in der primären Zone übertragen können. So können die Media-Audiosignale des Beifahrers in die Hauptkabine übertragen werden, während der Fahrer die volle Kontrolle behält.
Die Abbildung unten zeigt eine vereinfachte Version der Architektur für den Audio-Cast von Medien für Fahrgäste in der Primärzone.
Abbildung 5: Workflow für die dynamische Zonenkonfiguration.
Das Bild zeigt, dass das Media-Ausgabegerät für den Fahrer mit dem Beifahrer geteilt wird. Dies geschieht nur, wenn sich der Beifahrer im Modus „Auf primäre Zone streamen“ befindet. Die dynamische Audio-Richtlinie wird auch verwendet, um das Audio-Routing für den Fahrer zu verwalten. Es werden jedoch keine Änderungen an den Geräteaffinitäten für den Fahrer vorgenommen. Für den Beifahrer ändert sich die Liste der Ausgabegeräte wie folgt:
- Das Media-Ausgabegerät für den Beifahrer wird aus der Geräteliste entfernt
- Das Media-Ausgabegerät für den Fahrer wird der Geräteliste hinzugefügt.
- Die übrigen Ausgabegeräte für Audiozonen für Beifahrer bleiben in der Geräteliste.
Diese neue Liste von Geräten wird dem Fahrgast von der AudioPolicy#setUserIdDeviceAffinity
API zugewiesen. Die an die API übergebenen Parameter sind die Liste der Geräte und die Nutzer-ID des Fahrgasts. Wenn der Audio-Policy-Dienst des Audiosystems abfragt, welcher Audio-Mix für einen Mediatrack ausgewählt werden soll, der mit dem Beifahrer verknüpft ist, wird der Media-Audio-Mix ausgewählt, der mit der primären Zone verknüpft ist.
Eine wichtige Voraussetzung für die Audioübertragung in der primären Zone ist, dass das Media-Ausgabegerät der primären Zone von anderen Audioattributen isoliert ist. Andernfalls werden beim Erstellen der Audiomixe andere Audioattribute hinzugefügt. Wenn die Auswahl des Mixes vom Audiosystem erfolgt, werden alle mit dem Mix verknüpften Sounds für die Wiedergabe in der Hauptkabine ausgewählt.
Audio-Spiegelung im Fahrgastbereich
Mit der Funktion „Audio spiegeln“ können Fahrgäste Audioinhalte teilen. Mit der Spiegelfunktion werden Audiodaten in jeder Audiozone dupliziert, sodass alle Fahrgäste dieselben Audioinhalte hören können. In diesem Fall wird der Audiofokus mit den Fahrgästen geteilt, die an der Audiospiegelung beteiligt sind.
Audiospiegelung
Für die Audio-Spiegelung sind mindestens zwei Fahrgäste erforderlich. Für eine Audiokonfiguration mit nur zwei Audiozonen für Beifahrer wäre daher ein Spiegelausgabegerät erforderlich. Mit der oben genannten Definition können zwei gleichzeitige Spiegelungssitzungen gestartet werden.
Die Abbildung unten zeigt ein vereinfachtes Diagramm für die Audio-Spiegelung in mehreren Zonen zwischen zwei Fahrgästen. Das Audio von beiden Fahrgästen wird an ein Audio-Mirroring-Gerät, bus_1000
, weitergeleitet. Das Audio-HAL dupliziert das Signal für die Quellenzonen.
Abbildung 6 Workflow für die dynamische Zonenkonfiguration.
Dieses Routing ist nur aktiviert, wenn sich die Fahrgäste im Spiegelungsmodus befinden. Andernfalls werden die entsprechenden Geräte für die Audiozone den Fahrgästen zugewiesen.
Wenn die Spiegelung für einen Fahrgast zum ersten Mal aktiviert wird, ändert die AudioPolicy#setUserIdDeviceAffinity
API das Routing:
- Das Media-Ausgabegerä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 Beifahrer bleiben in der Geräteliste.
Mit der Liste der Geräte wird die API mit der aktualisierten Liste der Geräte und der Nutzer-ID des Fahrgasts 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 Car Audio Manager zum Verwalten der Audio-Spiegelung vom Media System Service aufgerufen. Konkret die API zum Aktivieren der Audio-Spiegelung für Nutzer 1 und Nutzer 2, CarAudioManager#enableMirrorForAudioZones
.
Der Car Audio-Dienst konfiguriert das Audio-Routing für Mitfahrer wie oben beschrieben. Der Car Audio-Dienst sendet außerdem ein Signal an die Audio-HAL, um das Audio vom Spiegelungsgerät für die entsprechenden Zonen zu konfigurieren und zu duplizieren.
Im Bild oben sendet der Car Audio-Dienst mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20
.
wobei
bus_1000
ist der Quellbus und bus_10
und bus_20
sind die Zielbusse.
Im Sequenzdiagramm ist das Signal, das über die AudioManager#setParameters
API gesendet wird und das HAL über den Audiodienst erreicht, nicht dargestellt.
Wenn die Audiospiegelung deaktiviert wird, wird das folgende Signal gesendet: mirroring_src=bus_1000;mirroring=off
. Dieses Signal kann vom HAL verwendet werden, um die Audioduplizierung zu deaktivieren, wenn die Audiospiegelung nicht aktiviert ist. Um Geräte für die Audiospiegelung zu definieren, enthält die Konfigurationsdatei für die Audioanlage des Autos einen Abschnitt mit dem Namen mirroringDevices
, wie im folgenden Snippet gezeigt.
In diesem Snippet werden zwei Spiegelungsgeräte definiert, bus_1000
und bus_2000
, sodass vier Fahrgäste die Audio-Spiegelung verwenden können.
<carAudioConfiguration version="3">
<mirroringDevices>
<mirroringDevice address="bus_1000"/>
<mirroringDevice address="bus_2000"/>
</mirroringDevices>
<zones>
....
</zones>
</carAudioConfiguration>