Atributos de mixer preferidos em dispositivos USB

O Android 14 fornece APIs para desenvolvedores que os apps podem usar para consultar e configurar os atributos preferidos de mixer para reprodução de áudio USB. Esses atributos de mixer preferidos melhoram a experiência de reprodução de áudio USB, permitindo que os apps definam o formato de áudio, a máscara de canal, a taxa de amostragem e o comportamento do mixer. Com o uso das APIs de mixer preferidas em dispositivos USB compatíveis, os usuários podem ter reprodução de áudio de baixa latência e conteúdo de áudio de alta resolução.

Esse recurso também oferece suporte ao comportamento opcional do mixer de reprodução de bits perfeitos para dispositivos USB. O modo de bit perfeito permite a reprodução de formatos de master de qualidade autenticada (MQA, na sigla em inglês) e de transmissão direta digital (DSD, na sigla em inglês) em conversores digitais para analógicos (DACs, na sigla em inglês) compatíveis.

Interface

O Gerenciador de políticas de áudio processa os atributos do mixer no framework. A classe AudioMixerAttributes representa os atributos do mixer. A classe AudioMixerAttributes inclui um objeto AudioFormat que descreve o formato de dados de áudio, a máscara de canal e a taxa de amostragem do mixer. Por padrão, o framework determina o comportamento do mixer, que mistura todas as fontes de áudio e aplica controle de volume e efeitos.

Se o comportamento do mixer usar o modo BIT_PERFECT, o sistema vai enviar o conteúdo de áudio sem modificações usando o framework de áudio, o HAL e, opcionalmente, o processador de sinal digital (DSP), da API para o dispositivo USB. O modo BIT_PERFECT oferece suporte a formatos codificados, como MQA ou DSD, em que qualquer escala de volume ou mixagem pode destruir o significado dos dados.

Quando os apps configuram atributos do mixer, o framework reabre o stream de saída com novos atributos, se necessário. A figura a seguir mostra a interface entre o app, o framework e o HAL quando os atributos do mixer são definidos:

preferred-mixer-attr

Figura 1. Interface entre o app, o framework e o HAL.

Implementação

A implementação de atributos de mixer preferidos, com exceção do atributo BIT_PERFECT, para áudio USB é obrigatória no Android 14.

Atributos de mixer preferidos

Para oferecer suporte aos atributos de mixer preferidos, os fornecedores precisam oferecer suporte ao roteamento de dispositivos USB para a porta de mixagem dinâmica, conforme abaixo:

  1. Defina a porta de mixagem dinâmica em usb_audio_policy_configuration.xml.

  2. Declare a capacidade de rotear dispositivos USB para portas de mixagem dinâmica na configuração da política de áudio ou nos métodos AIDL getAudioPorts e getAudioRoutes.

Consulte a implementação de referência para o HAL de áudio USB em hardware/libhardware/modules/usbaudio. Confira um exemplo de porta de mix dinâmico em frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml.

Atributo de reprodução com bit perfeito

O atributo de reprodução perfeita é opcional e tem suporte apenas na implementação AIDL do HAL de áudio. Para oferecer suporte à reprodução com perfeição de bits, os fornecedores precisam adicionar a flag de saída com perfeição de bits AUDIO_OUTPUT_FLAG_BIT_PERFECT à porta de mixagem dinâmica que pode ser roteada para o dispositivo USB.

O exemplo de código abaixo mostra o uso da flag AUDIO_OUTPUT_FLAG_BIT_PERFECT em 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 o atributo de reprodução de bit perfeito for especificado, o HAL precisa garantir que o stream de áudio seja enviado ao dispositivo USB sem nenhuma modificação. Ou seja, o stream de áudio não pode ter nenhuma escala de volume, conversão de taxa de amostragem ou efeitos de processamento de áudio e não pode ser misturado no DSP. Nesse caso, o hardware controla o volume, já que o framework não oferece nenhum controle de volume de software.

Validação

Execute os testes do CTS em PreferredMixerAttributesTestActivity.java para validar o suporte a atributos de mixer preferidos para dispositivos USB.

Para validar a implementação do atributo BIT_PERFECT, use DACs USB que ofereçam suporte a MQA e DSD em formatos de áudio de modulação por código de pulsos (PCM, na sigla em inglês).