Konfiguracja dźwięku w samochodzie

W Androidzie 10 car_audio_configuration.xml zastąpiło car_volumes_groups.xmlIAudioControl.getBusForContext. Pliki zasad audio, zwykle znajdujące się w partycji dostawcy, reprezentują konfigurację sprzętu audio na płycie. Wszystkie urządzenia, do których odwołuje się element car_audio_configuration.xml, muszą być zdefiniowane w elemencie audio_policy_configuration.xml.

Ilustracja 1 przedstawia ogólny zarys architektury usługi audio w samochodzie, w której usługa audio w samochodzie odczytuje plik konfiguracji audio w samochodzie, aby skonfigurować dźwięk na urządzeniu.

Omówienie architektury audio w samochodzie

Rysunek 1. Omówienie architektury audio w samochodzie.

Umieść plik konfiguracyjny systemu audio w samochodzie w folderze vendor/etc/ lub system/etc/ na urządzeniu. Usługa audio w samochodzie najpierw wyszuka plik w folderze vendor/etc/. Usługi audio w samochodzie odczytują car_audio_configuration.xml, aby określić konfigurację dźwięku.

Strefy dźwięku w samochodzie:

  • Każda strefa audio zawiera unikalny identyfikator strefy audio.
  • Każda strefa audio może być zmapowana na strefę zajmowaną.
  • Działania związane z dźwiękiem w każdej strefie są od siebie niezależne:

    • Aktywność audio
    • Kierowanie dźwięku
    • Wyciszanie tła
  • Grupy głośności w samochodzie:

    • Wszystkie urządzenia audio, które zawierają grupę głośności, są sterowane razem z tymi samymi zmianami wzmocnienia. Konfiguracja wzmocnienia dźwięku na wszystkich urządzeniach w grupie powinna być taka sama.

    • Mapowanie kontekstu audio na urządzenia audio. Użyj tej metody, aby utworzyć miks audio, który przypisuje zastosowania dźwięku do urządzenia wyjściowego.

    • Wszystkie konteksty audio powinny być reprezentowane w strefie. Dzięki temu można dokładnie skonfigurować routing audio dla wszystkich zastosowań atrybutu audio.

Konteksty audio

Aby uprościć konfigurację dźwięku w AAOS, podobne zastosowania zostały zgrupowane w CarAudioContexts. Te konteksty audio są używane w całej usłudze CarAudioService do definiowania routingu, grup głośności, ostrości dźwięku i zarządzania wyciszaniem. Statyczne konteksty audio w AAOS są wymienione w tej tabeli.

W tej tabeli opisujemy mapowanie kontekstów audio i sposobów użycia. Wyróżnione wiersze są przeznaczone do nowego zastosowania systemowego.

CarAudioContext Powiązane atrybuty
MUSIC UNKNOWN
GAME
MEDIA
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING NOTIFICATION_RINGTONE
CALL VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
NOTIFICATION NOTIFICATION
NOTIFICATION_*
SYSTEM_SOUND ASSISTANCE_SONIFICATION
EMERGENCY EMERGENCY
SAFETY SAFETY
VEHICLE_STATUS VEHICLE_STATUS
ANNOUNCEMENT ANNOUNCEMENT

Włączanie routingu AAOS

Aby korzystać z routingu opartego na AAOS, musisz ustawić flagę audioUseDynamicRouting na true:

<resources>
    <bool name="audioUseDynamicRou>ting<">;<true/bool
>/resources

Gdy false, routing i większość CarAudioService są wyłączone, AAOS wraca do domyślnego działania AudioService.

Konfigurowalny mechanizm zasad dotyczących dźwięku

Aby jeszcze bardziej rozszerzyć zarządzanie dźwiękiem w samochodzie w Androidzie 14, AAOS wprowadził zarządzanie dźwiękiem za pomocą konfigurowalnego mechanizmu zasad audio (CAP). Dzięki temu zyskasz większą elastyczność w zakresie sterowania routingiem i głośnością dźwięku oraz wszechstronne możliwości definiowania:

