Mehrzonen-Audiorouting

Der Car-Audio-Dienst nutzt die dynamische Audiorichtlinie von Core Audio, um Anwendungsfälle in Autos zu erleichtern.

  • Separate Audiowiedergabe für jeden Passagier, sogenanntes Multizonen-Audio, bei dem jede Zone die gleichzeitige Tonwiedergabe ermöglicht.

  • Dynamische Audiozonenkonfiguration.

  • Audioaufnahme der Passagier-Primärzone.

  • Audiospiegel des Beifahrers.

In jedem Anwendungsfall verwendet der Car-Audio-Dienst die dynamische Audiorichtlinie, um Audio automatisch an das angegebene Ausgabegerät weiterzuleiten.

Mehrzonen-Audio

Multizonen-Audio ermöglicht mehreren Benutzern die gleichzeitige Interaktion mit AAOS. Einer Zone ist eine Reihe von Ausgabegeräten zugeordnet, und jede Zone behält den Audiofokus und die Lautstärke bei. Passagiere können ihren Ton hören, während der Fahrer einer anderen Quelle in der Hauptzone (typischerweise der Hauptkabine) zuhört.

Mehrzonen-Audioarchitektur

Car-Audio-Service-Architektur

Abbildung 1. Car-Audio-Service-Architektur.

Car-Audio-Zonen sind eine Abstraktion von Audioausgängen, Audiofokus und anderen Audioeinstellungen, die alle unabhängig voneinander verwaltet werden können. Für Routing-Zwecke wird jede Zone als eine Reihe von Audio-Ausgabebusgeräten definiert, wie in der Audio-Richtlinienkonfiguration angeordnet. Die Geräte unterscheiden sich je nach Audiozonendefinition. In Abbildung 1 gehören die Busgeräte 1 bis 5 zur Zone Null, die Busgeräte 6 bis 8 zur Zone eins und die Busgeräte 9 bis 11 zur Zone zwei.

Car-Audio-Konfiguration

Normalerweise werden Ausgabegeräte einer Audiozone zugewiesen. Jede Audiozone ist in car_audio_configuration.xml definiert. Der folgende Codeausschnitt zeigt eine Car-Audio-Konfiguration für Abbildung 1:

<carAudioConfiguration version="3">
    <zones>
        <zone name="Zone0" audioZneId="0" occupantZoneI="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 Autoservicedefinition. Es wird in Autos verwendet, um für einen Benutzer im Auto eine Zuordnung zu einem bestimmten Sitzplatz zu definieren. CarOccupantZoneService definiert auch die Zuordnung von der Insassenzone zu Displays, anderen Peripheriegeräten und dem Benutzer, sobald sich der Benutzer bei einem Display anmeldet. Eine Audiozone verfügt über:

  • Eine Audiozonen-ID und eine Aufenthaltszonen-ID.

    • Ordnet die Audiozone der Insassenzone zu (Sitz, Displays und andere Peripheriegeräte)
    • Ordnen Sie zu, welcher Benutzer-ID beim Anmelden eine Audiozone zugewiesen wird
  • Eine Liste von Audiokonfigurationen. Jede Audiokonfiguration verfügt über eine Reihe von Lautstärkegruppen. Jede Volume-Gruppe verfügt über eine Reihe von Audio-Bus-Geräten.

    • Bei einer Lautstärkeänderung werden alle Audiogeräte einer Gruppe auf die gleiche Weise gesteuert.

    • Jedem Audiogerät wird eine Liste von Audioattributen zugewiesen. Diese Informationen werden verwendet, um die Audio-Richtlinienmischungen mit unterschiedlich zugewiesenen Audioattributen zu erstellen.

Diese Konfiguration ermöglicht die Weiterleitung unterschiedlicher Audioattributverwendungen an verschiedene Ausgabegeräte in jeder Zone. Je nach Anwendungsfall können unterschiedliche Sounds gleichzeitig abgespielt werden. Beispielsweise können Sie die Hauptkabine (Primärzone) so konfigurieren, dass Medientöne über alle Lautsprecher, Navigationstöne jedoch nur über die Lautsprecher wiedergegeben werden, die dem Fahrer am nächsten sind. Bei gleichzeitiger Tonwiedergabe hört die Hauptkabine weiterhin Medien, während die Navigation an den Fahrer übermittelt wird.

Mehrzonen-Audio-Passagier-Login-Workflow

Das folgende Sequenzdiagramm zeigt den Ablauf zum Aktivieren der Audioweiterleitung, wenn sich ein Passagier bei seinem jeweiligen Display anmeldet:

