Konfiguracja audio w samochodzie

W systemie Android 10 car_audio_configuration.xml zastąpił car_volumes_groups.xml i IAudioControl.getBusForContext . Pliki zasad audio, zwykle zawarte na partycji dostawcy, reprezentują konfigurację sprzętową audio płyty. Wszystkie urządzenia wymienione w car_audio_configuration.xml muszą być zdefiniowane w audio_policy_configuration.xml .

Rysunek 1 poniżej ilustruje ogólny przegląd architektury usługi car audio, w której usługa car audio odczytuje plik konfiguracyjny car audio w celu skonfigurowania dźwięku dla urządzenia.

Przegląd architektury car audio

Rysunek 1. Przegląd architektury car audio.

Umieść plik konfiguracyjny car audio w vendor\etc\ lub system\etc\ na urządzeniu, przy czym vendor\etc\ będzie pierwszym miejscem wyszukiwanym przez usługę car audio w poszukiwaniu pliku. Usługi car audio odczytują plik car_audio_configuration.xml w celu określenia konfiguracji audio.

Strefy car audio:

  • Każda strefa audio zawiera unikalny identyfikator strefy audio.
  • Każdą strefę audio można przypisać do strefy przebywania osób.
  • Działania audio w każdej strefie są od siebie niezależne:

    • Fokus dźwięku
    • Kierowanie audio
    • Wyciszanie dźwięku
  • Grupy wolumenowe samochodów:

    • Wszystkie urządzenia audio zawierające grupę głośności są sterowane razem z tymi samymi zmianami wzmocnienia. Konfiguracja wzmocnienia dźwięku dla wszystkich urządzeń w grupie powinna być taka sama.

    • Kontekst audio do mapowania urządzeń audio. Użyj tego, aby skonstruować miks audio, który odwzorowuje użycie dźwięku na urządzenie wyjściowe.

    • Wszystkie konteksty audio powinny być reprezentowane w jednej strefie. Umożliwia to dokładne skonfigurowanie routingu audio dla wszystkich zastosowań atrybutów audio.

Konteksty dźwiękowe

Aby uprościć konfigurację dźwięku AAOS, podobne zastosowania zostały pogrupowane w CarAudioContexts . Te konteksty audio są używane w CarAudioService do definiowania routingu, grup głośności, fokusu audio i zarządzania wyciszaniem. Poniżej wymieniono statyczne konteksty audio w AAOS.

W poniższej tabeli opisano mapowanie kontekstów audio i zastosowań. Podświetlone wiersze dotyczą nowego użycia systemu.

Kontekst audio samochodu Powiązane atrybutyUżycia
MUZYKA UNKNOWN
GAME
MEDIA
NAWIGACJA ASSISTANCE_NAVIGATION_GUIDANCE
KOMENDA GŁOSOWA ASSISTANT
ASSISTANCE_ACCESSIBILITY
ZADZWOŃ_RING NOTIFICATION_RINGTONE
DZWONIĆ VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
POWIADOMIENIE NOTIFICATION
NOTIFICATION_*
SYSTEM_DŹWIĘK ASSISTANCE_SONIFICATION
NAGŁY WYPADEK EMERGENCY
BEZPIECZEŃSTWO SAFETY
STATUS POJAZDU VEHICLE_STATUS
OGŁOSZENIE ANNOUNCEMENT

Włącz routing AAOS

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

<resources>
    <bool name="audioUseDynamicRouting">true</bool>
</resources>

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

Strefa podstawowa

Domyślnie cały dźwięk jest kierowany do strefy podstawowej. Istnieje tylko jedna strefa podstawowa, która jest wskazywana w konfiguracji przez atrybut isPrimary="true" . Do strefy podstawowej automatycznie przypisywany jest Audiomanager.PRIMARY_AUDIO_ZONE .

Przykładowa konfiguracja (wersja 2)

Na przykład pojazd może mieć dwie strefy, strefę główną i system rozrywki dla tylnych siedzeń. W tym scenariuszu można zaprojektować możliwą wersję 2 car_audio_configuration.xml w następujący sposób:

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true">
           <volumeGroups>
               <group>
                   <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>
                   <device address="bus1_navigation_out">
                       <context context="navigation"/>
                   </device>
                   <device address="bus2_voice_command_out">
                       <context context="voice_command"/>
                   </device>
               </group>
               <group>
                   <device address="bus4_call_out">
                       <context context="call"/>
                   </device>
               </group>
               <group>
                   <device address="bus5_alarm_out">
                       <context context="alarm"/>
                   </device>
               </group>
               <group>
                   <device address="bus7_system_sound_out">
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                   </device>
               </group>
           </volumeGroups>
       </zone>
        <zone name="rear seat zone" audioZoneId="1">
           <volumeGroups>
               <group>
                   <device address="bus100_rear_seat">
                       <context context="music"/>
                       <context context="navigation"/>
                       <context context="voice_command"/>
                       <context context="call_ring"/>
                       <context context="call"/>
                       <context context="alarm"/>
                       <context context="notification"/>
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                       <context context="announcement"/>
                   </device>
               </group>
           </volumeGroups>
    </zones>
