Konfiguracja dźwięku w samochodzie

W Androidzie 10 zastąpiono car_audio_configuration.xml car_volumes_groups.xml i IAudioControl.getBusForContext. Zasady dotyczące reklam audio pliki, zazwyczaj zawarte na partycji dostawcy, reprezentują sprzęt audio, i konfiguracji płytki. Wszystkie urządzenia wymienione w Pole car_audio_configuration.xml musi być zdefiniowane w: audio_policy_configuration.xml

Rysunek 1 poniżej przedstawia ogólny przegląd usługi audio w samochodzie architektura, w której system audio w samochodzie odczytuje konfigurację dźwięku z samochodu aby skonfigurować dźwięk na urządzeniu.

Omówienie architektury systemu audio w samochodzie

Rysunek 1. Omówienie architektury systemu audio w samochodzie.

Umieść plik konfiguracji dźwięku w samochodzie w folderze vendor\etc\ lub system\etc\ na urządzeniu, vendor\etc\ będący pierwszym miejscem wyszukiwania pliku przez system audio w samochodzie. Samochód usługi audio odczytują plik car_audio_configuration.xml, aby określić dźwięk konfiguracji.

Samochodowe strefy audio:

  • Każda strefa audio zawiera unikalny identyfikator strefy audio.
  • Każdą strefę audio można przypisać do strefy gościa.
  • 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 samochodu:

    • Wszystkie urządzenia audio zawierające grupę głośności są sterowane razem przy takich samych zmianach wzmocnienia. Konfiguracja wzmocnienia audio dla wszystkich urządzeń powinny być takie same.

    • Mapowanie kontekstu dźwięku na urządzenia audio Użyj go do utworzenia pliku audio. miksu, który mapuje użycie dźwięku na urządzenie wyjściowe.

    • Wszystkie konteksty dźwiękowe powinny znajdować się w strefie. Dzięki temu aby zapewnić dokładne ustawienia routingu dźwięku na potrzeby wszystkich atrybutów audio.

Konteksty dźwiękowe

Aby uprościć konfigurację audio AAOS, pogrupowaliśmy podobne przypadki użycia na CarAudioContexts. Te konteksty dźwiękowe są używane w całym CarAudioService, aby zdefiniować kierowanie, grupy głośności, aktywność audio i wyciszanie tła. i zarządzania nimi. Poniżej znajdziesz statyczne konteksty audio w systemie AAOS.

W tej tabeli opisano mapowanie między kontekstami audio a zastosowaniami. Zaznaczone Liczba wierszy jest podana dla nowego użycia systemu.

Samochodowy kontekst audio Powiązane użycie atrybutów
MUZYCZNA UNKNOWN
GAME
MEDIA
NAWIGACJA ASSISTANCE_NAVIGATION_GUIDANCE
POLECENIE ASSISTANT
ASSISTANCE_ACCESSIBILITY
DŹWIĘK_POŁĄCZENIA NOTIFICATION_RINGTONE
ZADZWOŃ VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
POWIADOMIENIE NOTIFICATION
NOTIFICATION_*
SYSTEM_DŹWIĘKOWY ASSISTANCE_SONIFICATION
ALARM EMERGENCY
BEZPIECZEŃSTWO SAFETY
STAN POJAZDU VEHICLE_STATUS
POWIADOMIENIE ANNOUNCEMENT

Włącz routing AAOS

Aby używać routingu w oparciu o AAOS, musisz ustawić flagę audioUseDynamicRouting na true:

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

Gdy funkcja false, routing i znaczna część obszaru CarAudioService są wyłączone, a system AAOS upada z powrotem do domyślnego działania AudioService.

Główna strefa

Domyślnie cały dźwięk jest kierowany do strefy głównej. Tylko 1 strefa główna istnieje, co jest określone w konfiguracji przez atrybut isPrimary="true" Strefa podstawowa jest automatycznie przypisywana Audiomanager.PRIMARY_AUDIO_ZONE

