Zarządzanie woluminami znajduje się w regionie CarAudioService
, który używa stałych woluminów
po założeniu, że woluminy są stosowane poniżej wartości HAL przez sprzęt
we wzmacniaczu, a nie w oprogramowaniu. CarAudioService
porządkuje urządzenia wyjściowe
w grupy głośności, aby zastosować te same zyski na wszystkich urządzeniach powiązanych z
grupy głośności.
Stała głośność
Implementacje AAOS do sterowania głośnością używają wzmacniacza sprzętowego zamiast
mikser oprogramowania. Aby uniknąć efektów ubocznych, ustaw flagę config_useFixedVolume
na
true
(w razie potrzeby nakładka):
<resources>
<!-- Car uses hardware amplifier for volume. -->
<bool name="config_useFixedVolume">true</bool>
</resources>
Gdy flaga config_useFixedVolume
nie jest ustawiona (lub jest ustawiona na false
),
Aplikacje mogą wywołać funkcję AudioManager.setStreamVolume()
, aby zmieniać głośność w ramach strumienia
za pomocą miksera oprogramowania. Nie zawsze jest to pożądane ze względu na potencjalne
wpływ na inne aplikacje oraz fakt, że tłumienie głośności w mikserze oprogramowania
może zmniejszyć liczbę znacznych bitów dostępnych w sygnale, gdy zostanie odebrany
we wzmacniaczu sprzętowym.
Grupy woluminów
Grupy głośności służą do zarządzania głośnością grupy urządzeń w ramach dźwięku strefie. W każdej grupie głośności głośność można regulować niezależnie. uzyskane wzmocnienia są skonfigurowane na powiązanych urządzeniach i mają być stosowane przez we wzmacniaczu pojazdu. Ustawienia woluminu użytkownika są zachowywane i wczytywane po zalogowaniu się użytkownika.
Zdefiniuj grupy woluminów
CarAudioService używa grup głośności zdefiniowanych w car_audio_configuration.xml
:
<audioZoneConfiguration version="2.0">
<zones>
<zone name="primary zone" isPrimary="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="music"/>
</device>
</group>
<group>
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
...
</volumeGroups>
</zone>
</zones>
</audioZoneConfiguration>
Każda grupa woluminów powinna zawierać co najmniej 1 urządzenie wyjściowe z powiązanym
adresów. Adresy powinny odpowiadać urządzeniom wyjściowym określonym w
audio_policy_configuration.xml
Skonfiguruj zyski grup woluminów
Każda grupa głośności ma minimalne, maksymalne i domyślne wartości wzmocnienia oraz
rozmiaru kroku na podstawie wartości skonfigurowanych w audio_policy_configuration.xml
dla wartości
urządzeń powiązanych z grupą głośności.
<devicePort tagName="bus0_media_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="bus0_media_out">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
<gains>
<gain name="" mode="AUDIO_GAIN_MODE_JOINT"
minValueMB="-3200" maxValueMB="600" defaultValueMB="0" stepValueMB="100"/>
</gains>
</devicePort>
Podczas inicjowania grupa woluminów sprawdza wartości wzmocnienia powiązanych i konfiguruje grupę w następujący sposób:
- Rozmiar kroku. Musi być taka sama dla wszystkich urządzeń sterowanych przez grupę głośności.
- Minimalny zysk. Najmniejsze minimalne wzmocnienie wśród urządzeń w grupie.
- Maksymalny zysk. Najwyższe maksymalne wzmocnienie wśród urządzeń w grupie.
- Wzmocnienie domyślne. Najwyższe wzmocnienie domyślne wśród urządzeń w grupie.
Przyjmując konfigurację tych wartości, możliwe jest ustawienie wzmocnienia grupa głośności spoza zakresu obsługiwanego przez urządzenie powiązane z głośnością grupy reklam. W takim przypadku wzmocnienie jest ustawione na minimalny poziom urządzenia. maksymalnej wartości wzmocnienia w zależności od tego, czy wartość grupy głośności jest mniejsza czy większa zakres dat.
Identyfikatory grup woluminów
Grupy woluminów są identyfikowane w czasie działania w kolejności zdefiniowanej w pliku XML.
Identyfikatory mają zakres od 0
do N-1
w strefie audio, gdzie N
to liczba
grup woluminów w danej strefie. Dzięki temu identyfikatory grup woluminów nie są unikalne.
między strefami. Te identyfikatory są używane w CarAudioManager
powiązanych interfejsach API
dzięki grupom woluminów. Dowolny interfejs API, który przyjmuje groupId
bez zoneId
domyślnie ustawiana jest główna strefa audio.
Wielostrefowe zarządzanie woluminem
Każda strefa audio powinna mieć co najmniej 1 grupę głośności, a każda z nich
jest powiązana tylko z jedną strefą audio. Ta relacja została zdefiniowana
w ramach usługi car_audio_configuration.xml
. Więcej informacji znajdziesz w przykładzie powyżej.
w artykule Definiowanie grup woluminów.
Bieżące poziomy głośności w każdej strefie są zachowywane dla użytkownika powiązanego z w tej strefie. Ustawienia te zależą od strefy, co oznacza, że użytkownik zaloguje się na ze strefą główną, a później za pomocą znaków w strefie. powiązane z dodatkową strefą audio, poziomy głośności są wczytywane i utrzymywane przez pierwszej strefy różni się od strefy przeznaczonej dla strefy dodatkowej.
Obsługa kluczowych zdarzeń dotyczących głośności
Android definiuje kilka kodów klawiszy do regulacji głośności, w tym:
KEYCODE_VOLUME_UP
KEYCODE_VOLUME_DOWN
KEYCODE_VOLUME_MUTE
Domyślnie Android przekierowuje do aplikacji zdarzenia związane z kluczowymi głośnościami. Samochodowy
powinny wymuszać przetwarzanie tych kluczowych zdarzeń przez
CarAudioService
, który wywołuje metodę setGroupVolume
lub setMasterMute
, jako
odpowiednie. Aby wymusić takie zachowanie, ustaw parametr
Flaga config_handleVolumeKeysInWindowManager
do użytkownika true
:
<resources>
<bool name="config_handleVolumeKeysInWindowManager">true</bool>
</resources>
Zdarzenia związane z kluczowymi kwestiami związanymi z woluminami nie mogą obecnie rozróżnić, która strefa
są przeznaczone i zakłada się, że wszystkie są powiązane z
strefie dźwięku. Po odebraniu kluczowego zdarzenia związanego z liczbą CarAudioService
określa
którą grupę głośności dostosować, pobierając konteksty dźwiękowe dla dźwięku aktywnego
odtwarzaczy, a potem dostosować grupę głośności, która zawiera urządzenie wyjściowe.
powiązane z kontekstem audio o najwyższym priorytecie. Priorytet to
ustalany na podstawie ustalonej kolejności zdefiniowanej w
CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY
Zanikanie i balans
Obie wersje HAL AudioControl zawierają interfejsy API do ustawiania zanikania i balansu
w pojeździe. Odpowiednie systemowe interfejsy API dla wartości kart CarAudioManager
do interfejsu HAL AudioControl. Te interfejsy API wymagają
android.car.permission.CAR_CONTROL_AUDIO_VOLUME
Interfejsy API AudioControl to:
setBalanceTowardRight(float value)
zmienia głośność głośnika w kierunku prawej (+) lub lewej (-) strony samochodu.- 0,0 jest wyśrodkowane
- +1.0 to prawda
- -1,0 to całkowita wartość
- Wartość spoza zakresu od -1 do 1 jest błędem
setFadeTowardFront(float value)
zmienia głośność głośnika w kierunku przednim (+) lub tylną częścią samochodu.- 0,0 jest wyśrodkowane
- Przycisk +1.0 jest całkowicie do przodu
- -1,0 w całości na tył
- Wartość spoza zakresu od -1 do 1 jest błędem
Ty decydujesz, jak zastosować te wartości i jak mają być wyświetlane użytkowników. Można je stosować wyłącznie w mediach lub w całym świecie Dźwięki Androida. W Androidzie 11 wprowadzono też do stosowania efektów dźwiękowych na urządzeniach wyjściowych. Dzięki temu możesz: możesz też kontrolować poziom rozjaśnienia i balansu za pomocą efektów dźwiękowych urządzeń wyjściowych, a nie przez te interfejsy API.
Wyciszanie tła
Wyciszanie tła ma miejsce, gdy pojazd zmniejsza wzmocnienie podczas jednej transmisji, jest wyraźnie słychać dźwięk innej transmisji. W systemie AAOS wyciszanie wyciszania dźwięku jest wdrażane przez HAL. Android nie ma kontroli nad dźwiękami poza systemem operacyjnym. W Androidzie 11 główne informacje dostępne dla HAL do podejmowania decyzji dotyczących ukrywania treści, oba urządzenia mają aktywne strumienie.
Kiedy udawać
To producent OEM decyduje, w jaki sposób HAL, zalecamy stosowanie poniższych wskazówek.
Odtwarzanie wielu strumieni na Androidzie zwykle występuje, gdy 2 aplikacje lub usługi jednocześnie utrzymać skupienie dźwięku. Aby dowiedzieć się, kiedy Android może przyznawać uprawnienia równoczesne patrz tabela interakcji w sekcji Typy ograniczeń. Od wprowadzenia wtyczki do samochodowego systemu audio zależy to również od Zarządzanie audiofokusem.
Wszystkie transmisje na żywo w Androidzie są prowadzone przed wprowadzeniem jakichkolwiek korzyści. zastosowano. W związku z tym każdy strumień, który powinien zostać wyciszony podczas jednoczesnego odtwarzania. z drugim należy kierować do osobnych urządzeń wyjściowych, aby kod HAL mógł zastosuj wyciszanie przed mieszaniem.
Zalecane zachowanie wyciszania tła
Poniżej podajemy informacje o potencjalnych współbieżnych interakcjach wyciszanych.
Interakcja | Działanie |
---|---|
EMERGENCY
| Wycisza lub wycisza wszystko oprócz SAFETY
|
SAFETY |
Powoduje ukrycie wszystkiego oprócz EMERGENCY |
NAVIGATION |
Powoduje ukrycie wszystkiego oprócz SAFETY i EMERGENCY |
CALL |
Kacze wszystko oprócz SAFETY , EMERGENCY ,
i NAVIGATION |
VOICE |
Kaczki CALL_RING |
VEHICLE_SOUNDS |
To Ty określasz, jak ważny jest aktywny dźwięk i czy jest on ważny wygłupia inne dźwięki. |
MUSIC i ANNOUNCEMENT |
Nic nie szkodzi. Wyjątkiem są dźwięki interakcji przy dotknięciu odtwarzane jako
SYSTEM_SOUND
|
O czym warto pamiętać podczas wyciszania
Niektóre aplikacje i usługi, takie jak nawigacja czy asystent, mogą używać wielu w których gracze wykonują określone działania. Unikaj agresywnego wytrenowania w przypadku strumienia danych przestaje przepływać przez urządzenia wyjściowe, aby zapewnić, że nośnik nie zostanie w pełni pełny przed następnym odtworzeniem z nawigacji lub Aplikacja Asystent się uruchamia.
W pojazdach z kilkoma scenami dźwiękowymi i odpowiednią izolacją Kieruj dźwięk na różne obszary samochodu, zamiast wyciszać się. Przykład: instrukcje nawigacji można kierować na głośniki w zagłówku kierowcy, a następnie dalej odtwarzać muzykę w kabinie ze normalną głośnością.
Dźwięki zagrażające bezpieczeństwu
Wprowadzenie Androida 11
Interfejsy API HAL Audiofokus. HAL zapewnia
Dźwięki o znaczeniu krytycznym dla bezpieczeństwa mają wyższy priorytet niż inne. Jeśli HAL przechowuje dźwięk
skupienie się na USAGE_EMERGENCY
, nie ma gwarancji, że aplikacje i usługi
Android nie będzie odtwarzać dźwięków. HAL określa, które strumienie z Androida powinny
być mieszany lub wyciszony, aby odtworzyć dźwięki o znaczeniu krytycznym dla bezpieczeństwa.
Konfigurowanie interfejsu ustawień woluminu
AAOS oddziela interfejs ustawień głośności od konfiguracji grupy głośności. Można je nakładać, postępując zgodnie z instrukcjami Skonfiguruj zyski grupy woluminów. Taki podział zapewnia że w przypadku zmiany konfiguracji grup woluminów nie są wymagane żadne zmiany.
W interfejsie ustawień samochodu packages/apps/Car/Settings/res/xml/car_volume_items.xml
zawiera elementy UI (zasoby tytułu i ikon) powiązane z każdym
zdefiniowano AudioAttributes.USAGE
. Umożliwia on renderowanie
zdefiniowanej kategorii VolumeGroups
przy użyciu zasobów powiązanych z pierwszym
uznanego wykorzystania zawartego w danych VolumeGroup
.
W tym przykładzie VolumeGroup
definiuje się jako zawierające
voice_communication
i voice_communication_signalling
. Domyślny
implementacja interfejsu ustawień samochodu renderuje VolumeGroup
za pomocą
zasobów powiązanych z usługą voice_communication
, ponieważ jest to pierwsza karta
w pliku.
<carVolumeItems xmlns:car="http://schemas.android.com/apk/res-auto">
<item car:usage="voice_communication"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="voice_communication_signalling"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="media"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="game"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="alarm"
car:title="@*android:string/volume_alarm"
car:icon="@*android:drawable/ic_audio_alarm"/>
<item car:usage="assistance_navigation_guidance"
car:title="@string/navi_volume_title"
car:icon="@drawable/ic_audio_navi"/>
<item car:usage="notification_ringtone"
car:title="@*android:string/volume_ringtone"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistant"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="notification"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_request"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_instant"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_delayed"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_event"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_accessibility"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_sonification"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="unknown"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
</carVolumeItems>
Atrybuty i wartości używane w powyższej konfiguracji są zadeklarowane w
packages/apps/Car/Settings/res/values/attrs.xml
Interfejs ustawień głośności używa
te interfejsy API CarAudioManager oparte na VolumeGroup
:
getVolumeGroupCount()
, aby dowiedzieć się, ile elementów sterujących należy narysować.getGroupMinVolume()
igetGroupMaxVolume()
, aby uzyskać dolną i górną granicę.getGroupVolume()
, by otrzymać aktualny poziom głośności.registerVolumeChangeObserver()
, aby otrzymywać powiadomienia o zmianach głośności.
Zdarzenie dotyczące grupy głośności samochodu
W samochodach korzystanie z przełącznika aktualizacji i wyciszania dźwięku ma kontekst kontekstowy. podstawy, które mogą określać działania określonych aplikacji, na przykład ustawieniach. Obecna głośność i wyciszenie połączenia zwrotnego z samochodowego zestawu audio zapewniają ograniczonych informacji kontekstowych. Z myślą o lepszej obsłudze przypadków użycia i w przyszłości w branży motoryzacyjnej skalowalność, CarVolumeGroupEvent jest dodawane do Androida 14. Każde zdarzenie zawiera 3 krytyczne typy informacji:
- Lista:
CarVolumeGroupInfo
EventTypes
(mapowana bitowa)- Lista:
ExtraInfos
CarVolumeInfo
Odbiorca wywołania zwrotnego zdarzenia ma gotowy dostęp do listy samochodu, którego dotyczy problem
informacje o grupie głośności. Oznacza to, że aplikacja nie musi tworzyć żadnych
dodatkowe wywołania platformy audio w samochodzie w celu uzyskania najnowszego stanu. Może
użyj otrzymanego CarVolumeGroupInfos
, aby zaktualizować UI lub
stanów. Aby ułatwić korzystanie z aplikacji, wprowadziliśmy zmiany w głośności w samochodzie
są również częścią usługi EventTypes
, jak wyjaśniliśmy poniżej.
Typy zdarzeń
Określa, który aspekt elementu CarVolumeGroupInfo
uległ zmianie. Aplikacje mogą używać tego uprawnienia do:
zidentyfikować zmiany i podjąć wymagane działania. Przykład:
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED
oznacza, że odpowiednie wartości
Maksymalny indeks wzmocnienia woluminu (CarVolumeGroups
) uległ zmianie i może być odczytywany przez
CarVolumeGroupInfo.getMaxVolumeGainIndex()
W poniższej tabeli podano zależność między EventType
a
CarVolumeGroupInfo
Typ zdarzenia | CarVolumeInfo |
---|---|
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED | CarVolumeGroupInfo.getVolumeGainIndex() |
EVENT_TYPE_VOLUME_MIN_INDEX_CHANGED | CarVolumeGroupInfo.getMinVolumeGainIndex() |
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED | CarVolumeGroupInfo.getMaxVolumeGainIndex() |
EVENT_TYPE_MUTE_CHANGED | CarVolumeGroupInfo.ismuted() |
EVENT_TYPE_VOLUME_BLOCKED_CHANGED | CarVolumeInfo.isBlocked() |
EVENT_TYPE_ATTENUATION_CHANGED | CarVolumeGroupInfo.isAttenuated() |
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED | CarVolumeGroupInfo.getAudioAttributes() |
Dodatkowe informacje
Zawiera dodatkowe informacje o przyczynach zmiany wymiaru CarVolumeGroup
. aplikacji;
mogą wykorzystać te informacje,
aby przedstawić użytkownikowi dodatkowy kontekst
działania lub powiadomienia. Na przykład: EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL
wskazuje aktywne wyciszanie przejściowe spowodowane przeciążeniem termicznym. Aplikacja
może poinformować użytkownika o próbie zwiększenia głośności.
Nie egzekwujemy żadnych procedur w przypadku domeny ExtraInfos
. To zależy od Ciebie.
aby określić ten proces na podstawie algorytmu ExtraInfos
. Na przykład, jeśli poziom czułości
jest aktywna z powodu: EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED
, możesz też wybrać
uruchamiać interfejs paska głośności, by użytkownik nie mógł go zmienić.
Inne mogą włączyć wyświetlanie powiadomienia o aktywności wyciszania ssania i umożliwić użytkownikowi
aby zmienić głośność.
Platforma audio w samochodzie korzysta z interfejsu HAL IAudioGainCallback
AudioControl do
podaj sugerowaną wartość ExtraInfos
. Więcej informacji:
Wywołanie zwrotne wzmocnienia dźwięku.
Urządzenie CarVolumeGroupEvent
można skalować tak, aby zaspokajać przyszłe potrzeby samochodowej platformy audio. Śr
zamierza obsługiwać nowe funkcje CarVolumeGroupEvent
wyłącznie. Śr
zdecydowanie zalecamy, aby deweloperzy aplikacji używali CarVolumeGroupEvent
do obsługi
głośność grupy i zmiany wyciszenia.
Wywołanie zwrotne zdarzenia grupy głośności samochodu
Android 14 udostępnia nowe wywołanie zwrotne
, aby zarejestrować aplikacje platformy i otrzymywać powiadomienia na ten temat (CarVolumeGroupEvents
).
Aby zarejestrować się do oddzwonienia, użyj
CarAudioManager#registerCarVolumeGroupEventCallback()
Aby wyrejestrować wywołanie zwrotne, użyj
CarAudioManager#unregisterCarVolumeGroupEventCallback()
Jeśli aplikacja jest zarejestrowana w nowej wersji CarVolumeGroupEventCallback
i w starszej wersji
CarVolumeCallback
, zdarzenie CarVolumeGroupEventCallbacks
ma priorytet.
System audio w samochodzie nie uruchamia już polecenia CarVolumeCallback
. Zapobiega to
powielonych reguł dla tego samego zdarzenia w tej samej aplikacji.
Zdecydowanie zalecamy korzystanie z CarVolumeGroupEventCallback
do zarządzania
głośność grupy i zmiany wyciszenia.
Wywołanie zwrotne wzmocnienia dźwięku
Od Androida w wersji 13 kod HAL AudioControl może aktywować asynchroniczne wywołanie zwrotne do zarządzania aktualizacjami poziomu głośności z powodu zmian samochodowy system audio.
Interfejs API HAL
AudioControl @2.0 AIDL
W wersji 2.0 interfejsu AudioControl AIDL HAL dodano następujący interfejs API:
Interfejs API | Cel |
---|---|
IAudioControl#registerGainCallback |
Rejestruje instancję IAudioGainCallback w interfejsie HAL AudioControl. |
IAudioGainCallback#onAudioDeviceGainsChanged |
Asynchroniczne wywołanie zwrotne powiadamiające o zmianach w konfiguracji wzmocnienia dźwięku. |
Wywołanie zwrotne HAL AudioControl zawiera listę przyczyn i odpowiednie
AudioGainConfigInfo
, na który składają się:
- Identyfikator strefy
- Adres portu urządzenia
- Indeks woluminu > indeks może być indeksem ograniczonym lub indeksem aktualizacji.
Przyczyny można ogólnie podzielić:
- Przyczyny ograniczeń. Tymczasowa zmiana w działaniu głośności i wyciszenia.
- Przyczyny aktualizacji. Trwała zmiana w działaniu głośności.
Typy ograniczeń
Od AudioControl
HAL AIDL
V3
obsługiwane są następujące typy obsługiwanych reklam
ograniczenia:
- Wycisz
- Blokowanie
- Ograniczenie
- Uwaga
Aktywne ograniczenie | Zmiana głośności wywołanej przez użytkownika | Przełącznik ignorowania wyzwalanego przez użytkownika |
---|---|---|
Wycisz | ❌ | ❌ (wyłącz wyciszenie) ✔ (wycisz) |
Blokowanie | ❌ | ✔ |
Ograniczenie | ❌ (ponad limit) ✔ (poniżej limitu) |
✔ |
Uwaga | ✔ | ✔ |
Priorytetem między ograniczeniami jest Wycisz > Blokowanie > Ograniczenie > Uwaga.
Wycisz ograniczenia
Ograniczenia wyciszania:
Reasons.TCU_MUTE
Reasons.REMOTE_MUTE
Samochodowa platforma audio wewnętrznie zachowuje 2 stany wyciszenia:
Wyciszenie użytkownika. Przełączono na podstawie prośby użytkownika za pomocą
CarAudioManager
lub kluczowe zdarzenia.Wyciszenie HAL. Przełączono na podstawie ograniczeń wyciszania otrzymanych od
AudioGain
oddzwanianie.
Dla słuchaczy, jak np. aplikacja Ustawienia, funkcja wyciszenia grupy głośności
(CarVolumeGroupInfo.isMuted()
) będzie oparty na tym, czy jeden z
wyciszenia wyciszeń są włączone.
Po włączeniu wyciszenia HAL następuje zmiana głośności wszystkich przychodzących wiadomości i wyłączenie wyciszenia całej grupy. są ignorowane przez cały czas obowiązywania ograniczenia.
Przypadek interakcji: wyciszenie HAL jest aktywne i przełącznik próśb użytkowników o wyciszenie
Gdy wyciszenie HAL jest włączone, a wyciszenie użytkownika wyłączone:
- Ogólny stan wyciszenia grupy głośności zmieniono na
true
. - Prośby użytkowników o włączenie ignorowania będą przetwarzane.
- Przyczyna: w celu ochrony prywatności użytkowników prośby o wyciszenie powinny być zawsze uwzględniane.
Gdy włączone jest wyciszenie HAL i wyciszenie użytkownika:
Ogólny stan wyciszenia grupy głośności zmieniono na
true
.Prośby użytkowników o wyłączenie wyciszenia będą przetwarzane
NOT
. Użytkownik w pamięci podręcznej wyciszenie pozostaje włączone.Przyczyna: prośby użytkownika o wyłączenie wyciszenia są uwzględniane tylko wtedy, gdy nie ma aktywnych ograniczeń.
Przyczyna: wyłączenie wyciszenia z pamięci podręcznej może spowodować niezamierzone wybuchy dźwięku i zagrażać bezpieczeństwu użytkowników. Dzieje się tak zwłaszcza wtedy, gdy włączony jest tryb wyciszenia. w cyklach zapłonu, co obniża znajomość poziomu dźwięku punktu widzenia.
Przypadek interakcji: funkcja wyciszenia HAL włączona i wyłączona, gdy funkcja wyciszenia użytkownika nie wprowadza żadnych zmian
Przełączenie wyciszenia HAL zmieni ogólny stan wyciszenia grupy głośności. Wiąże się jednak nie mogą bezpośrednio zmieniać stanu wyciszenia użytkownika. Gdy wyciszenie użytkownika jest wyłączone, a funkcja wyciszenia HAL jest wyłączona Odebrano wywołanie zwrotne w celu włączenia:
- Ogólny stan wyciszenia grupy głośności zmieniono na
true
. Prośby użytkowników o zmianę głośności będą
NOT
przetwarzane podczas wyciszenia HAL jest włączona.Przyczyna: użytkownik nie widzi dźwięku, gdy jest włączone wyciszenie. Zezwolenie zmiana głośności może spowodować wybuch dźwięku i zagrozić bezpieczeństwu użytkownika.
Powód: aplikacje zwiększające głośność mogą rejestrować się w oddzwonieniach i uruchamiać wyłączenie wyciszenia (CarAudioManager.setVolumeGroupmute(...,/* mute=*/ true,..)) automatycznie, bez interwencji użytkownika, jeśli jest to oczekiwane zachowanie przez OEM.
Gdy wyciszenie HAL jest wyłączone, a wyciszenie użytkownika jest wyłączone:
Stan wyciszenia grupy głośności zmieniono na
false
.Przyczyna: ustawienie stanu wyciszenia na stałe i poproszenie użytkownika o wyłączenie wyciszenia może niepotrzebnie przerywać działanie użytkownika w przypadku częstego przełączania stanu wyciszenia
Prośby użytkowników o zmianę liczby będą przetwarzane normalnie.
Blokowanie
Ograniczenia blokowania:
Reasons.FORCED_MASTER_MUTE
Reasons.REMOTE_MUTE
Reasons.TCU_MUTE
.
Gdy włączone są ograniczenia blokowania, żądania od użytkowników są wysyłane na:
- Zmiany głośności nie są przetwarzane.
- Przełącznik wyciszenia został przetworzony.
Ograniczenie
Ograniczenia są następujące:
Reasons.THERMAL_LIMITATION
Reasons.SUSPEND_EXIT_VOL_LIMITATION
Gdy ograniczenia ograniczeń są aktywne, żądania od użytkowników są wysyłane do:
Zmiana głośności:
- Przetwarzane są dane w ramach ograniczenia
- Powyżej ograniczenia nie są przetwarzane
Przełącznik wyciszenia został przetworzony.
Uwaga
Ograniczenia powiadomień:
Reasons.ADAS_DUCKING
Reasons.NAV_DUCKING
Reasons.PROJECTION_DUCKING
Gdy ograniczenia powiadomień są aktywne, żądania od użytkowników są wysyłane do:
Zmiana głośności została przetworzona. Nowy bieżący poziom głośności jest ustawiony na ze zmniejszoną głośnością (a nie z wcześniejszą). Przyszłe zmiany w liczbie podejmowane na tym poziomie.
Przełączenie wyciszenia zostało przetworzone.
Zaktualizuj, aby zindeksować
Ta aktualizacja jest uznawana za asynchroniczną aktualizację indeksu woluminów:
Reasons.EXTERNAL_AMP_VOL_FEEDBACK
Z tego powodu HAL AudioControl może zaktualizować bieżący indeks grupy głośności.
do określonego indeksu. Używa się go głównie jako informacji zwrotnych z systemu audio
dla żądania zmiany głośności z samochodowej platformy audio. Aktualizacja indeksu to
komunikuje się też z Google Apps jako wywołanie zwrotne funkcji CarVolumeGroupEvent
w celu synchronizacji
indeksu.
Przykłady
Przypadek użycia: użytkownik aktualizuje indeks woluminu do 30
Użytkownik używa aplikacji Głośność, aby zmienić indeks głośności na 30.
Indeks jest konwertowany na wzmocnienie głośności i wysyłany do audio HAL.
Implementacje dostawców aplikacji
Audio HAL
otrzymują nowe informacje o zwiększeniu liczby konwersji dla systemu audio (np. zewnętrznego wzmacniacza).System audio odpowiada, że poziom głośności został zaktualizowany tylko do indeksu 15 (z przyczyn nieznanych systemowi Android).
Implementacje aktywatorów
AudioControl HAL
przez dostawcę:IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {..., 15 /* New index */})
Samochodowa usługa audio pobiera nowy indeks z wywołania zwrotnego używanego do trwałość i wywołania zwrotne do aplikacji woluminu. Indeks żądany przez użytkownika wynosi 30. Jednak sprzężenie asynchroniczne systemu audio aktualizuje indeks do 15.
Przypadek użycia: pierwsze odtworzenie dźwięku po wyłączeniu zawieszenia
Indeks woluminu przed zawieszeniem jest ustawiony na wysoki poziom 95 (zakres: [0–99]).
Android przechodzi w tryb zawieszenia.
Zawieś urządzenie (np. wznów działanie) po utworzeniu Androida:
Dostawca
Audio HAL/AudioControl HAL
stosuje bezpieczny indeks 30 do lokalnego systemu audio.Dostawca
AudioControl HAL
również wywołuje wywołanie zwrotne dla bezpiecznego indeksu:
IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {..., 30 /* safe index */})
Samochodowa usługa audio pobiera nowy indeks z wywołania zwrotnego używanego do trwałość i własne wywołania zwrotne do aplikacji woluminu synchronizującej indeks. Indeks woluminu przed zawieszeniem wynosi 95. Jednak po wznowieniu indeks ten ustawiony przez Implementator
AudioControl HAL
na bezpieczny poziom głośności 30.
Konfiguracja woluminu dynamicznego
Oto główne przypadki użycia tej funkcji:
Konfiguracja końca linii pojazdu.
Producenci samochodów wolą aktualizować konfiguracje głośności na poziomie EOL, zależnie od pojazdu konfigurację systemu audio. Zazwyczaj jest to instalacja z innego urządzenia bez aktualizowania Obraz oprogramowania Android.
W trakcie harmonogram usługi.
Konfiguracja środowiska wykonawczego. Samochodowe systemy audio obsługują zewnętrzne wzmacniacza i te moduły ECU mogą hostować zakres głośności i konfiguracje, których dotyczy zapytanie.
Konfiguracja na żądanie. Ma to na celu zaspokojenie rosnącego zapotrzebowania na funkcje audio oparte na żądaniach, w których użytkownicy subskrybują przez określony czas. Nowe konfiguracje zakresów woluminów są ważne przez cały okres subskrypcji.
Projektowanie
Dynamiczna konfiguracja woluminu odbywa się w 3 etapach:
Odkrywanie treści. Implementacja HAL AudioControl firmy wykrywa nowy wolumin. aktualizacji zakresu za pomocą niestandardowego mechanizmu IPC należącego do dostawcy.
Po wykryciu wywołanie zwrotne jest generowane przez
AudioControl::IModuleChangeCallback
Aktualizuj. System audio w samochodzie aktualizuje stany grup głośności zakresy głośności.
Staramy się utrzymać ten sam poziom głośności po aktualizacji zakresu głośności. Jeśli jednak indeks wykroczy poza granice, bieżący indeks woluminu zostanie ustawiony na bezpieczną wartość. Na przykład domyślny poziom zapewniony przez dostawcę podczas oddzwanianie.
Oddzwanianie.
Po zaktualizowaniu zakresu grupy głośności system audio w samochodzie wywołuje wywołanie zwrotne pod numer aplikacji zarejestrowanych przez
CarVolumeGroupEventCallback
.CarVolumeGroupEvent
zawiera zaktualizowanyCarVolumeGroupInfo
, typ zdarzenia (Co się zmieniło) i Dodatkowe informacje (dlaczego).
Rysunek 1. Konfiguracja woluminu dynamicznego.
Interfejs API HAL
AudioControl @ 3.0 AIDL
W wersji 3.0 interfejsu AudioControl AIDL HAL wprowadzono te interfejsy API:
Interfejs API | |
---|---|
IAudioControl#setModuleChangeCallback | Ustawia instancję IModuleChangeCallback z HAL AudioControl. |
IAudioControl#clearModuleChangeCallback | Czyści instancję IModuleChangeCallback wcześniej ustawioną za pomocą Interfejs HAL sterowania dźwiękiem. |
IModuleChangeCallback#onAudioPortsChanged | Oddzwanianie do powiadomień o zmianach w AudioPortach |
Sekwencja
Schemat sekwencji konfiguracji woluminu dynamicznego wyświetla się poniżej.
Rysunek 2. Diagram sekwencji do konfiguracji woluminu dynamicznego.
Najważniejsze aspekty
Aby zoptymalizować tę funkcję, weź pod uwagę poniższe kwestie.
Porty audio dostarczone w ramach wywołania zwrotnego muszą być zgodne z portami Automotive Definicja BUS:
- Port urządzenia.
IN_DEVICE
,OUT_DEVICE
- Połączenie.
BUS
- Adres. Zdefiniowane w definicji HAL audio
- Tryb wzmocnienia
JOINT
- Port urządzenia.
Dostawcy muszą zdefiniować nadrzędny zbiór definicji zakresów głośności w sekcji audio. zasady HAL i użyj wywołania zwrotnego, aby dostosować je do wersji pojazdów. Zobacz
IModuleChangeCallbac
Definicja AIDL, aby uzyskać więcej informacji.Jeśli do tej samej grupy głośności należy więcej niż 1 BUS audio, każda z nich musi mają identyczne definicje zakresu objętości. Jeśli tego nie zrobisz, samochód będzie mógł jeździć w samochodzie platforma audio odrzuca nową definicję zakresu głośności.