Wielostrefowe routing audio

Usługa car audio wykorzystuje politykę dynamicznego dźwięku Core Audio, aby ułatwić korzystanie z niej w samochodach.

  • Oddzielne odtwarzanie dźwięku dla każdego pasażera, tzw. dźwięk wielostrefowy, w którym każda strefa umożliwia jednoczesne odtwarzanie dźwięku.

  • Dynamiczna konfiguracja strefy audio.

  • Obsada dźwięku głównej strefy pasażera.

  • Lusterko audio pasażera.

W każdym przypadku użycia usługa car audio wykorzystuje politykę dynamicznego dźwięku, aby automatycznie kierować dźwięk do wyznaczonego urządzenia wyjściowego.

Dźwięk wielostrefowy

Wielostrefowy dźwięk umożliwia wielu użytkownikom jednoczesną interakcję z AAOS. Ze strefą powiązany jest zestaw urządzeń wyjściowych, a każda strefa utrzymuje ostrość dźwięku i poziom głośności. Pasażerowie mogą słuchać swojego dźwięku, podczas gdy kierowca słucha innego źródła w strefie podstawowej (zazwyczaj w głównej kabinie).

Wielostrefowa architektura audio

Architektura usług car audio

Rysunek 1. Architektura usługi car audio.

Strefy car audio to abstrakcja wyjść audio, fokusu audio i innych ustawień audio, którymi można zarządzać niezależnie. Na potrzeby routingu każda strefa jest definiowana jako zestaw urządzeń magistrali wyjściowej audio, zgodnie z konfiguracją polityki audio. Urządzenia różnią się w zależności od definicji strefy audio. Na rysunku 1 urządzenia magistrali od 1 do 5 należą do strefy zerowej, urządzenia magistrali od 6 do 8 należą do strefy pierwszej, a urządzenia magistrali od 9 do 11 należą do strefy drugiej.

Konfiguracja audio w samochodzie

Zazwyczaj urządzenia wyjściowe są przypisane do jednej strefy audio. Każda strefa audio jest zdefiniowana w car_audio_configuration.xml . Poniższy fragment kodu przedstawia konfigurację car audio dla rysunku 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 to definicja usługi samochodowej zarządzana przez CarOccupantZoneManager . Jest używany w samochodach do definiowania mapowania użytkownika w samochodzie na określoną lokalizację siedzenia. CarOccupantZoneService definiuje również mapowanie strefy pasażerów na wyświetlacze, inne urządzenia peryferyjne i użytkownika po zalogowaniu się na wyświetlaczu. Strefa audio posiada:

  • Identyfikator strefy audio i identyfikator strefy obecności.

    • Mapuje strefę audio na strefę pasażera (fotel, wyświetlacze i inne urządzenia peryferyjne)
    • Mapa, do którego identyfikatora użytkownika przypisana jest strefa audio po zalogowaniu
  • Lista konfiguracji audio. Każda konfiguracja audio ma zestaw grup głośności. Każda grupa woluminów ma zestaw urządzeń magistrali audio.

    • Po zmianie głośności wszystkie urządzenia audio w grupie są sterowane w ten sam sposób.

    • Każde urządzenie audio ma przypisaną listę atrybutów audio. Informacje te są wykorzystywane do konstruowania miksów zasad audio z różnie przypisanymi atrybutami audio.

Ta konfiguracja umożliwia kierowanie różnych zastosowań atrybutów audio do różnych urządzeń wyjściowych w każdej strefie. W zależności od przypadku użycia różne dźwięki mogą być odtwarzane jednocześnie. Na przykład możesz skonfigurować kabinę główną (strefę główną), aby odtwarzała dźwięki multimediów na wszystkich głośnikach, ale dźwięki nawigacji tylko na głośnikach znajdujących się najbliżej kierowcy. Dzięki jednoczesnemu odtwarzaniu dźwięku główna kabina nadal słucha multimediów, a kierowca otrzymuje nawigację.

Wielostrefowy proces logowania pasażerów za pomocą dźwięku

Poniższy diagram sekwencji przedstawia przebieg włączania routingu audio, gdy pasażer loguje się na swoim odpowiednim wyświetlaczu:

obraz

Rysunek 2.

W tej kolejności login użytkownika jest przekazywany do usługi car audio za pośrednictwem usługi strefy pasażera.

  1. Usługa car audio (dla określonej strefy audio) korzysta z interfejsu API AudioPolicy#removeUserIdDeviceAffinity w celu usunięcia powinowactwa urządzenia użytkownika. Ten interfejs API pobiera identyfikator użytkownika. W tym przypadku użytkownik poprzedniej strefy.

  2. Interfejs API AudioPolicy#setUserIdDeviceAffinity przypisuje nowego użytkownika do strefy, która pobiera identyfikator użytkownika i wszystkie urządzenia dla określonej konfiguracji strefy.

