W Androidzie 10 car_audio_configuration.xml zastąpiło car_volumes_groups.xml i IAudioControl.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.
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 |
UNKNOWNGAMEMEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATIONVOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATIONNOTIFICATION_* |
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 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ą useCoreAudioVolume i useCoreAudioRouting. 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">
<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. 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: audioZoneId i occupantZoneId. 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">
<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 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:
audioZoneIddla strefy podstawowej jest zawszePRIMARY_AUDIO_ZONEID. Jeśli zdefiniowano właściwośćisPrimary="true", właściwośćaudioZoneIdnie jest potrzebna.Numery
audioZoneIdioccupantZoneIdnie mogą się powtarzać.audioZoneIdioccupantZoneIdmogą 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="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
mediazawieraAUDIO_USAGE_MEDIAiAUDIO_USAGE_UNKNOWN - Kontekst
gamezawiera 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ń 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="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 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.