Android 14 udostępnia interfejsy API dla deweloperów, z których aplikacje mogą korzystać, aby wysyłać zapytania i konfigurować preferowane atrybuty miksera do odtwarzania dźwięku przez USB. Te preferowane atrybuty miksera poprawiają odtwarzanie dźwięku przez USB, ponieważ umożliwiają aplikacjom ustawianie formatu dźwięku, maski kanału, częstotliwości próbkowania i zachowania miksera. Dzięki użyciu preferowanych interfejsów API miksera na obsługiwanych urządzeniach USB użytkownicy mogą uzyskać odtwarzanie dźwięku z mniejszym opóźnieniem i treści audio o wyższej rozdzielczości.
Ta funkcja obsługuje też opcjonalne zachowanie miksera odtwarzania bez utraty jakości w przypadku urządzeń USB. Tryb bit-perfect umożliwia odtwarzanie w jakości master uwierzytelnionych formatów MQA (Master Quality Authenticated) i DSD (Direct Stream Digital) na kompatybilnych przetwornikach cyfrowo-analogowych (DAC).
Interfejs
Menedżer zasad audio 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 miksera. Domyślnie platforma określa działanie miksera, który miksuje wszystkie źródła dźwięku i stosuje regulację głośności oraz efekty.
Jeśli mikser działa w trybie BIT_PERFECT
, system wysyła treści audio bez modyfikacji przez platformę audio, HAL i opcjonalnie procesor sygnałowy (DSP) z interfejsu API do urządzenia USB. Tryb BIT_PERFECT
obsługuje formaty zakodowane, takie jak MQA czy DSD, w przypadku których skalowanie głośności lub miksowanie może zniszczyć znaczenie danych.
Gdy aplikacje konfigurują atrybuty miksera, w razie potrzeby framework ponownie otwiera strumień wyjściowy z nowymi atrybutami. Na poniższym rysunku przedstawiono interfejs między aplikacją, platformą i warstwą HAL po ustawieniu atrybutów miksera:
Rysunek 1. Interfejs między aplikacją, platformą i warstwą HAL.
Implementacja
Implementacja preferowanych atrybutów miksera innych niż atrybut BIT_PERFECT
w przypadku dźwięku USB jest obowiązkowa w Androidzie 14.
Preferowane atrybuty miksera
Aby obsługiwać atrybuty preferowanego miksera, dostawcy muszą obsługiwać kierowanie urządzeń USB do dynamicznego portu miksowania w ten sposób:
Określ port dynamicznego miksu w sekcji
usb_audio_policy_configuration.xml
.Zadeklaruj możliwość kierowania urządzeń USB do portów miksu dynamicznego w konfiguracji zasad audio lub w metodach AIDL
getAudioPorts
igetAudioRoutes
.
Zobacz implementację referencyjną interfejsu HAL audio USB w sekcji hardware/libhardware/modules/usbaudio
.
Przykład portu dynamicznego miksu znajdziesz w sekcji frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml
.
Atrybut odtwarzania bez utraty jakości
Atrybut odtwarzania bezstratnego jest opcjonalny i obsługiwany tylko w implementacji AIDL interfejsu HAL audio. Aby obsługiwać odtwarzanie bez utraty jakości, dostawcy muszą dodać flagę wyjścia bez utraty jakości AUDIO_OUTPUT_FLAG_BIT_PERFECT
do portu miksowania dynamicznego, który można przekierować do urządzenia USB.
Poniższy przykładowy kod pokazuje użycie flagi AUDIO_OUTPUT_FLAG_BIT_PERFECT
w 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 bezstratnego, HAL musi zapewnić, że strumień audio jest wysyłany do urządzenia USB bez żadnych modyfikacji, tzn. strumień audio nie może mieć żadnego skalowania głośności, konwersji częstotliwości próbkowania ani efektów przetwarzania dźwięku i nie może być miksowany w DSP. W takim 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 dla urządzeń USB.
Aby sprawdzić implementację atrybutu BIT_PERFECT
, użyj przetworników cyfrowo-analogowych USB, które obsługują formaty audio MQA i DSD w modulacji impulsowo-kodowej (PCM).