Bevorzugte Mixer-Attribute auf USB-Geräten

Android 14 stellt Entwickler-APIs bereit, mit denen Apps bevorzugte Mixer-Attribute für die USB-Audiowiedergabe abfragen und konfigurieren können. Diese bevorzugten Mixer-Attribute verbessern das USB-Audiowiedergabeerlebnis, indem Apps das Audioformat, die Kanalmaske, die Abtastrate und das Mixer-Verhalten festlegen können. Durch die Verwendung der bevorzugten Mixer-APIs auf unterstützten USB-Geräten können Benutzer Audiowiedergabe mit geringerer Latenz und Audioinhalte mit höherer Auflösung erhalten.

Diese Funktion bietet auch Unterstützung für das optionale bitperfekte Wiedergabemixerverhalten für USB-Geräte. Der bitperfekte Modus ermöglicht die Wiedergabe von Master Quality Authenticated (MQA) und Direct Stream Digital (DSD)-Formaten auf kompatiblen Digital-Analog-Wandlern (DACs).

Schnittstelle

Der Audio Policy Manager verwaltet die Mixer-Attribute im Framework. Die AudioMixerAttributes Klasse stellt die Attribute des Mixers dar. Die AudioMixerAttributes Klasse enthält ein AudioFormat Objekt, das das Audiodatenformat, die Kanalmaske und die Abtastrate für den Mixer beschreibt. Standardmäßig bestimmt das Framework das Mixerverhalten, das alle Audioquellen mischt und Lautstärkeregelung und Effekte anwendet.

Wenn das Mixer-Verhalten den BIT_PERFECT Modus verwendet, sendet das System den Audioinhalt ohne Änderung über das Audio-Framework, HAL und optional den digitalen Signalprozessor (DSP) von der API bis hinunter zum USB-Gerät. Der BIT_PERFECT Modus unterstützt codierte Formate wie MQA oder DSD, bei denen jede Volumenskalierung oder -mischung die Bedeutung der Daten zerstören kann.

Wenn Apps Mixer-Attribute konfigurieren, öffnet das Framework den Ausgabestream bei Bedarf erneut mit neuen Attributen. Die folgende Abbildung zeigt die Schnittstelle zwischen der App, dem Framework und dem HAL, wenn Mixer-Attribute festgelegt sind:

preferred-mixer-attr

Abbildung 1. Schnittstelle zwischen App, Framework und HAL.

Implementierung

Die Implementierung bevorzugter Mixer-Attribute außer dem BIT_PERFECT Attribut für USB-Audio ist für Android 14 obligatorisch.

Bevorzugte Mixer-Attribute

Um bevorzugte Mixer-Attribute zu unterstützen, müssen Anbieter die Weiterleitung von USB-Geräten an den dynamischen Mix-Port wie folgt unterstützen:

  1. Definieren Sie den dynamischen Mix-Port in usb_audio_policy_configuration.xml .

  2. Deklarieren Sie die Möglichkeit, USB-Geräte an dynamische Mix-Ports weiterzuleiten, entweder in der Audiorichtlinienkonfiguration oder in den AIDL-Methoden getAudioPorts und getAudioRoutes .

Sehen Sie sich die Referenzimplementierung für die USB-Audio-HAL unter hardware/libhardware/modules/usbaudio an. Ein Beispiel für einen dynamischen Mix-Port finden Sie in frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml .

Bitperfektes Wiedergabeattribut

Das bitperfekte Wiedergabeattribut ist optional und wird nur in der AIDL-Implementierung von Audio HAL unterstützt. Um die bitperfekte Wiedergabe zu unterstützen, müssen Anbieter das bitperfekte Ausgabeflag AUDIO_OUTPUT_FLAG_BIT_PERFECT zum dynamischen Mix-Port hinzufügen, der an das USB-Gerät weitergeleitet werden kann.

Das folgende Codebeispiel zeigt die Verwendung des Flags AUDIO_OUTPUT_FLAG_BIT_PERFECT in 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>

Wenn das bitperfekte Wiedergabeattribut angegeben ist, muss der HAL sicherstellen, dass der Audiostream ohne Änderungen an das USB-Gerät gesendet wird, d. h. der Audiostream darf keine Lautstärkeskalierung, Abtastratenkonvertierung oder Audioverarbeitungseffekte aufweisen dürfen nicht im DSP gemischt werden. In diesem Fall steuert die Hardware die Lautstärke, da das Framework keine Software-Lautstärkeregelung bietet.

Validierung

Führen Sie die CTS-Tests in PreferredMixerAttributesTestActivity.java aus, um die Unterstützung für bevorzugte Mixer-Attribute für USB-Geräte zu validieren.

Um die Implementierung des BIT_PERFECT Attributs zu validieren, verwenden Sie USB-DACs, die MQA und DSD über PCM-Audioformate (Pulse-Code-Modulation) unterstützen.