Bild

Figur 2.

In dieser Sequenz wird die Benutzeranmeldung über den Occupant-Zone-Dienst an den Car-Audio-Dienst weitergegeben.

  1. Der Car-Audio-Dienst (für eine bestimmte Audiozone) verwendet die AudioPolicy#removeUserIdDeviceAffinity API, um die Benutzergeräteaffinitäten zu entfernen. Diese API benötigt eine Benutzer-ID. In diesem Fall der Benutzer der vorherigen Zone.

  2. Die AudioPolicy#setUserIdDeviceAffinity -API weist den neuen Benutzer einer Zone zu, die die Benutzer-ID und alle Geräte für eine bestimmte Zonenkonfiguration aufnimmt.

Dynamische Zonenkonfigurationen

In Android 14 werden dynamische Zonenkonfigurationen eingeführt, die es OEMs ermöglichen, verschiedene Gerätesätze für Passagiere zu konfigurieren. Der Anwendungsfall ermöglicht es den Passagieren auf dem Rücksitz, zwischen einem Kopfstützenlautsprecher im Rücksitz und einem Peripheriekopfhörer im Rücksitz zu wechseln.

In diesem Fall sind zwei Konfigurationen erforderlich. Jeweils eine für die Kopfstütze des Rücksitzes und die Kopfhörerperipherie. Audio für einen bestimmten Benutzer wird jeweils nur an eine Konfiguration weitergeleitet.

Dynamischer Zonenkonfigurations-Workflow

Abbildung 3. Workflow für die dynamische Zonenkonfiguration.

Abbildung 3 zeigt die Architektur für den dynamischen Zonenkonfigurationsworkflow. Audiozone 1 enthält zwei Konfigurationen, Config 0 und Config 1 , die jeweils dem Lautsprecher und der Kopfstütze des Ausgabegeräts zugeordnet sind.

Beim Anmelden wird dem Benutzer automatisch die Standardkonfiguration zugewiesen. Wenn der Benutzer Konfigurationen ändern möchte, normalerweise über eine Systembenutzeroberfläche, führt der Car-Audio-Dienst den Wechsel zwischen den beiden Konfigurationen durch. Auf diese Weise wird das Ausgabegerät zwischen dem Z1-Lautsprecher und der Z1-Kopfstütze umgeschaltet.

Der folgende Codeausschnitt zeigt das Setup 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.
  • Fragen Sie die aktuell eingestellte Konfiguration für eine Zone ab.
  • 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 Abfrage-API macht die beiden für den Passagier verfügbar. Der Benutzer kann eine andere Konfiguration auswählen, indem er auf einen Befehl für die gewünschte Konfiguration tippt.

Dynamischer Zonenkonfigurations-Workflow

Abbildung 4. Workflow für die dynamische Zonenkonfiguration.

Audiobesetzung für Passagiere in der Primärzone

Die Audioübertragung von Passagieren in der Primärzone ist eine in Android 14 eingeführte Funktion, die es Passagieren ermöglicht, ihr Medienaudio in der Primärzone zu übertragen. Auf diese Weise kann der Medienton des Passagiers in die Hauptkabine übertragen werden, während der Fahrer die volle Kontrolle behält.

Die folgende Abbildung zeigt eine vereinfachte Version der Architektur für den Audiocast der Passagiermedien in der Primärzone.

Dynamischer Zonenkonfigurations-Workflow

Abbildung 5. Workflow für die dynamische Zonenkonfiguration.

Das Bild zeigt, dass das Medienausgabegerät für den Fahrer mit dem Beifahrer geteilt wird. Dies geschieht nur, während sich der Beifahrer im Modus „Primäre Zone“ befindet. Die dynamische Audiorichtlinie wird auch verwendet, um das Audiorouting für den Treiber zu verwalten, es werden jedoch keine Änderungen an den Geräteaffinitäten für den Treiber vorgenommen. Für den Passagier ändert sich die Liste der Ausgabegeräte wie folgt:

  • Medienausgabegerät für Passagiere wurde aus der Geräteliste entfernt
  • Das Medienausgabegerät für den Treiber wird zur Geräteliste hinzugefügt
  • Die verbleibenden Ausgabegeräte für Passagier-Audiozonen bleiben auf der Geräteliste

