Zarządzanie woluminami

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.

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.
MUSICANNOUNCEMENT 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() i getGroupMaxVolume(), 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:

  1. 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.

  2. 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.

  3. 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 zaktualizowany CarVolumeGroupInfo, typ zdarzenia (Co się zmieniło) i Dodatkowe informacje (dlaczego).

obraz

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.

obraz

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
  • 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.