Preferowane atrybuty miksera na urządzeniach USB

Android 14 udostępnia interfejsy API dla programistów , których aplikacje mogą używać do wysyłania zapytań i konfigurowania preferowanych atrybutów miksera na potrzeby odtwarzania dźwięku USB. Te preferowane atrybuty miksera poprawiają jakość odtwarzania dźwięku USB, umożliwiając aplikacjom ustawienie formatu audio, maski kanału, częstotliwości próbkowania i zachowania miksera. Korzystając z preferowanych interfejsów API mikserów na obsługiwanych urządzeniach USB, użytkownicy mogą odtwarzać dźwięk z mniejszym opóźnieniem i zawartość audio w wyższej rozdzielczości.

Ta funkcja zapewnia również obsługę opcjonalnego działania miksera odtwarzania bit-perfect dla urządzeń USB. Tryb bit-perfect umożliwia odtwarzanie w formacie MQA i formacie Direct Stream Digital (DSD) na kompatybilnych przetwornikach cyfrowo-analogowych (DAC).

Interfejs

Menedżer zasad audio obsługuje atrybuty miksera w środowisku. 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 framework określa zachowanie miksera, które miksuje wszystkie źródła dźwięku oraz stosuje kontrolę głośności i efekty.

Jeśli działanie miksera korzysta z trybu BIT_PERFECT , system wysyła zawartość audio bez modyfikacji przez platformę audio, HAL i opcjonalnie cyfrowy procesor sygnałowy (DSP) z interfejsu API do urządzenia USB. Tryb BIT_PERFECT obsługuje zakodowane formaty, takie jak MQA lub DSD, w przypadku których jakiekolwiek skalowanie lub miksowanie głośności może zniszczyć znaczenie danych.

Gdy aplikacje konfigurują atrybuty miksera, platforma ponownie otwiera strumień wyjściowy z nowymi atrybutami, jeśli zajdzie taka potrzeba. Poniższy rysunek przedstawia interfejs pomiędzy aplikacją, frameworkiem i warstwą HAL, gdy ustawione są atrybuty miksera:

preferred-mixer-attr

Rysunek 1. Interfejs pomiędzy aplikacją, frameworkiem i HAL.

Realizacja

Implementacja preferowanych atrybutów miksera innych niż atrybut BIT_PERFECT dla dźwięku USB jest obowiązkowa w systemie Android 14.

Preferowane atrybuty miksera

Aby obsługiwać preferowane atrybuty miksera, dostawcy muszą obsługiwać routing urządzeń USB do portu miksowania dynamicznego w następujący sposób:

  1. Zdefiniuj port miksowania dynamicznego w usb_audio_policy_configuration.xml .

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

Zobacz referencyjną implementację HAL audio USB w hardware/libhardware/modules/usbaudio . Zobacz przykład portu miksu dynamicznego w frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml .

Atrybut odtwarzania bit-perfect

Atrybut odtwarzania bit-perfect jest opcjonalny i jest obsługiwany tylko w implementacji AIDL warstwy Audio HAL. Aby obsługiwać odtwarzanie bit-perfect, dostawcy muszą dodać flagę wyjściową bit-perfect AUDIO_OUTPUT_FLAG_BIT_PERFECT do portu miksowania dynamicznego, który można skierować do urządzenia USB.

Poniższy przykładowy kod ilustruje 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ślono atrybut odtwarzania bit-perfekcyjnego, warstwa HAL musi zapewnić, że strumień audio zostanie przesłany do urządzenia USB bez żadnych modyfikacji, to znaczy 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 oraz nie należy mieszać w DSP. W tym przypadku sprzęt kontroluje głośność, ponieważ platforma nie zapewnia żadnej programowej kontroli głośności.

Walidacja

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 obsługujących formaty audio MQA i DSD poprzez modulację impulsowo-kodową (PCM).