Routing audio wielostrefowego

Usługa audio w samochodzie korzysta z dynamicznych zasad audio Core Audio, aby ułatwić korzystanie z niej w samochodach.

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

  • konfiguracja dynamicznej strefy audio,

  • Transmisja audio w głównej strefie pasażera.

  • Kopia lustrzana dźwięku pasażera.

W każdym przypadku użycia usługa audio w samochodzie korzysta z dynamicznych zasad audio, aby automatycznie kierować dźwięk do wyznaczonego urządzenia wyjściowego.

Dźwięk wielostrefowy

Dźwięk w wielu strefach umożliwia jednoczesne korzystanie z AAOS przez kilku użytkowników. Z każdą strefą jest powiązany zestaw urządzeń wyjściowych, a każda strefa utrzymuje fokus audio i poziom głośności. Pasażerowie mogą słuchać dźwięku, a kierowca – innego źródła w strefie głównej (zazwyczaj w głównej kabinie).

Architektura dźwięku wielostrefowego

Architektura usługi audio w samochodzie

Rysunek 1. Architektura usługi audio w samochodzie.

Strefy audio w samochodzie to abstrakcja wyjść audio, ostrości dźwięku 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ą zasad 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 0, urządzenia magistrali od 6 do 8 należą do strefy 1, a urządzenia magistrali od 9 do 11 należą do strefy 2.

Konfiguracja samochodowego systemu audio

Zwykle urządzenia wyjściowe są przypisywane do jednej strefy audio. Każda strefa audio jest zdefiniowana w car_audio_configuration.xml. Poniższy fragment kodu pokazuje konfigurację dźwięku w samochodzie na potrzeby rysunku 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 to definicja usługi samochodowej zarządzana przez CarOccupantZoneManager. Jest używany w samochodach do określania mapowania użytkownika w samochodzie na konkretne miejsce. CarOccupantZoneService określa też mapowanie strefy użytkownika na wyświetlacze, inne urządzenia peryferyjne i użytkownika po zalogowaniu się na wyświetlaczu. Strefa audio ma:

  • Identyfikator strefy audio i identyfikator strefy użytkownika.

    • Mapowanie strefy audio na strefę użytkownika (siedzenie, wyświetlacze i inne urządzenia peryferyjne)
    • Mapowanie identyfikatora użytkownika przypisanego do strefy audio po zalogowaniu się
  • Lista konfiguracji dźwięku. Każda konfiguracja dźwięku ma zestaw grup głośności. Każda grupa głośności ma zestaw urządzeń magistrali audio.

    • Gdy zmienisz głośność, wszystkie urządzenia audio w grupie będą sterowane w ten sam sposób.

    • Każdemu urządzeniu audio przypisana jest lista atrybutów audio. Te informacje są wykorzystywane do tworzenia miksów zasad audio z różnie przypisanymi atrybutami audio.

Taka 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. Możesz na przykład skonfigurować główną kabinę (strefę podstawową) tak, aby dźwięki multimediów były odtwarzane na wszystkich głośnikach, a dźwięki nawigacji tylko na głośnikach najbliżej kierowcy. Dzięki jednoczesnemu odtwarzaniu dźwięku pasażerowie w głównej części kabiny mogą nadal słuchać multimediów, a kierowca otrzymuje wskazówki nawigacyjne.

Proces logowania pasażera w przypadku dźwięku wielostrefowego

Diagram sekwencji poniżej przedstawia proces włączania routingu dźwięku, gdy pasażer loguje się na swoim wyświetlaczu:

obraz

Rysunek 2.

W tej sekwencji logowanie użytkownika jest propagowane do usługi audio w samochodzie za pomocą usługi strefy pasażera.

  1. Usługa audio w samochodzie (dla określonej strefy audio) używa interfejsu AudioPolicy#removeUserIdDeviceAffinityAPI do usuwania powiązań z urządzeniem użytkownika. Ten interfejs API przyjmuje identyfikator użytkownika. W tym przypadku jest to użytkownik z poprzedniej strefy.

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

