Wielostrefowe kierowanie dźwięku

Usługa audio w samochodzie korzysta z dynamicznej zasady dotyczącej dźwięku w Core Audio, aby ułatwić korzystanie z aplikacji 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 dźwięku.

  • Przekaz dźwięku w strefie podstawowej dla pasażera.

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

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

Dźwięk wielostrefowy

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

Architektura wielostrefowego dźwięku

Architektura usługi dotyczącej samochodowego systemu audio

Rysunek 1. Architektura usługi audio w samochodzie

Strefy dźwięku w samochodzie to abstrakcja wyjść audio, fokusu dźwięku i innych ustawień dźwięku, którymi można zarządzać niezależnie. Na potrzeby routingu każda strefa jest definiowana jako zestaw urządzeń z wyjściami audio, które są uporządkowane w ramach konfiguracji zasad dotyczących dźwięku. Urządzenia różnią się w zależności od definicji strefy dźwiękowej. Na rysunku 1 urządzenia 1–5 należą do strefy 0, urządzenia 6–8 do strefy 1, a urządzenia 9–11 do strefy 2.

Konfiguracja dźwięku w samochodzie

Urządzenia wyjściowe są zwykle przypisane do jednej strefy audio. Każda strefa audio jest zdefiniowana w pliku 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 naprawy samochodu zarządzana przez CarOccupantZoneManager. Jest on używany w samochodach do mapowania użytkownika w samochodzie do konkretnego miejsca na siedzenie. CarOccupantZoneService definiuje też mapowanie z strefy pasażera na wyświetlacze, inne urządzenia peryferyjne i użytkownika, gdy zaloguje się na wyświetlaczu. Strefa audio ma:

  • Identyfikator strefy audio i identyfikator strefy dla pasażerów.

    • Mapowanie strefy dźwiękowej na strefę pasażera (siedzenie, wyświetlacze i inne urządzenia peryferyjne)
    • Mapowanie identyfikatora użytkownika przypisanego do strefy audio po zalogowaniu
  • Lista konfiguracji dźwięku Każda konfiguracja dźwięku ma zestaw grup głośności. Każda grupa objętoś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.

    • Do każdego urządzenia audio przypisana jest lista atrybutów audio. Te informacje są wykorzystywane do tworzenia miksów zasad dotyczących dźwięku z różnymi przypisanymi atrybutami dźwięku.

Ta konfiguracja umożliwia kierowanie różnych zastosowań atrybutu audio do różnych urządzeń wyjściowych w każdej strefie. W zależności od zastosowania różne dźwięki mogą być odtwarzane jednocześnie. Możesz na przykład skonfigurować główną kabinę (strefę główną), aby odtwarzać dźwięki multimediów we wszystkich głośnikach, a dźwięki nawigacji tylko w głośnikach najbliżej kierowcy. W przypadku jednoczesnego odtwarzania dźwięku w kabinie głównej nadal można słuchać multimediów, podczas gdy nawigacja jest dostarczana do kierowcy.

Proces logowania pasażera w systemie audio wielostrefowym

Diagram sekwencji poniżej przedstawia przepływ danych podczas włączania przekierowywania dźwięku, gdy pasażer loguje się na wyświetlaczu:

obraz

Rysunek 2.

W tej sekwencji dane logowania użytkownika są propagowane do usługi audio w samochodzie za pomocą usługi strefy dla pasażerów.

  1. Usługa audio w samochodzie (dla określonej strefy audio) używa interfejsu API AudioPolicy#removeUserIdDeviceAffinity, aby usunąć preferencje dotyczące urządzenia użytkownika. Ten interfejs API przyjmuje identyfikator użytkownika. W tym przypadku jest to użytkownik z poprzedniej strefy.

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

Konfiguracje dynamicznych stref

W Androidzie 14 wprowadzono dynamiczne konfiguracje stref, aby umożliwić OEM-om konfigurowanie różnych zestawów urządzeń dla pasażerów. W tym przypadku pasażerowie na tylnym siedzeniu mogą przełączać się między głośnikiem w zagłówku a słuchawkami.

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

Proces konfiguracji stref dynamicznych

Rysunek 3. Konfiguracja strefy dynamicznej.

Rysunek 3 przedstawia architekturę procesu konfiguracji strefy dynamicznej. Strefa dźwięku 1 zawiera 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łączy się między tymi dwoma konfiguracjami. W ten sposób urządzenie wyjściowe przełącza się między głośnikiem Z1 a zagłówkiem Z1.

