Audio-Routing in mehreren Zonen

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

Architektur des Auto-Audiodienstes

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:

Bild

Abbildung 2:

In dieser Abfolge wird die Nutzeranmeldung über den Dienst für die Belegungszone an den Autoaudiodienst weitergegeben.

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

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

Workflow für die dynamische Zonenkonfiguration

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.

Workflow für die dynamische Zonenkonfiguration

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.

Workflow für die dynamische Zonenkonfiguration

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.

Workflow für die dynamische Zonenkonfiguration

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.

Workflow für die Audiospiegelung

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>