Diese neue Geräteliste wird dem Passagier von der AudioPolicy#setUserIdDeviceAffinity -API zugewiesen. Die an die API übergebenen Parameter sind die Liste der Geräte und die Passagier-Benutzer-ID. Wenn der Audio-Richtliniendienst des Audiosystems abfragt, welcher Audiomix für eine dem Passagier zugeordnete Medienspur ausgewählt werden soll, wird der mit der primären Zone verknüpfte Medien-Audiomix ausgewählt.

Eine wichtige Voraussetzung für die Audioübertragung in der Primärzone besteht darin, dass das Medienausgabegerät der Primärzone von anderen Audioattributverwendungen isoliert ist. Andernfalls werden beim Erstellen der Audiomischungen andere Audioattribute zur Mischung hinzugefügt. Wenn die Mix-Auswahl durch das Audiosystem erfolgt, werden alle mit dem Mix verbundenen Sounds für die Wiedergabe in der Hauptkabine ausgewählt.

Audiospiegel für den Fahrgastbereich

Die Audiospiegelfunktion ermöglicht es Passagieren, Audioinhalte zu teilen. Die Spiegelfunktion dupliziert Audiodaten in jeder Audiozone, sodass alle Passagiere dasselbe Audio hören können. In diesem Fall wird der Audiofokus mit den an der Audiospiegelung beteiligten Passagieren geteilt.

Audiospiegel-Routing

Für die Audiospiegelung sind mindestens zwei Passagiere erforderlich. Daher würde eine Audiokonfiguration mit nur zwei Passagier-Audiozonen ein Spiegelausgabegerät erfordern. Mit der obigen Definition können zwei gleichzeitige Spiegelungssitzungen gestartet werden.

Die folgende Abbildung zeigt ein vereinfachtes Diagramm für die Mehrzonen-Audiospiegelung zwischen zwei Passagieren. Audio von beiden Passagieren wird an ein Audiospiegelgerät, bus_1000 , weitergeleitet. Der Audio-HAL dupliziert das Signal in die Quellzonen.

Dynamischer Zonenkonfigurations-Workflow

Abbildung 6. Workflow für die dynamische Zonenkonfiguration.

Diese Weiterleitung ist nur aktiviert, wenn sich die Passagiere im Spiegelungsmodus befinden. Wenn nicht, werden den Passagieren die entsprechenden Geräte für die Audiozone zugewiesen. Wenn die Spiegelung zum ersten Mal für einen Passagier aktiviert wird, ändert die AudioPolicy#setUserIdDeviceAffinity -API das Routing:

  • Medienausgabegerät für Passagiere wurde aus der Geräteliste entfernt.
  • Spiegelausgabegerät zur Geräteliste hinzugefügt.
  • Die verbleibenden Ausgabegeräte für die Passagier-Audiozone bleiben auf der Geräteliste.

Mit der Geräteliste wird die API mit der aktualisierten Geräteliste und der Benutzer-ID des Passagiers aufgerufen. Das folgende Bild zeigt ein Sequenzdiagramm des Audiospiegel-Workflows.

Audiospiegel-Workflow

Abbildung 7. Audiospiegel-Workflow.

In Abbildung 7 werden die APIs des Car-Audio-Managers zur Verwaltung der Audiospiegelung vom Media System Service aufgerufen. Insbesondere die API zum Aktivieren der Audiospiegelung für Benutzer 1 und Benutzer 2, CarAudioManager#enableMirrorForAudioZones .

Der Car-Audio-Dienst konfiguriert die Audioweiterleitung für Benutzerpassagiere wie oben beschrieben. Der Car-Audio-Dienst sendet außerdem ein Signal an den Audio-HAL, um den Ton vom Spiegelgerät zu konfigurieren und in die entsprechenden Zonen zu duplizieren.

Im Bild oben sendet der Car-Audio-Dienst 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 nicht dargestellt ist das über die AudioManager#setParameters -API gesendete Signal, das über den Audiodienst die HAL erreicht.

Beim Deaktivieren des Audiospiegels 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 Audiospiegelungsgeräte zu definieren, enthält die Car-Audio-Konfigurationsdatei einen Abschnitt mit dem Namen mirroringDevices , wie im Snippet unten gezeigt.

In diesem Snippet werden zwei Spiegelungsgeräte definiert, bus_1000 und bus_2000 , sodass vier Passagiere die Audiospiegelung nutzen können.

<carAudioConfiguration version="3">
   <mirroringDevices>
       <mirroringDevice address="bus_1000"/>
       <mirroringDevice address="bus_2000"/>
   </mirroringDevices>
  <zones>
    ....
  </zones>
</carAudioConfiguration>