Konfiguracje stref dynamicznych

W systemie Android 14 wprowadzono dynamiczne konfiguracje stref, aby umożliwić producentom OEM konfigurowanie różnych zestawów urządzeń dla pasażerów. Przypadek użycia umożliwia pasażerom na tylnych siedzeniach przełączanie między głośnikiem w zagłówku tylnego siedzenia a urządzeniem peryferyjnym w postaci słuchawek na tylnym siedzeniu.

W tym przypadku wymagane są dwie konfiguracje. Po jednym dla zagłówka tylnego siedzenia i urządzenia peryferyjnego słuchawek. Dźwięk dla określonego użytkownika jest kierowany tylko do jednej konfiguracji na raz.

Przepływ pracy przy konfiguracji strefy dynamicznej

Rysunek 3. Proces konfiguracji strefy dynamicznej.

Rysunek 3 ilustruje architekturę przepływu pracy związanej z konfiguracją strefy dynamicznej. Strefa audio 1 zawiera dwie konfiguracje, Config 0 i Config 1 , które są powiązane odpowiednio z głośnikiem urządzenia wyjściowego i zagłówkiem.

Po zalogowaniu użytkownikowi zostaje automatycznie przypisana konfiguracja domyślna. Gdy użytkownik zdecyduje się na zmianę konfiguracji, zwykle za pośrednictwem interfejsu użytkownika systemu, usługa car audio dokonuje przełączania między dwiema konfiguracjami. W ten sposób urządzenie wyjściowe przełączane jest pomiędzy głośnikiem Z1 a zagłówkiem Z1.

Poniższy fragment kodu przedstawia konfigurację tej konfiguracji strefy dynamicznej.

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

Aby ułatwić zarządzanie konfiguracjami audio, menedżer car audio udostępnia interfejsy API do zarządzania konfiguracjami:

  • Zapytaj o konfiguracje dostępne dla strefy.
  • Zapytanie o aktualnie ustawioną konfigurację strefy.
  • Przejdź na inną konfigurację.

Aplikacja lub usługa interfejsu użytkownika systemu może używać tych interfejsów API do zarządzania konfiguracją strefy audio, jak pokazano na rysunku 4. Interfejs API zapytań udostępnia pasażerowi te dwa interfejsy. Użytkownik może wybrać inną konfigurację, dotykając polecenia odpowiadającego żądanej konfiguracji.

Przepływ pracy przy konfiguracji strefy dynamicznej

Rysunek 4. Proces konfiguracji strefy dynamicznej.

Obsada dźwięku pasażerów w strefie podstawowej

Przesyłanie dźwięku dla pasażerów w strefie podstawowej to funkcja wprowadzona w systemie Android 14, która umożliwia pasażerom przesyłanie dźwięku z multimediów w strefie podstawowej. W ten sposób dźwięk multimedialny pasażera może być przesyłany do głównej kabiny, podczas gdy kierowca ma pełną kontrolę.

Poniższy rysunek przedstawia uproszczoną wersję architektury głównej transmisji audio dla pasażerów w strefie głównej.

Przepływ pracy przy konfiguracji strefy dynamicznej

Rysunek 5. Proces konfiguracji strefy dynamicznej.

Obraz pokazuje, że urządzenie wyjściowe multimedialne kierowcy jest współdzielone z pasażerem. Dzieje się tak tylko wtedy, gdy pasażer znajduje się w trybie przesyłania do strefy podstawowej. Polityka dynamicznego dźwięku jest również używana do zarządzania routingiem audio dla sterownika, ale nie są stosowane żadne zmiany w powinowactwach urządzeń sterownika. Dla pasażera lista urządzeń wyjściowych zmienia się w następujący sposób:

  • Urządzenie wyjściowe multimediów dla pasażera zostało usunięte z listy urządzeń
  • Urządzenie wyjściowe multimediów dla sterownika zostało dodane do listy urządzeń
  • Pozostałe urządzenia wyjściowe dla stref audio dla pasażerów pozostają na liście urządzeń

Ta nowa lista urządzeń jest przydzielana pasażerowi przez interfejs API AudioPolicy#setUserIdDeviceAffinity . Parametry przekazywane do API to lista urządzeń oraz identyfikator użytkownika pasażera. Gdy usługa zasad audio systemu audio zapyta, który miks audio ma zostać wybrany dla ścieżki multimedialnej powiązanej z pasażerem, wybierany jest miks audio multimediów powiązany ze strefą podstawową.

