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:
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:
Definieren Sie den dynamischen Mix-Port in
usb_audio_policy_configuration.xml
.Deklarieren Sie die Möglichkeit, USB-Geräte an dynamische Mix-Ports weiterzuleiten, entweder in der Audiorichtlinienkonfiguration oder in den AIDL-Methoden
getAudioPorts
undgetAudioRoutes
.
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.