Android 14 udostępnia interfejsy API dla deweloperów, których aplikacje mogą używać do wysyłania zapytań i konfigurowania preferowanych atrybutów miksera do odtwarzania dźwięku przez USB. Te preferowane atrybuty miksera poprawiają odtwarzanie dźwięku przez USB, umożliwiając aplikacjom ustawienie formatu dźwięku, maski kanału, częstotliwości próbkowania i zachowania miksera. Dzięki preferowanym interfejsom API miksera na obsługiwanych urządzeniach USB użytkownicy mogą uzyskać odtwarzanie dźwięku z mniejszym opóźnieniem i zawartość audio w wyższej rozdzielczości.
Ta funkcja obsługuje też opcjonalny mikser odtwarzania z zachowaniem bitów na urządzeniach USB. Tryb bit-perfect umożliwia odtwarzanie w formacie master quality authenticated (MQA) i DSD na zgodnych przetwornikach cyfrowo-analogowych (DAC).
Interfejs
Menedżer zasad dotyczących dźwięku obsługuje atrybuty miksera w ramach platformy. Klasa AudioMixerAttributes
reprezentuje atrybuty miksera. Klasa AudioMixerAttributes
zawiera obiekt AudioFormat
, który opisuje format danych audio, maskę kanału i częstotliwość próbkowania dla miksera. Domyślnie platforma określa działanie miksera, który łączy wszystkie źródła dźwięku i zachowuje głośność oraz efekty.
Jeśli zachowanie miksera używa trybu BIT_PERFECT
, system wysyła zawartość audio bez modyfikacji przez interfejs audio, HAL i opcjonalnie procesor sygnałowy (DSP), od interfejsu API do urządzenia USB. Tryb BIT_PERFECT
obsługuje kodowane formaty, takie jak MQA czy DSD, w których jakakolwiek zmiana głośności lub miksowanie może zniszczyć znaczenie danych.
Gdy aplikacje konfigurują atrybuty miksera, framework ponownie otwiera strumień wyjściowy, w razie potrzeby z nowymi atrybutami. Na rysunku poniżej widać interfejs między aplikacją, frameworkem i HAL, gdy są ustawione atrybuty miksera:
Rysunek 1. Interfejs między aplikacją, frameworkem i HAL.
Implementacja
W Androidzie 14 obowiązkowe jest wdrożenie preferowanych atrybutów miksera (z wyjątkiem atrybutu BIT_PERFECT
) dla dźwięku USB.
Preferowane atrybuty miksera
Aby obsługiwać preferowane atrybuty miksera, producenci muszą obsługiwać przekierowywanie urządzeń USB do portu dynamicznego miksowania w ten sposób:
Zdefiniuj port dynamicznego miksu w
usb_audio_policy_configuration.xml
.Zadeklaruj możliwość kierowania urządzeń USB do portów miksowania dynamicznego w konfiguracji zasad dotyczących dźwięku lub w metodach AIDL
getAudioPorts
igetAudioRoutes
.
Implementację referencyjną interfejsu HAL dźwięku USB znajdziesz w hardware/libhardware/modules/usbaudio
.
Przykład portu dynamicznego w frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml
Atrybut odtwarzania z zachowaniem bitów
Atrybut odtwarzania z zachowaniem dokładności bitowej jest opcjonalny i obsługiwany tylko w implementacji AIDL interfejsu Audio HAL. Aby obsługiwać odtwarzanie z zachowaniem bitów, dostawcy muszą dodać flagę wyjścia z zachowaniem bitów AUDIO_OUTPUT_FLAG_BIT_PERFECT
do portu miksowania dynamicznego, który może być kierowany na urządzenie USB.
Poniższy przykładowy kod pokazuje użycie flagi AUDIO_OUTPUT_FLAG_BIT_PERFECT
w funkcji usb_audio_policy_configuration.xml
:
<module name="usb" halVersion="2.0">
<mixPorts>
<mixPort name="hifi_output"
role="source" flags="AUDIO_OUTPUT_FLAG_BIT_PERFECT">
</mixPort>
</mixPorts>
<devicePorts>
<devicePort tagName="USB Device Out"
type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink">
</devicePort>
</devicePorts>
<routes>
<route type="mix" sink="USB Device Out"
sources="hifi_output"/>
</routes>
</module>
Jeśli określony jest atrybut odtwarzania z doskonałą zgodnością bitową, HAL musi zadbać o to, aby strumień audio był wysyłany do urządzenia USB bez żadnych modyfikacji, co oznacza, że strumień audio nie może być skalowany pod względem głośności, przekształcany pod kątem częstotliwości próbkowania ani poddawany efektom przetwarzania audio. Nie może też być miksowany w DSP. W tym przypadku głośność jest kontrolowana przez sprzęt, ponieważ platforma nie zapewnia żadnej kontroli głośności za pomocą oprogramowania.
Weryfikacja
Uruchom testy CTS w PreferredMixerAttributesTestActivity.java
, aby sprawdzić obsługę preferowanych atrybutów miksera w przypadku urządzeń USB.
Aby sprawdzić implementację atrybutu BIT_PERFECT
, użyj przetworników cyfrowo-analogowych USB, które obsługują formaty dźwięku MQA i DSD zamiast kodowania pulsowego (PCM).