</audioZoneConfiguration>

W tym przykładzie strefa podstawowa oddziela niektóre konteksty audio od różnych urządzeń. Umożliwia to warstwie HAL zastosowanie różnych efektów przetwarzania końcowego i miksowanie danych wyjściowych na każdym urządzeniu przy użyciu 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 do useFixedVolume , poziomy głośności dla każdej grupy są przekazywane do warstwy HAL w celu zastosowania na wyjściu tych urządzeń.

W przypadku strefy podstawowej zalecamy oddzielenie dźwięków systemowych od innych dźwięków. Dzięki temu dźwięki pojazdu mogą być traktowane z wyższym priorytetem. Serwis car audio już dokonuje rozróżnienia dźwięków pojazdu pod względem skupienia i zarządzania wyciszeniem. Na przykład żądanie skupienia się na dźwięku alarmowym ma wyższy priorytet niż inne żądanie skupienia.

Aby wszystko było proste, w przykładzie strefy dodatkowej wszystkie konteksty audio są kierowane do jednego urządzenia i jednej grupy woluminów.

Konfiguracja dźwięku w strefie obecności

W systemie Android 11 car_audio_configuration.xml wprowadził dwa nowe pola: audioZoneId i occupantZoneId . Możesz użyć audioZoneId do kontrolowania zarządzania strefą audio. Możesz użyć occupantZoneId , aby skonfigurować routing na podstawie identyfikatora użytkownika.

Wracając do powyższej konfiguracji audio, ale wykorzystując nowe pole do mapowania identyfikatora strefy obecności i identyfikatora strefy audio, nową konfigurację bez definicji grup głośności można skonfigurować w następujący sposób.

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true" occupantZoneId="0">
         ...
       </zone>
       <zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">
         ...
       </zone>
    </zones>
</audioZoneConfiguration>

Powyższa konfiguracja definiuje mapowanie strefy podstawowej na strefę obecności 0 i audioZoneId 1 na occupantZoneId 1. Ogólnie rzecz biorąc, można skonfigurować dowolne mapowanie pomiędzy strefą obecności a strefą audio. Jednak mapowanie musi być jeden do jednego. Poniżej wymieniono reguły definiujące dwa nowe pola.

  • audioZoneId dla strefy podstawowej to zawsze identyfikator PRIMARY_AUDIO_ZONE . Jeśli zdefiniowano isPrimary="true" , wówczas audioZoneId nie jest potrzebne.

  • Numery audioZoneId i occupantZoneId nie mogą się powtarzać.

  • audioZoneId i occupantZoneId mogą mieć tylko mapowanie jeden do jednego.

Konfiguracja car audio w systemie Android 14

W systemie Android 14 firma AAOS wprowadziła usługę wtyczek OEM, która pozwala aktywniej zarządzać zachowaniem audio nadzorowanym przez usługę car audio. Wraz z nowymi usługami wtyczek do pliku konfiguracyjnego car audio dodawane są następujące zmiany:

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

Kontekst car audio zdefiniowany przez producenta OEM

Aby umożliwić elastyczną konfigurację dźwięku, w systemie Android 14 usługa car audio umożliwia grupowanie zastosowań audio w inny sposób niż zdefiniowane powyżej statyczne konteksty audio . Ten kontekst zdefiniowany przez OEM można zdefiniować w pliku car_audio_configuration.xml w wersji 3.

Zamiast tego używane są obecnie zdefiniowane statyczne konteksty audio. Poniżej pokazano ogólny format kontekstu car audio zdefiniowanego przez producenta OEM.

Każdy kontekst OEM wymaga name wraz z listą użycia atrybutów audio przypisanych do kontekstu. W powyższym przykładzie zdefiniowano dwa konteksty:

<carAudioConfiguration version="3">
    <oemContexts>
        <oemContext name="media">
            <audioAttributes>
                <usage value="AUDIO_USAGE_MEDIA" />
    <usage value="AUDIO_USAGE_UNKNOWN"/>
            </audioAttributes>
        </oemContext>
        <oemContext name="game">
            <audioAttributes>
                <usage value="AUDIO_USAGE_GAME" />
            </audioAttributes>
        </oemContext>
...
  • kontekst media zawiera AUDIO_USAGE_MEDIA i AUDIO_USAGE_UNKNOWN
  • kontekst game zawiera tylko AUDIO_USAGE_GAME

Kontekst musi być zdefiniowany na górze pliku car_audio_configuration.xml . Po zdefiniowaniu kontekstów OEM reszta konfiguracji car audio może przebiegać jak poprzednio. W kontekście car audio obowiązują następujące zasady:

  • 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 skonstruowania kontekstu należy użyć wszystkich zastosowań audio zdefiniowanych w AudioAttributes .