Fragment kodu poniżej pokazuje konfigurację tej dynamicznej strefy.

<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 danej strefie.
  • Zapytanie o obecnie ustawioną konfigurację strefy.
  • Przełącz się na inną konfigurację.

Aplikacja lub usługa systemu interfejsu użytkownika może używać tych interfejsów API do zarządzania konfiguracją strefy audio, jak pokazano na rysunku 4. Interfejs Query API udostępnia te dane pasażerowi. Użytkownik może wybrać inną konfigurację, klikając polecenie odpowiedniej konfiguracji.

Proces konfiguracji stref dynamicznych

Rysunek 4. Konfiguracja strefy dynamicznej.

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

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

Rysunek poniżej przedstawia uproszczoną wersję architektury dla głównego strumienia audio z mediami dla pasażera.

Proces konfiguracji stref dynamicznych

Rysunek 5. Konfiguracja strefy dynamicznej.

Obraz pokazuje, że urządzenie wyjściowe multimediów kierowcy jest udostępnione pasażerowi. Dzieje się tak tylko wtedy, gdy pasażer jest w trybie przesyłania do strefy głównej. Dynamiczna zasada dotycząca dźwięku służy też do zarządzania kierowaniem dźwięku przez sterownik, ale nie wprowadza żadnych zmian w przypisaniu urządzeń do sterownika. W przypadku pasażera lista urządzeń wyjściowych zmienia się w następujący sposób:

  • Urządzenie do wyświetlania 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 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 polityki 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 z główną strefą.

Głównym wymaganiem dotyczącym przesyłania dźwięku w strefie głównej jest to, aby urządzenie do przesyłania multimediów w strefie głównej było odizolowane od innych zastosowań atrybutu audio. W przeciwnym razie podczas tworzenia miksów dźwiękowych dodawane są inne atrybuty dźwiękowe. Gdy wybór miksu jest wykonywany przez system audio, wszystkie dźwięki przypisane do miksu są wybierane do odtwarzania w kabinie głównej.

Lustro akustyczne w strefie dla pasażerów

Funkcja dublowania dźwięku umożliwia pasażerom udostępnianie dźwięku. Funkcja lustrzana 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 udostępniany pasażerom biorącym udział w odbijaniu dźwięku.

Kierowanie kopii lustrzanej dźwięku

Aby włączyć dublowanie dźwięku, musi być co najmniej 2 pasażerów. W efekcie konfiguracja audio z tylko 2 strefach dźwiękowych dla pasażerów wymagałaby 1 urządzenia z wyjściami obrazu i dźwięku. Zgodnie z powyższą definicją można uruchomić 2 jednoczesne sesje dublowania.

Rysunek poniżej przedstawia uproszczony schemat odbicia lustrzanego dźwięku w wielu strefach między dwoma pasażerami. Dźwięk od obu pasażerów jest kierowany do urządzenia z odbiciem dźwięku, bus_1000. HAL dźwięku powiela sygnał do stref źródłowych.

Proces konfiguracji stref dynamicznych

Rysunek 6. Konfiguracja strefy dynamicznej.

Ta funkcja jest włączona tylko, gdy pasażerowie są w trybie dublowania. Jeśli nie, odpowiednie urządzenia w strefie dźwięku są przypisywane do pasażerów. Gdy lustranie zostanie po raz pierwszy włączone dla pasażera, interfejs API AudioPolicy#setUserIdDeviceAffinity zmodyfikuje trasę:

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

W przypadku listy urządzeń interfejs API jest wywoływany z aktualną listą urządzeń i identyfikatorem użytkownika pasażera. Na poniższym obrazku znajdziesz diagram sekwencji procesu lustrzanego przesyłania dźwięku.

Przepływ pracy dotyczący kopii lustrzanej dźwięku

Rysunek 7. Procedura kopiowania lustrzanego dźwięku.

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

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

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

gdzie

bus_1000 to autobus źródłowy, a bus_10bus_20 to autobusy docelowe.

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

Po wyłączeniu lustrzanego odbicia 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 powielania dźwięku, gdy klonowanie dźwięku jest wyłączone. Aby zdefiniować urządzenia z odbiciem lustrzanym dźwięku, plik konfiguracji dźwięku w samochodzie zawiera sekcję mirroringDevices, jak pokazano w fragmentze kodu poniżej.

W tym fragmencie zdefiniowano 2 urządzenia do dublowania, bus_1000bus_2000, aby 4 pasażerów mogło korzystać z dublowania dźwięku.

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