Konfiguracje stref dynamicznych

W Androidzie 14 wprowadzono dynamiczne konfiguracje stref, które umożliwiają producentom OEM konfigurowanie różnych zestawów urządzeń dla pasażerów. Ten przypadek użycia umożliwia pasażerom na tylnym siedzeniu przełączanie się między głośnikiem w zagłówku tylnego siedzenia a słuchawkami na tylnym siedzeniu.

W takim przypadku wymagane są 2 konfiguracje. Po 1 na zagłówek tylnego siedzenia i słuchawki. Dźwięk dla konkretnego użytkownika jest kierowany tylko do jednej konfiguracji naraz.

Proces konfiguracji strefy dynamicznej

Rysunek 3. Proces konfiguracji strefy dynamicznej.

Ilustracja 3 przedstawia architekturę przepływu pracy konfiguracji strefy dynamicznej. Strefa audio 1 ma 2 konfiguracje: Config 0Config 1, które są powiązane odpowiednio z głośnikiem urządzenia wyjściowego i zagłówkiem.

Po zalogowaniu użytkownikowi automatycznie przypisywana jest konfiguracja domyślna. Gdy użytkownik zdecyduje się zmienić konfigurację, zwykle za pomocą interfejsu systemu, usługa audio w samochodzie przełącza się między tymi dwoma konfiguracjami. W ten sposób urządzenie wyjściowe jest przełączane między głośnikiem Z1 a zagłówkiem Z1.

Fragment kodu poniżej pokazuje konfigurację tej 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 dźwięku, menedżer dźwięku w samochodzie udostępnia interfejsy API do zarządzania konfiguracjami:

  • Konfiguracje zapytań dostępne w strefie.
  • Sprawdź bieżącą konfigurację strefy.
  • Przełącz się na inną konfigurację.

Aplikacja lub usługa interfejsu 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 te 2 wartości pasażerowi. Użytkownik może wybrać inną konfigurację, klikając polecenie dla wybranej konfiguracji.

Proces konfiguracji strefy dynamicznej

Rysunek 4. Proces konfiguracji strefy dynamicznej.

Przesyłanie dźwięku dla pasażera w strefie głównej

Główne strefowe przesyłanie dźwięku dla pasażerów to funkcja wprowadzona w Androidzie 14, która umożliwia pasażerom przesyłanie dźwięku z multimediów w głównej strefie. W ten sposób dźwięk z multimediów pasażera może być przesyłany do głównej kabiny, a kierowca zachowuje pełną kontrolę.

Poniższy rysunek przedstawia uproszczoną wersję architektury transmisji dźwięku z multimediów dla pasażerów w strefie głównej.

Proces konfiguracji strefy dynamicznej

Rysunek 5. Proces konfiguracji strefy dynamicznej.

Obraz pokazuje, że urządzenie wyjściowe multimediów kierowcy jest udostępniane pasażerowi. Dzieje się tak tylko wtedy, gdy pasażer jest w trybie przesyłania do strefy głównej. Zasady dynamicznego dźwięku służą też do zarządzania routingiem dźwięku w przypadku kierowcy, ale nie są stosowane żadne zmiany w powiązaniach urządzenia z kierowcą. W przypadku pasażera lista urządzeń wyjściowych zmieni się w ten 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 kierowcy zostało dodane do listy urządzeń.
  • Pozostałe urządzenia wyjściowe w strefach audio pasażera pozostają na liście urządzeń

Ta nowa lista urządzeń jest przypisywana do pasażera przez interfejs API.AudioPolicy#setUserIdDeviceAffinity Parametry przekazywane do interfejsu API to lista urządzeń i identyfikator użytkownika pasażera. Gdy usługa zasad audio systemu audio zapyta, która mieszanka audio ma zostać wybrana dla ścieżki multimedialnej powiązanej z pasażerem, zostanie wybrana mieszanka audio powiązana ze strefą główną.