Kluczowym wymaganiem w przypadku transmisji dźwięku w strefie podstawowej jest odizolowanie urządzenia wyjściowego multimediów w strefie podstawowej od innych zastosowań atrybutów audio. W przeciwnym razie podczas konstruowania miksów audio do miksu dodawane są inne atrybuty audio. Gdy wybór miksu zostanie dokonany przez system audio, wszystkie dźwięki dołączone do miksu zostaną wybrane do odtwarzania w kabinie głównej.

Lusterko audio w strefie pasażera

Funkcja lustra audio umożliwia pasażerom udostępnianie dźwięku. Funkcja lustra powiela dane audio w każdej strefie audio, dzięki czemu wszyscy pasażerowie mogą słuchać tego samego dźwięku. W tym przypadku dźwięk jest dzielony z pasażerami uczestniczącymi w odtwarzaniu dźwięku.

Kierowanie lustrzane audio

Aby możliwe było odtwarzanie dźwięku, potrzeba co najmniej dwóch pasażerów. W rezultacie konfiguracja audio zawierająca tylko dwie strefy audio dla pasażerów wymagałaby jednego lustrzanego urządzenia wyjściowego. Stosując powyższą definicję, można rozpocząć dwie równoczesne sesje lustrzane.

Poniższy rysunek przedstawia uproszczony schemat wielostrefowego dublowania dźwięku pomiędzy dwoma pasażerami. Dźwięk obu pasażerów jest kierowany do lustrzanego urządzenia audio, bus_1000 . Audio HAL powiela sygnał do stref źródłowych.

Przepływ pracy przy konfiguracji strefy dynamicznej

Rysunek 6. Proces konfiguracji strefy dynamicznej.

To wyznaczanie tras jest możliwe tylko wtedy, gdy pasażerowie znajdują się w trybie lustrzanym. Jeżeli nie, pasażerom przypisane są odpowiednie urządzenia dla strefy audio. Gdy dla pasażera zostanie po raz pierwszy włączone dublowanie, interfejs API AudioPolicy#setUserIdDeviceAffinity modyfikuje routing:

  • Urządzenie wyjściowe multimediów dla pasażera zostało usunięte z listy urządzeń.
  • Lustrzane urządzenie wyjściowe dodane do listy urządzeń.
  • Pozostałe urządzenia wyjściowe dla strefy audio pasażera pozostają na liście urządzeń.

Z listą urządzeń wywoływane jest API ze zaktualizowaną listą urządzeń i identyfikatorem użytkownika pasażera. Poniższy obraz przedstawia diagram sekwencji przepływu pracy lustrzanego dźwięku.

Przepływ pracy z lustrem audio

Rysunek 7. Przebieg pracy z lustrzanym odbiciem audio.

Na rysunku 7 interfejsy API menedżera car audio służące do zarządzania dublowaniem dźwięku są wywoływane z usługi Media System Service. W szczególności interfejs API umożliwiający dublowanie dźwięku dla Użytkownika 1 i Użytkownika 2, CarAudioManager#enableMirrorForAudioZones .

Usługa car audio konfiguruje kierowanie audio dla pasażerów użytkowników w sposób opisany powyżej. Usługa car audio wysyła również sygnał do HAL audio w celu skonfigurowania i zduplikowania dźwięku z urządzenia lustrzanego do odpowiednich stref.

Na powyższym obrazku usługa car audio wysyła mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20

Gdzie,

bus_1000 to autobus źródłowy, a bus_10 i bus_20 to autobusy docelowe.

Na diagramie sekwencji nie pokazano sygnału wysyłanego za pośrednictwem interfejsu API AudioManager#setParameters , który dociera do warstwy HAL za pośrednictwem usługi audio.

Po wyłączeniu lustrzanego przekazu audio wysyłany jest następujący sygnał: mirroring_src=bus_1000;mirroring=off . Sygnał ten może zostać wykorzystany przez warstwę HAL do wyłączenia powielania dźwięku, gdy dublowanie dźwięku nie jest włączone. Aby zdefiniować urządzenia duplikujące dźwięk, plik konfiguracyjny car audio zawiera sekcję o nazwie mirroringDevices , jak pokazano we fragmencie poniżej.

W tym fragmencie zdefiniowano dwa urządzenia dublujące, bus_1000 i bus_2000 , dzięki czemu czterech pasażerów może korzystać z dublowania dźwięku.

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