Przykładowa konfiguracja (wersja 2)

Na przykład pojazd może mieć 2 strefy: główną i tylne. system multimedialny. W tym scenariuszu możesz zaprojektować możliwe car_audio_configuration.xml w wersji 2:

<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 główna rozdziela niektóre konteksty audio na: na różnych urządzeniach. Dzięki temu HAL może stosować różne i miksować dźwięk na każdym z urządzeń za pomocą wyposażenia pojazdu. Urządzenia są podzielone na kilka grup głośności: multimedia, nawigacja, połączeń, alarmów i dźwięków systemu. Jeśli system jest skonfigurowany do useFixedVolume, poziomy głośności każdej grupy zostaną przekazane do HAL aby zastosować na wyjściu tych urządzeń.

W strefie głównej zalecamy, aby dźwięki systemowe były oddzielone od innych dźwięki. Dzięki temu dźwiękom pojazdu może być traktowane z wyższym priorytetem. Usługa audio w samochodzie już wprowadza te rozróżnienia w przypadku dźwięków pojazdu i skupiania się na nich. Na przykład jako punkt skupienia dźwięku awaryjnego ma wyższy priorytet niż inne żądanie koncentracji.

Dla uproszczenia w strefie dodatkowej w przykładzie wszystkie konteksty audio są kierowane do 1 urządzenia i 1 grupy głośności.

Konfiguracja dźwięku w strefie osób

W Androidzie 11 car_audio_configuration.xml wprowadziliśmy 2 nowe pola: audioZoneId i occupantZoneId. Możesz użyć usługi audioZoneId aby sterować zarządzaniem strefami dźwiękowymi. Za pomocą usługi occupantZoneId możesz skonfigurować w zależności od identyfikatora użytkownika.

Wracam do powyższej konfiguracji audio, ale korzystam z nowego pola identyfikatora strefy użytkownika i identyfikatora strefy audio, nowej konfiguracji bez definicje grup woluminów możesz skonfigurować w ten 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 głównej na strefę 0 użytkowników. i audioZoneId 1 do occupantZoneId 1. Ogólnie każde mapowanie między strefy użytkowników i dźwięku można skonfigurować. Mapowanie musi jednak być jeden do jednego. Poniżej znajdziesz reguły definiujące 2 nowe pola.

  • audioZoneId w strefie głównej ma zawsze identyfikator PRIMARY_AUDIO_ZONE. Jeśli Zdefiniowano atrybut isPrimary="true", a pole audioZoneId nie jest potrzebne.

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

  • audioZoneId i occupantZoneId mogą mieć tylko mapowanie 1:1.

Konfiguracja dźwięku w samochodzie z Androidem 14

W Androidzie 14 w systemie AAOS wprowadzono usługę wtyczek OEM, co pozwala na bardziej aktywne zarządzanie dźwiękiem w samochodzie. usłudze audio. Oprócz nowych usług wtyczek wprowadziliśmy następujące zmiany dodany do pliku konfiguracji dźwięku w samochodzie:

  • Kontekst audio w samochodzie zdefiniowany przez OEM
  • Konfiguracje dynamiczne strefy innej niż podstawowa

Kontekst audio w samochodzie zdefiniowany przez OEM

Aby włączyć elastyczną konfigurację dźwięku, na urządzeniu z Androidem 14, samochodowe usługi audio pozwalają na wykorzystanie muzyki są pogrupowane inaczej niż statyczne konteksty audio zdefiniowane powyżej. Ten kontekst zdefiniowany przez OEM można określić tutaj: car_audio_configuration.xml wersji 3.

Zamiast niego używane są aktualnie zdefiniowane statyczne konteksty dźwiękowe. Ogólne formatu kontekstu audio w samochodzie zdefiniowanego przez OEM znajdziesz poniżej.

Każdy kontekst OEM wymaga atrybutu name wraz z listą atrybutów audio powiązane z kontekstem. W przykładzie powyżej 2 konteksty to zdefiniowano:

<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 car_audio_configuration.xml . Po zdefiniowaniu kontekstu OEM reszta konfiguracji audio w samochodzie może przebiegać tak jak wcześniej. W przypadku odtwarzania dźwięku w samochodzie obowiązują te zasady:

  • Definicje kontekstowe OEM są opcjonalne. Statyczny Kontekst audio to .

  • Nie powtarzaj nazw kontekstów.

  • Nie przypisuj wykorzystania atrybutów audio do wielu kontekstów.

  • Wszystkie przypadki użycia plików audio określone w zasadzie AudioAttributes powinny być wykorzystywane do tworzenia w kontekście.

Ściśle mówiąc, android.audio.policy.configuration.V7_0.AudioUsage W kontekście audio OEM musi być używana reprezentacja ciągu audio w formie ciągu znaków definicji. W przyszłości nowsze przypadki użycia atrybutów audio będą przypisywane do kontekst, który pozwoli ograniczyć błędy przy migracji z jednego Androida. do innej wersji.

Wprowadzono kontekst zdefiniowany przez OEM, aby rozszerzyć zakres wtyczki OEM. audio, można jej nadal używać bez usługi wtyczki OEM. Dźwięk podobne do działania usługi statycznej dźwięku:

  • Interakcje z dźwiękiem. Atrybut audio służy do określania najlepszej dopasowania skonfigurowanego przez macierz interakcji skupienia się na dźwięku. Dla: Więcej informacji znajdziesz w sekcji Aktywność związana z dźwiękiem.

  • Do określenia najlepszego dopasowania służy atrybut sterowania głośnością dźwięku:

    • Grupa woluminów na podstawie kontekstu zdefiniowanego przez OEM.
    • Priorytet ze statycznej listy woluminów.
  • Wyciszanie tła:

    • Wykorzystanie atrybutów audio dla bieżącego elementu audio jest używane do zmapowania wyjściowego urządzenia audio zdefiniowanego w konfiguracji systemu audio w samochodzie; .

    • Atrybut audio służy do zmapowania odpowiedniego statycznego kontekstu do kaczki. na podstawie statycznej matrycy wyciszania tła.

Konfiguracje dynamicznych stref audio

W Androidzie 14 w celu dostosowania dynamicznych stref dźwięku schemat konfiguracji dźwięku w samochodzie do definiowania stref audio to Zaktualizowano też do wersji 3. Nowy schemat wymaga skonfigurowania 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>

Więcej informacji znajdziesz w pliku wersji 3 zdefiniowanego w device/generic/car/emulator/audio/car_audio_configuration.xml Zaczyna się za Android 14, strefa główna może mieć tylko 1 (1) konfiguracji. Strefy inne niż podstawowa mogą mieć wiele konfiguracji. Poniżej w przypadku konfiguracji audio w samochodzie:

  • Główna strefa audio może mieć tylko 1 konfigurację.

  • Inne strefy audio mogą mieć wiele konfiguracji.

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

  • W strefie 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 i konfiguracjach. O powinna się pojawić tylko raz w konfiguracji lub strefach audio.

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

  • Wszystkie konteksty dźwiękowe (OEM lub statyczne) muszą być przypisane do każdego dźwięku konfiguracji.

.

Zgodność z wyprzedzeniem

Chociaż nowe wersje car_audio_configuration.xml wprowadzają nowe w każdej aktualizacji możesz używać starszych plików w nowszych wersjach AAOS. OEM, którzy aktualizują się do nowych wersji Androida, mogą ponownie używać car_audio_configuration.xml.

Aby skorzystać z nowej funkcji, która wymaga nowych informacji zawartych w car_audio_configuration.xml, należy zaktualizować wersję. Próbuję użyć starsza wersja pliku z informacjami, które nie są w niej obsługiwane zwraca IllegalStateException po uruchomieniu usługi samochodowej. Wyjątek wiadomość zawiera istotne informacje na temat tego, które dane są wykorzystywane która wersja minimalna jest wymagana.