Silnik konfigurowalnych zasad audio (CAP) możesz włączyć za pomocą useCoreAudioVolumeuseCoreAudioRouting. Więcej informacji znajdziesz w artykule Silnik konfigurowalnych zasad audio.

Główna strefa

Domyślnie cały dźwięk jest kierowany do strefy głównej. Istnieje tylko jedna strefa podstawowa, która jest oznaczona w konfiguracji atrybutem isPrimary="true". Strefa podstawowa jest automatycznie oznaczana symbolemAudiomanager.PRIMARY_AUDIO_ZONE.

Przykładowa konfiguracja (wersja 2)

Na przykład pojazd może mieć 2 strefy: strefę główną i system rozrywki na tylnych siedzeniach. W takim przypadku możesz zaprojektować możliwą wersję 2:car_audio_configuration.xml

<audioZoneConfiguration version=">;2.0&quo<t;
       zone name="primary zone&qu>ot; isPrimar<y="true>"
         <  vol>umeGroups
          <     group
                   d>evice address="bus0<_media_out"
       >                context <context="music"/
    >                   c<ontext >context="announ<cement"/
                   /d>evice
                  < device address="bus3_c>all_ring_out"
 <       >               conte<xt context="call_ring"/
    >               /device
 <                  device addres>s="bus6_notific<ation_o>ut"
       <      >          contex<t con>text="notificat<ion"/
                   /devic>e
               /group
<               group
        >           device ad<dress=&>quot;bus1_navigation<_out"
                       conte>xt context="navigat<ion"/
                   /d>evice
              <     de>vice address=&qu<ot;bus>2_voice_command_<out&q>uot;
               <        context context=">voice_command"/
   <                /device>
               /gro<up
    >           group<
     >              de<vice >address="bus4_c<all_out"
                 >      context context=&q<uot;call"/
        >           /device
 <       >       /group
  <      >       group
   <     >           device ad<dress="bus5_alarm_out"
     >                  contex<t context="alarm"/
  >                 /device<
               /group
     >          group
        <           device address>="bus7_system_sound<_out"
                      > context context=&qu<ot;syst>em_sound"/
<      >            <     context >context=<">;emergenc<y"/
                       context co>ntext="<safety">/
              <     >    context context=<"vehicle_status"/
     >              /device
  <             /group
    >       /volumeGroups
   <    /zone
        zone name=&>quot;rear seat zone"<; audioZoneId="1"
    >       volumeGroups
    <           group
           >        device address=&<quot;bus100_rear_seat&q>uot;
                   <    context context=&quo>t;music"/
         <              context context=&>quot;navigation"/
 <                      context c>ontext="voice_comma<nd"/
                  >     context context=&qu<ot;call_ring"/
     >                  contex<t context="call"/
     >                  contex<t context="alarm"/
  >                    < contex>t context="<notifi>cation"</
           >     <      > <context context="s>ystem_sound"/
                       context context="emergency"/
                       context context="safety"/
                       context context="vehicle_status"/
                       context context="announcement"/
                   /device
               /group
           /volumeGroups
    /zones
/audioZoneConfiguration

W tym przykładzie strefa główna rozdziela niektóre konteksty audio na różne urządzenia. Dzięki temu HAL może stosować różne efekty przetwarzania końcowego i mieszać dane wyjściowe na każdym urządzeniu za pomocą sprzętu pojazdu. Urządzenia zostały podzielone na kilka grup głośności: multimedia, nawigacja, połączenia, alarmy i dźwięki systemowe. Jeśli system jest skonfigurowany na useFixedVolume, poziomy głośności dla każdej grupy są przekazywane do HAL, aby zastosować je do wyjścia tych urządzeń.