Kluczowym wymaganiem dotyczącym przesyłania dźwięku do głównej strefy jest to, aby urządzenie wyjściowe multimediów w głównej strefie było odizolowane od innych zastosowań atrybutów dźwięku. W przeciwnym razie podczas tworzenia miksów audio do miksu dodawane są inne atrybuty audio. Gdy wybór miksu jest dokonywany przez system audio, wszystkie dźwięki dołączone do miksu są wybierane do odtwarzania w głównej kabinie.

Kopia lustrzana dźwięku w strefie pasażera

Funkcja dublowania dźwięku umożliwia pasażerom udostępnianie dźwięku. Funkcja dublowania powiela dane audio w każdej strefie dźwięku, dzięki czemu wszyscy pasażerowie mogą słuchać tego samego dźwięku. W tym przypadku dźwięk jest udostępniany pasażerom, którzy korzystają z funkcji dublowania dźwięku.

Kierowanie dźwięku w trybie kopii lustrzanej

Aby włączyć dublowanie dźwięku, musisz dodać co najmniej 2 pasażerów. W rezultacie konfiguracja audio z tylko 2 strefami audio dla pasażerów wymagałaby 1 urządzenia wyjściowego z funkcją dublowania. Zgodnie z powyższą definicją można rozpocząć 2 jednoczesne sesje dublowania.

Na poniższym uproszczonym schemacie przedstawiono dublowanie dźwięku w wielu strefach między 2 pasażerami. Dźwięk od obu pasażerów jest kierowany do urządzenia bus_1000. Warstwa HAL audio duplikuje sygnał do stref źródłowych.

Proces konfiguracji strefy dynamicznej

Rysunek 6. Proces konfiguracji strefy dynamicznej.

To przekierowywanie jest włączone tylko wtedy, gdy pasażerowie są w trybie dublowania. W przeciwnym razie pasażerom zostaną przypisane odpowiednie urządzenia w strefie audio. Gdy funkcja dublowania zostanie po raz pierwszy włączona dla pasażera, interfejs APIAudioPolicy#setUserIdDeviceAffinity zmodyfikuje routing:

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

W przypadku listy urządzeń wywoływany jest interfejs API z aktualną listą urządzeń i identyfikatorem użytkownika pasażera. Obraz poniżej przedstawia diagram sekwencji przepływu pracy dublowania dźwięku.

Przepływ pracy związany z kopią lustrzaną dźwięku

Rysunek 7. Proces tworzenia kopii lustrzanej dźwięku.

Na rysunku 7 interfejsy API menedżera dźwięku w samochodzie do zarządzania dublowaniem dźwięku są wywoływane z usługi systemu multimedialnego. W szczególności interfejs API do włączania dublowania dźwięku dla użytkownika 1 i użytkownika 2, CarAudioManager#enableMirrorForAudioZones.

Usługa audio w samochodzie konfiguruje routing audio dla pasażerów zgodnie z opisem powyżej. Usługa audio w samochodzie wysyła też sygnał do warstwy HAL audio, aby skonfigurować i zduplikować dźwięk z urządzenia Mirror do odpowiednich stref.

Na powyższym obrazie usługa audio w samochodzie wysyła mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20

gdzie

bus_1000 to magistrala źródłowa, a bus_10bus_20 to magistrale docelowe.

Na diagramie sekwencji nie widać sygnału wysyłanego przez interfejs AudioManager#setParametersAPI, który dociera do HAL przez usługę audio.

Po wyłączeniu dublowania dźwięku wysyłany jest ten sygnał:mirroring_src=bus_1000;mirroring=off. Ten sygnał może być używany przez HAL do wyłączania duplikowania dźwięku, gdy nie jest włączone dublowanie dźwięku. Aby zdefiniować urządzenia do dublowania dźwięku, plik konfiguracji audio w samochodzie zawiera sekcję o nazwie mirroringDevices, jak pokazano we fragmencie poniżej.

W tym fragmencie zdefiniowano 2 urządzenia do dublowania, bus_1000bus_2000, dzięki czemu 4 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>