Preferowane atrybuty miksera na urządzeniach USB

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:

preferred-mixer-attr

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:

  1. Określ port dynamicznego miksu w sekcji usb_audio_policy_configuration.xml.

  2. Zadeklaruj możliwość kierowania urządzeń USB do portów miksu dynamicznego w konfiguracji zasad audio lub w metodach AIDL getAudioPortsgetAudioRoutes.

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_PERFECTusb_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).