Attributi del mixer preferiti sui dispositivi USB

Android 14 fornisce API per sviluppatori che le app possono utilizzare per eseguire query e configurare gli attributi del mixer preferiti per la riproduzione audio su USB. Questi attributi del mixer preferiti migliorano l'esperienza di riproduzione audio USB consentendo alle app di impostare il formato audio, la maschera del canale, la frequenza di campionamento e il comportamento del mixer. Con l'utilizzo delle API di mixer preferite sui dispositivi USB supportati, gli utenti possono usufruire di una riproduzione audio con latenza inferiore e di contenuti audio con risoluzione più elevata.

Questa funzionalità supporta anche il comportamento facoltativo del mixer di riproduzione con precisione a bit per i dispositivi USB. La modalità bit-perfect consente la riproduzione dei formati MQA (Master Quality Authenticated) e DSD (Direct Stream Digital) su DAC (convertitori da digitale ad analogico) compatibili.

Interfaccia

Audio Policy Manager gestisce gli attributi del mixer nel framework. La classe AudioMixerAttributes rappresenta gli attributi del mixer. La classe AudioMixerAttributes include un oggetto AudioFormat che descrive il formato dei dati audio, la maschera dei canali e la frequenza di campionamento per il mixer. Per impostazione predefinita, il framework determina il comportamento del mixer, che combina tutte le sorgenti audio e applica il controllo del volume e gli effetti.

Se il comportamento del mixer utilizza la modalità BIT_PERFECT, il sistema invia i contenuti audio senza modifiche tramite il framework audio, HAL e, facoltativamente, il processore di segnale digitale (DSP), dall'API al dispositivo USB. La modalità BIT_PERFECT supporta i formati codificati, come MQA o DSD, su cui qualsiasi scalatura o miscelazione del volume può distruggere il significato dei dati.

Quando le app configurano gli attributi del mixer, il framework riapre lo stream di output con nuovi attributi, se necessario. La figura seguente mostra l'interfaccia tra l'app, il framework e l'HAL quando sono impostati gli attributi del mixer:

preferred-mixer-attr

Figura 1. Interfaccia tra l'app, il framework e l'HAL.

Implementazione

L'implementazione degli attributi del mixer preferiti, diversi dall'attributo BIT_PERFECT, per l'audio USB è obbligatoria per Android 14.

Attributi del mixer preferiti

Per supportare gli attributi del mixer preferiti, i fornitori devono supportare il routing dei dispositivi USB alla porta di mixaggio dinamico, come segue:

  1. Definisci la porta del mix dinamico in usb_audio_policy_configuration.xml.

  2. Dichiara la possibilità di instradare i dispositivi USB alle porte di mixaggio dinamico nella configurazione dei criteri audio o nei metodi AIDL getAudioPorts e getAudioRoutes.

Consulta l'implementazione di riferimento per l'HAL audio USB in hardware/libhardware/modules/usbaudio. Vedi un esempio di porta di mix dinamico in frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml.

Attributo Riproduzione bit-perfect

L'attributo di riproduzione bit-perfect è facoltativo ed è supportato solo nell'implementazione AIDL dell'HAL audio. Per supportare la riproduzione bit-perfect, i fornitori devono aggiungere il flag di output bit-perfect AUDIO_OUTPUT_FLAG_BIT_PERFECT alla porta di mix dinamico che può essere inoltrata al dispositivo USB.

Il seguente esempio di codice mostra l'utilizzo del flag 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>

Se viene specificato l'attributo di riproduzione bit-perfect, l'HAL deve assicurarsi che lo stream audio venga inviato al dispositivo USB senza alcuna modifica, ovvero che lo stream audio non abbia alcuna regolazione del volume, conversione della frequenza di campionamento o effetti di elaborazione audio e non debba essere mixato nel DSP. In questo caso, il volume viene controllato dall'hardware perché il framework non fornisce alcun controllo del volume software.

Convalida

Esegui i test CTS in PreferredMixerAttributesTestActivity.java per convalidare il supporto degli attributi del mixer preferiti per i dispositivi USB.

Per convalidare l'implementazione dell'attributo BIT_PERFECT, utilizza DAC USB che supportano MQA e DSD tramite formati audio PCM (Pulse Code Modulation).