W Androidzie 10 car_audio_configuration.xml
zastąpiło car_volumes_groups.xml
i IAudioControl.getBusForContext
. Pliki zasad dotyczących dźwięku, 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ę elementcar_audio_configuration.xml
, muszą być zdefiniowane w elemencieaudio_policy_configuration.xml
.
Rysunek 1 poniżej 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 dźwięku w samochodzie
Umieść plik konfiguracji dźwięku w samochodzie w folderze vendor\etc\
lub system\etc\
na urządzeniu. Folder vendor\etc\
jest pierwszym miejscem, w którym usługa dźwięku w samochodzie będzie szukać pliku. Usługi audio samochodu odczytują wartość car_audio_configuration.xml
, aby określić konfigurację dźwięku.
Strefy dźwięku w samochodzie:
- Każda strefa audio ma unikalny identyfikator strefy audio.
- Każdą strefę dźwiękową można zmapować na strefę pasażera.
Działania dotyczące dźwięku w poszczególnych strefach 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ą kontrolowane razem z tymi samymi zmianami wzmocnienia. Konfiguracja wzmocnienia dźwięku na wszystkich urządzeniach w grupie powinna być taka sama.
Mapowanie kontekstu dźwięku na urządzenia audio Użyj tego, aby utworzyć miks audio, który mapuje użycie dźwięku na urządzeniu wyjściowym.
Wszystkie konteksty audio powinny być reprezentowane w strefie. Umożliwia to dokładne skonfigurowanie przekierowywania dźwięku w przypadku wszystkich zastosowań atrybutu audio.
Konteksty audio
Aby uprościć konfigurację dźwięku w AAOS, podobne zastosowania zostały pogrupowane w grupę CarAudioContexts
. Te konteksty audio są używane w całym CarAudioService
do definiowania kierowania, grup głośności, skupienia dźwięku i zarządzania wyciszaniem. Statyczne konteksty audio w AAOS:
Tabela ta opisuje mapowanie kontekstów dźwiękowych i ich zastosowań. Zaznaczone wiersze dotyczą nowego sposobu korzystania z systemu.
CarAudioContext | Powiązane atrybutyUsages |
---|---|
MUZYCZNA | UNKNOWN GAME |
NAWIGACJA | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
CALL_RING | NOTIFICATION_RINGTONE |
ZADZWOŃ | VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ALARM | ALARM |
POWIADOMIENIE | NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
ALARM | EMERGENCY |
BEZPIECZEŃSTWO | SAFETY |
VEHICLE_STATUS | VEHICLE_STATUS |
POWIADOMIENIE | ANNOUNCEMENT |
Włączanie routingu AAOS
Aby korzystać z routingu na podstawie AAOS, musisz ustawić flagę audioUseDynamicRouting
na wartość true
:
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
Gdy false
, routing i duża część CarAudioService
są wyłączone, AAOS powraca do domyślnego działania AudioService
.
Strefa główna
Domyślnie cały dźwięk jest kierowany do strefy głównej. Istnieje tylko jedna strefa główna, która jest wskazywana w konfiguracji za pomocą atrybutu isPrimary="true"
. Strefa podstawowa jest automatycznie przypisywana do Audiomanager.PRIMARY_AUDIO_ZONE
.
Przykładowa konfiguracja (wersja 2)
Na przykład pojazd może mieć 2 strefy: strefę główną i system rozrywki na tylnym siedzeniu. W tym przypadku możesz zaprojektować możliwą wersję car_audio_configuration.xml
2 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 HAL-owi stosowanie różnych efektów postprodukcyjnych 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: media, 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 na wyjściu tych urządzeń.
W przypadku strefy głównej zalecamy oddzielanie dźwięków systemowych od innych dźwięków. Dzięki temu dźwięki pojazdu są traktowane z wyższym priorytetem. Usługa dźwiękowa w samochodzie już rozróżnia dźwięki pojazdu pod kątem zarządzania dźwiękiem i tłumienia dźwięku. Na przykład prośba o awaryjne skupienie na dźwięku ma wyższy priorytet niż inna prośba o skupienie.
W tym przykładzie strefy dodatkowej wszystkie konteksty audio są kierowane na jedno urządzenie i jedną grupę głośności, aby zachować prostotę.
Konfiguracja dźwięku w strefie dla pasażerów
W Androidzie 11 car_audio_configuration.xml
wprowadzono 2 nowe pola: audioZoneId
i occupantZoneId
. Możesz użyć audioZoneId
do zarządzania strefami dźwięku. Za pomocą elementu occupantZoneId
możesz skonfigurować kierowanie na podstawie identyfikatora użytkownika.
Wracając do konfiguracji dźwięku powyżej, ale z wykorzystaniem nowego pola do mapowania identyfikatora strefy pasażera i identyfikatora strefy dźwięku, nową konfigurację bez definicji grup 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>
Powyższa konfiguracja definiuje mapowanie strefy głównej na strefę 0
oraz audioZoneId
1 na occupantZoneId
1. Ogólnie można skonfigurować dowolne mapowanie strefy pasażera i strefy audio. Mapowanie musi być jednak jeden-do-jednego. Poniżej znajdziesz reguły, które zdefiniowały 2 nowe pola.
audioZoneId
w przypadku głównej strefy to zawsze identyfikatorPRIMARY_AUDIO_ZONE
. Jeśli zdefiniujesz właściwośćisPrimary="true"
, parametraudioZoneId
nie jest wymagany.Numerów
audioZoneId
ioccupantZoneId
nie można powtarzać.audioZoneId
ioccupantZoneId
mogą mieć tylko mapowanie jeden do jednego.
Konfiguracja dźwięku w samochodzie w Androidzie 14
W Androidzie 14 AAOS wprowadził usługę wtyczki OEM, która umożliwia bardziej aktywne zarządzanie zachowaniem dźwięku nadzorowanym przez usługę audio samochodu. Oprócz nowych usług wtyczek do pliku konfiguracji dźwięku w samochodzie wprowadzono następujące zmiany:
- Kontekst dźwięku w samochodzie zdefiniowany przez OEM
- Konfiguracje dynamiczne strefy innej niż główna
kontekst dźwięku w samochodzie zdefiniowany przez producenta OEM;
Aby umożliwić elastyczne konfigurowanie dźwięku, w Androidzie 14 usługa dźwięku w samochodzie umożliwia grupowanie zastosowań dźwięku w inny sposób niż w przypadku statycznych kontekstów dźwięku zdefiniowanych powyżej.
Ten kontekst zdefiniowany przez producenta OEM można zdefiniować w pliku car_audio_configuration.xml
wersji 3.
Zamiast tego używane są obecnie zdefiniowane statyczne konteksty audio. Poniżej przedstawiono ogólny format zdefiniowanego przez producenta OEM kontekstu dźwięku w samochodzie.
Każdy kontekst OEM wymaga name
oraz listy atrybutów audio, które są przypisane do kontekstu. W powyższym przykładzie 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
context zawiera tylkoAUDIO_USAGE_GAME
Kontekst musi być zdefiniowany u góry pliku car_audio_configuration.xml
. Gdy konteksty OEM zostaną zdefiniowane, pozostała część konfiguracji dźwięku w samochodzie może przebiegać tak jak wcześniej. W kontekście dźwięku w samochodzie obowiązują te zasady:
Definicje kontekstu OEM są opcjonalne. Zamiast tego używany jest statyczny kontekst audio.
Nie powtarzaj nazw kontekstów.
Nie przypisuj atrybutu audio do wielu kontekstów.
Do tworzenia kontekstu należy używać wszystkich zastosowań dźwięku zdefiniowanych w
AudioAttributes
.
W przypadku definicji kontekstu dźwięku OEM należy używać android.audio.policy.configuration.V7_0.AudioUsage
, czyli ciągu znaków reprezentującego użycie 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 migracji z jednej wersji Androida na inną.
Chociaż kontekst zdefiniowany przez OEM został wprowadzony, aby rozszerzyć usługę audio w pluginie OEM, można z niego korzystać bez plugina OEM. Zachowanie dźwięku przypomina zachowanie statycznej usługi audio:
Interakcje z aktywizacją audio Atrybut audio służy do określania najlepszego zachowania dopasowywania zgodnie z konfiguracją w matricy interakcji z uwzględnieniem dźwięku. Więcej informacji znajdziesz w artykule Aktywność audio.
Atrybut sterowania głośnością dźwięku służy do określania najlepszego dopasowania:
- Grupa objętości na podstawie kontekstu zdefiniowanego przez producenta OEM.
- Priorytet z skonfigurowanej listy wolumenów statycznych.
Zachowanie wyciszania dźwięku:
Użycie atrybutu audio dla bieżącego fokusa audio służy do zmapowania informacji o wyjściowym urządzeniu audio zgodnie z definicją w pliku konfiguracji audio samochodu.
Atrybut audio służy do mapowania odpowiedniego kontekstu statycznego na wyciszenie na podstawie statycznej macierzy wyciszania dźwięku.
Konfiguracje dynamicznych stref dźwięku
W Androidzie 14 schemat konfiguracji dźwięku w samochodzie został zaktualizowany do wersji 3, aby uwzględnić dynamiczną konfigurację stref dźwiękowych. 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 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ż główne mogą mieć wiele konfiguracji. W przypadku konfiguracji dźwięku w samochodzie obowiązują te zasady:
Główna strefa audio może mieć tylko jedną konfigurację.
Niepodstawowe strefy audio mogą mieć wiele konfiguracji.
Nazwa musi być niepowtarzalna dla każdej strefy audio i konfiguracji strefy audio.
W obrębie strefy dźwiękowej 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 dźwięku powinny być unikalne w przypadku różnych stref lub konfiguracji. Nazwa urządzenia powinna pojawiać się tylko raz w konfiguracji dźwięku lub strefach.
Urządzenia audio należące do tej samej grupy głośności powinny mieć te same konfiguracje wzmocnienia dźwięku.
Każda konfiguracja audio musi mieć przypisane wszystkie konteksty audio (OEM lub statyczne).
Zgodność wsteczna
Chociaż nowe wersje car_audio_configuration.xml
wprowadzają nowe funkcje w każdej aktualizacji, w nowszych wersjach AAOS nadal możesz używać starszych plików. Producenci urządzeń OEM, którzy aktualizują swoje urządzenia do nowych wersji Androida, mogą ponownie użyć pliku car_audio_configuration.xml
.
Aby korzystać z nowej funkcji, która wymaga nowych informacji w car_audio_configuration.xml
, musisz zaktualizować tę wersję. Próba użycia starszej wersji pliku z informacjami, które nie są obsługiwane w tej wersji pliku, powoduje błąd IllegalStateException
po uruchomieniu usługi. Komunikat wyjątku zawiera odpowiednie informacje o tym, które dane są używane i której minimalnej wersji jest wymagana.