W przypadku strefy głównej zalecamy oddzielenie dźwięków systemowych od innych dźwięków. Dzięki temu dźwięki pojazdów są traktowane priorytetowo. Usługa audio w samochodzie już rozróżnia dźwięki pojazdu pod względem zarządzania ostrością i wyciszaniem. Na przykład żądanie dotyczące skupienia na dźwięku alarmowym ma wyższy priorytet niż inne żądanie dotyczące skupienia.

W przykładzie strefy dodatkowej wszystkie konteksty audio są kierowane do jednego urządzenia i jednej grupy głośności.

Definicja grupy woluminów dla silnika CAP

Aby używać zarządzania głośnością za pomocą silnika CAP, jak wspomniano w sekcji Silnik konfigurowalnych zasad audio, definicja grupy głośności musi też zawierać nazwę:


<group name="media">
  <device address="bus0_media_out">
    <context context="music"/>
    <context context="announcement"/>
  </device>
  <device address="bus3_call_ring_out">
     <context context="call_ring"/>
  </device>
  <device address="bus6_notification_out">
    <context context="notification"/>
  </device>
</group>
<group name="navigation">
  <device address="bus1_navigation_out">
    <context context="navigation"/>
  </device>
  <device address="bus2_voice_command_out">
    <context context="voice_command"/>
  </device>
</group>

Nazwa tej grupy woluminów musi być zgodna z nazwą woluminu zdefiniowaną w silniku CAP. Dodatkowo parametr useFixedVolume musi być ustawiony na false. Szczegółowe informacje znajdziesz w sekcji Flagi konfiguracji dźwięku AAOS.

Konfiguracja dźwięku w strefie pasażera

W Androidzie 11 car_audio_configuration.xml wprowadził 2 nowe pola: audioZoneIdoccupantZoneId. Możesz używać audioZoneId do zarządzania strefami audio. Możesz użyć occupantZoneId, aby skonfigurować routing na podstawie identyfikatora użytkownika.

Wracając do konfiguracji audio, ale korzystając z nowego pola mapowania identyfikatora strefy użytkownika i identyfikatora strefy audio, nową konfigurację bez definicji grupy głośności można skonfigurować w ten sposób:

<audioZoneConfiguration version=">;2.0&quo<t;
       zone name="primary zone" isPrimary=">;true" occupantZ<oneId>="0<"
         ...
       /zone
       zone name="rear >seat zone" audio<ZoneI>d=&qu<ot;1&q>u<ot; occupantZoneId=&quo>t;1"
         ...
       /zone
    /zones
/audioZoneConfiguration

Konfiguracja definiuje mapowanie strefy głównej na strefę zajmowaną 0 i audioZoneId 1 na occupantZoneId 1. Można skonfigurować dowolne mapowanie między strefą pasażera a strefą audio. Mapowanie musi być jednak typu „jeden do jednego”. Reguły, które zdefiniowały 2 nowe pola, to:

  • audioZoneId dla strefy podstawowej jest zawsze PRIMARY_AUDIO_ZONE ID. Jeśli zdefiniowano właściwość isPrimary="true", właściwość audioZoneId nie jest potrzebna.

  • Numery audioZoneIdoccupantZoneId nie mogą się powtarzać.

  • audioZoneIdoccupantZoneId mogą mieć tylko mapowanie 1:1.

Konfiguracja dźwięku w samochodzie z Androidem 14

W Androidzie 14 AAOS wprowadziliśmy usługę wtyczek OEM, która umożliwia zarządzanie zachowaniem dźwięku nadzorowanym przez usługę audio w samochodzie. Oprócz nowych usług wtyczek do pliku konfiguracyjnego dźwięku w samochodzie dodano te zmiany:

  • Kontekst audio w samochodzie zdefiniowany przez OEM
  • Konfiguracje dynamiczne strefy innej niż główna

Kontekst audio w samochodzie zdefiniowany przez OEM