Ściśle mówiąc, do definicji kontekstu audio OEM należy użyć ciągu znaków android.audio.policy.configuration.V7_0.AudioUsage reprezentującego użycie dźwięku. W przyszłości nowsze zastosowania atrybutów audio zostaną przypisane do najodpowiedniejszego kontekstu, aby ograniczyć błędy podczas migracji z jednej wersji Androida do drugiej.

Chociaż kontekst zdefiniowany przez OEM został wprowadzony w celu dalszego rozszerzenia usługi audio wtyczki OEM, nadal można z niego korzystać bez usługi wtyczki OEM. Zachowanie dźwięku przypomina statyczną usługę audio:

  • Interakcje fokusu audio. Atrybut audio służy do określenia najlepszego dopasowania, zgodnie z konfiguracją matrycy interakcji fokusu audio. Aby uzyskać szczegółowe informacje, zobacz Ostrość dźwięku .

  • Atrybut audio regulacji głośności audio służy do określenia najlepszego dopasowania:

    • Grupa woluminów oparta na kontekście zdefiniowanym przez OEM.
    • Skonfigurowano priorytet z listy woluminów statycznych.
  • Zachowanie przy wyciszaniu dźwięku:

    • Użycie atrybutu audio dla bieżącego fokusu audio jest wykorzystywane do mapowania informacji o wyjściowym urządzeniu audio, zgodnie z definicją w pliku konfiguracyjnym car audio.

    • Atrybut audio służy do mapowania odpowiedniego kontekstu statycznego na wyciszenie w oparciu o macierz wyciszania statycznego dźwięku.

Dynamiczne konfiguracje stref audio

W systemie Android 14, aby umożliwić dynamiczną konfigurację stref audio, schemat konfiguracji car audio służący do definiowania stref audio został również zaktualizowany do wersji 3. Nowy schemat wymaga skonfigurowania konfiguracji dla każdej strefy.

<carAudioConfiguration version="3">
    <!-- optional OEM context -->
    <oemContexts>
      <oemContext name="media">
        <audioAttributes>
          <usage value="AUDIO_USAGE_MEDIA" />
          <usage value="AUDIO_USAGE_UNKNOWN"/>
        </audioAttributes>
      </oemContext>
      <oemContext name="game">
        <audioAttributes>
          <usage value="AUDIO_USAGE_GAME" />
        </audioAttributes>
      </oemContext>
...
    </oemContexts>
  <zones>
    <zone name="primary zone" isPrimary="true" occupantZoneId="0">
      <zoneConfigs>
        <zoneConfig name="primary zone config 0" isDefault="true">
          <volumeGroups>
            <group>
              <device address="bus0_media_out">
                <context context="media"/>
            <context context="game"/>
                <context context="announcement"/>
              </device>
              <device address="bus6_notification_out">
                <context context="notification"/>
              </device>
            </group>
  ...
      </zoneConfigs>
    </zone
  </zones>

Aby dowiedzieć się więcej, zobacz plik wersji 3 zdefiniowany w device/generic/car/emulator/audio/car_audio_configuration.xml . Począwszy od Androida 14, strefa podstawowa może mieć tylko jedną (1) konfigurację. Strefy inne niż podstawowe mogą mieć wiele konfiguracji. W przypadku konfiguracji car audio obowiązują następujące zasady:

  • Podstawowa strefa audio może mieć tylko jedną konfigurację.

  • Niepodstawowe strefy audio mogą mieć wiele konfiguracji.

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

  • W obrębie strefy audio konfiguracje audio mogą się różnić:

    • Konfiguracja grup woluminów nie musi być taka sama.
    • Przypisanie kontekstu audio nie musi być takie samo.
  • Nazwy urządzeń wyjściowych audio powinny być unikalne w różnych strefach lub konfiguracjach. Nazwa urządzenia powinna pojawić się tylko raz w konfiguracji audio lub strefach.

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

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

Kompatybilność w przód

Chociaż nowe wersje car_audio_configuration.xml wprowadzają nowe funkcje w każdej aktualizacji, nadal możesz używać starszych plików w nowszych wersjach AAOS. Producenci OEM dokonujący aktualizacji do nowych wersji Androida mogą ponownie wykorzystać plik car_audio_configuration.xml .

Aby skorzystać z nowej funkcji wymagającej nowych informacji zawartych w pliku car_audio_configuration.xml , należy zaktualizować wersję. Próba użycia starszej wersji pliku zawierającej informacje nieobsługiwane w tej wersji pliku powoduje zgłoszenie IllegalStateException po uruchomieniu usługi samochodowej. Komunikat o wyjątku zawiera odpowiednie informacje o tym, które informacje są wykorzystywane i jaka minimalna wersja jest wymagana.