W Androidzie 10 car_audio_configuration.xml
zastąpiło car_volumes_groups.xml
i IAudioControl.getBusForContext
. Pliki zasad audio, które zwykle znajdują 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.
Rysunek 1. Omówienie architektury systemu audio w samochodzie.
Umieść plik konfiguracyjny systemu audio w samochodzie w folderze vendor/etc/
lub vendor/etc/
na urządzeniu. Usługa audio w samochodzie najpierw wyszuka plik w folderze vendor/etc/
.system/etc/
Usługi audio w samochodzie odczytują car_audio_configuration.xml
, aby określić konfigurację dźwięku.
Strefy audio w samochodzie:
- Każda strefa audio zawiera unikalny identyfikator strefy audio.
- Każda strefa audio może być zmapowana na strefę zajmowaną przez pasażera.
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 funkcji, aby utworzyć miks audio, który przypisuje sposoby użycia dźwięku do urządzenia wyjściowego.
Wszystkie konteksty audio powinny być reprezentowane w strefie. Umożliwia to prawidłowe skonfigurowanie routingu 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 aplikacji 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 sposobu korzystania z systemu.
CarAudioContext | Associated AttributeUsages |
---|---|
MUSIC |
UNKNOWN GAME MEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT |
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="audioUseDynamicRouting">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 silnika zasad audio (CAP). Dzięki temu zyskujesz większą elastyczność w zakresie sterowania routingiem i głośnością dźwięku oraz wszechstronne możliwości definiowania:
Silnik konfigurowalnych zasad dotyczących dźwięku (CAP) możesz włączyć za pomocą tagów useCoreAudioVolume
i useCoreAudioRouting
. Więcej informacji znajdziesz w artykule Silnik konfigurowalnych zasad dotyczących dźwięku.
Strefa główna
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ę 2car_audio_configuration.xml
w ten 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 główna rozdziela niektóre konteksty audio na różne urządzenia. Umożliwia to warstwie HAL stosowanie różnych efektów przetwarzania końcowego i miksowanie danych wyjściowych 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 jako 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 priorytetu i zarządzania wyciszaniem. Na przykład żądanie skupienia na dźwięku alarmowym ma wyższy priorytet niż inne żądanie 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 Konfigurowalny silnik 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 w AAOS.
Konfiguracja dźwięku w strefie pasażera
W Androidzie 11 car_audio_configuration.xml
wprowadził 2 nowe pola: audioZoneId
i occupantZoneId
. Do zarządzania strefami audio możesz używać audioZoneId
. 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 pasażera i identyfikatora strefy audio, nową konfigurację bez definicji grupy głośności można 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>
Konfiguracja definiuje mapowanie strefy podstawowej 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
w przypadku strefy podstawowej jest zawszePRIMARY_AUDIO_ZONE
ID. Jeśli zdefiniowano właściwośćisPrimary="true"
, właściwośćaudioZoneId
nie jest potrzebna.Numery
audioZoneId
ioccupantZoneId
nie mogą się powtarzać.audioZoneId
ioccupantZoneId
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 konfiguracji audio w samochodzie dodano te zmiany:
- 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, 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 zdefiniowany przez producenta OEM kontekst można określić w pliku car_audio_configuration.xml
w wersji 3.
Zamiast tego używane są predefiniowane statyczne konteksty audio. Ogólny format kontekstu audio w samochodzie zdefiniowanego przez producenta OEM jest pokazany poniżej.
Każdy kontekst OEM wymaga elementu name
oraz listy atrybutów audio
używanych w tym kontekście. W przykładzie powyżej zdefiniowano 2 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
zawieraAUDIO_USAGE_MEDIA
iAUDIO_USAGE_UNKNOWN
game
kontekst zawiera tylkoAUDIO_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ń audio zdefiniowanych w
AudioAttributes
.
Ściśle mówiąc, w przypadku definicji kontekstu audio OEM należy użyć android.audio.policy.configuration.V7_0.AudioUsage
reprezentacji 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, aby jeszcze bardziej rozszerzyć usługę audio w przypadku wtyczki OEM, ale można go używać bez tej usługi. Dźwięk zachowuje się podobnie jak w przypadku statycznej usługi audio:
Interakcje z aktywnością audio. Atrybut audio służy do określania najlepszego dopasowania zgodnie z macierzą interakcji z fokusem audio. Więcej informacji znajdziesz w artykule 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 wyjściowym urządzeniu audio zgodnie z definicją w pliku konfiguracyjnym audio w samochodzie.
Atrybut audio służy do mapowania odpowiedniego kontekstu statycznego na wyciszenie na podstawie statycznej macierzy wyciszania dźwięku.
Strategie dotyczące produktów z silnikiem CAP
Jeśli 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 dotyczącej strategii dotyczącej produktu 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="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 w wersji 3 zdefiniowanym w device/generic/car/emulator/audio/car_audio_configuration.xml
. Od Androida 14 strefa główna 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 audio 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 do nowych wersji Androida 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.