Aby włączyć elastyczną konfigurację dźwięku, w Androidzie 14 usługa audio w samochodzie umożliwia grupowanie zastosowań audio w inny sposób niż w przypadku zdefiniowanych statycznych kontekstów audio. Ten kontekst zdefiniowany przez producenta OEM można określić w pliku car_audio_configuration.xmlwersji 3.

Zamiast tego używane są predefiniowane statyczne konteksty audio. Ogólny format kontekstu audio w samochodzie zdefiniowanego przez producenta OEM jest przedstawiony poniżej.

Każdy kontekst OEM wymaga znaku name oraz listy atrybutów audio używanych w tym kontekście. W przykładzie powyżej zdefiniowano 2 konteksty:

<carAudioConfiguration version=&qu>ot;3&<quot;
    o>emContext<s
        oemContext na>me="medi<a"
       >     audioAttribu<tes
                usage value=&>quot;<AUDIO_USAGE_MEDIA" /
    usag>e value="<;AUDIO_USAGE_UNK>NOWN"<;/
        >    /audi<oAttributes
        /o>emContext
   <     oemContext> name="game&<quot;
            audioAttribute>s
           <     usage value>="AU<DIO_USAGE_G>AME&quot; /
            /audioAttributes
        /oemContext
...
  • Kontekst media zawiera AUDIO_USAGE_MEDIA i AUDIO_USAGE_UNKNOWN
  • Kontekst game zawiera tylko AUDIO_USAGE_GAME

Kontekst musi być zdefiniowany u góry pliku car_audio_configuration.xml. Po zdefiniowaniu kontekstów OEM pozostałą część konfiguracji dźwięku w samochodzie można przeprowadzić jak wcześniej. W przypadku kontekstu audio w samochodzie obowiązują te reguły:

  • Definicje kontekstu OEM są opcjonalne. Zamiast tego używany jest statyczny kontekst audio.

  • Nie powtarzaj nazw kontekstów.

  • Nie przypisuj użycia atrybutu audio do wielu kontekstów.

  • Do tworzenia kontekstu należy używać wszystkich zastosowań dźwięku zdefiniowanych w AudioAttributes.

Ściśle mówiąc, w przypadku definicji kontekstu audio OEM należy użyć android.audio.policy.configuration.V7_0.AudioUsagereprezentacji tekstowej użycia dźwięku. W przyszłości nowsze zastosowania atrybutu audio będą przypisywane do najbardziej odpowiedniego kontekstu, aby zmniejszyć liczbę błędów podczas przechodzenia z jednej wersji Androida na inną.

Kontekst zdefiniowany przez producenta OEM został wprowadzony w celu dalszego rozszerzenia usługi audio wtyczki OEM, ale można go używać bez tej usługi. Działanie dźwięku jest podobne do działania statycznej usługi audio:

  • Interakcje z aktywnością audio. Atrybut audio służy do określania najlepszego dopasowania zgodnie z macierzą interakcji z aktywnością audio. Więcej informacji znajdziesz w sekcji Aktywność audio.

  • Atrybut dźwięku sterowania głośnością jest używany do określania najlepszego dopasowania:

    • Grupa głośności na podstawie kontekstu zdefiniowanego przez producenta OEM.
    • Priorytet z konfigurowanej statycznej listy woluminów.
  • Zachowanie wyciszania tła:

    • Użycie atrybutu audio dla bieżącego fokusu audio jest używane do mapowania informacji o urządzeniu wyjściowym audio zdefiniowanych w pliku konfiguracji audio w samochodzie.

    • Atrybut audio służy do mapowania odpowiedniego kontekstu statycznego na wyciszanie tła na podstawie statycznej macierzy wyciszania tła.

Strategie dotyczące produktów z silnikiem CAP

Gdy urządzenie musi używać silnika CAP do zarządzania głośnością lub routingiem, zdefiniowany przez producenta OEM kontekst musi być zgodny z definicją strategii produktu silnika CAP. W przeciwnym razie możesz użyć kontekstu zdefiniowanego przez producenta OEM bez silnika CAP.

Więcej informacji znajdziesz w sekcji Strategia dotycząca produktów w AAOS.

Konfiguracje dynamicznych stref audio

W Androidzie 14, aby uwzględnić dynamiczną konfigurację stref audio, schemat konfiguracji dźwięku w samochodzie do definiowania stref audio został zaktualizowany do wersji 3. Nowy schemat wymaga skonfigurowania każdej strefy.

<carAudioConfiguration version=&qu>ot;3&<quot;
    !-- optional OEM >conte<xt --
    o>emConte<xts
      oemContext na>me="<media"
   >     audioA<ttributes
          usage value=&>quot;AUDIO_<USAGE_MEDIA" /
          usag>e value=&<quot;AUDIO_USAGE>_UNKNOW<N"/
  >      /<audioAttributes
      >/oemConte<xt
      oemCon>text name=&<quot;game"
        audioAtt>ributes
 <         usage v>alue=&q<uot;AUDIO_U>SAGE_GAME<" /
   >   <  /au>dioAt<tributes
      /oemContext
...
    /oemContexts
  zones
    >zone na<me="pr>imary zon<e" isPrimary="true" occupantZoneId=">0"
   <   zoneConfi>gs
        zo<neCon>fig name="<primary zone config 0" isD>efault="true<"
          volumeG>roups
       <     group
            >  device address=<"bus0_media_out"
    >            con<text co>ntext="med<ia"/
            context context=>"game"/<
                context contex>t="announc<ement&q>uot;/
       <      > /device
    <          de>vice <address=<">bus6_notification_out"
                context context="notification"/
              /device
            /group
  ...
      /zoneConfigs
    /zone
  /zones

Więcej informacji znajdziesz w pliku wersji 3 zdefiniowanym w artykule device/generic/car/emulator/audio/car_audio_configuration.xml. Od Androida 14 strefa podstawowa może mieć tylko 1 konfigurację. Strefy inne niż podstawowe mogą mieć wiele konfiguracji. W przypadku konfiguracji audio w samochodzie obowiązują te zasady:

  • Główna strefa dźwięku może mieć tylko jedną konfigurację.

  • Dodatkowe strefy audio mogą mieć wiele konfiguracji.

  • Nazwa musi być unikalna dla każdej strefy audio i konfiguracji strefy audio.

  • W strefie dźwięku konfiguracje dźwięku mogą się różnić:

    • Konfiguracja grup głośności nie musi być taka sama.
    • Przypisanie kontekstu audio nie musi być takie samo.
  • Nazwy urządzeń wyjściowych audio powinny być unikalne w obrębie stref lub konfiguracji. Nazwa urządzenia powinna pojawiać się tylko raz w konfiguracji audio lub strefach.

  • Urządzenia audio należące do tej samej grupy głośności powinny mieć takie same konfiguracje wzmocnienia dźwięku.

  • Wszystkie konteksty audio (OEM lub statyczne) muszą być przypisane do każdej konfiguracji audio.

Zgodność w przyszłości

Nowe wersje car_audio_configuration.xml wprowadzają nowe funkcje w każdej aktualizacji, ale w nowszych wersjach AAOS możesz nadal używać starszych plików. Producenci OEM aktualizujący system Android do nowych wersji mogą ponownie użyć pliku car_audio_configuration.xml.

Aby korzystać z nowej funkcji, która wymaga nowych informacji zawartych w car_audio_configuration.xml, musisz zaktualizować wersję. Próba użycia starszej wersji pliku z informacjami, które nie są obsługiwane w tej wersji, powoduje zgłoszenie błędu IllegalStateException podczas uruchamiania usługi samochodowej. Komunikat o wyjątku zawiera odpowiednie informacje o tym, które informacje są używane i która minimalna wersja jest wymagana.