O Android 14 fornece APIs de desenvolvedor que os aplicativos podem usar para consultar e configurar atributos preferenciais do mixer para reprodução de áudio USB. Esses atributos preferenciais do mixer melhoram a experiência de reprodução de áudio USB, permitindo que os aplicativos definam o formato de áudio, a máscara do canal, a taxa de amostragem e o comportamento do mixer. Com o uso das APIs de mixagem preferidas em dispositivos USB suportados, os usuários podem obter reprodução de áudio com menor latência e conteúdo de áudio com maior resolução.
Este recurso também fornece suporte para o comportamento opcional do mixer de reprodução perfeito para dispositivos USB. O modo bit perfeito permite a reprodução de formatos autenticados com qualidade master (MQA) e digital de fluxo direto (DSD) em conversores digital para analógico (DACs) compatíveis.
Interface
O Audio Policy Manager lida com os atributos do mixer na estrutura. A classe AudioMixerAttributes
representa os atributos do mixer. A classe AudioMixerAttributes
inclui um objeto AudioFormat
que descreve o formato dos dados de áudio, a máscara do canal e a taxa de amostragem do mixer. Por padrão, a estrutura 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 enviará o conteúdo de áudio sem modificação através da estrutura de áudio, HAL e, opcionalmente, do processador de sinal digital (DSP), da API até o dispositivo USB. O modo BIT_PERFECT
suporta formatos codificados, como MQA ou DSD, nos quais qualquer dimensionamento ou mixagem de volume pode destruir o significado dos dados.
Quando os aplicativos configuram atributos do mixer, a estrutura reabre o fluxo de saída com novos atributos, se necessário. A figura a seguir mostra a interface entre o aplicativo, a estrutura e o HAL quando os atributos do mixer são definidos:
Figura 1. Interface entre app, framework e HAL.
Implementação
A implementação de atributos de mixer preferenciais, além do atributo BIT_PERFECT
, para áudio USB é obrigatória para Android 14.
Atributos preferidos do mixer
Para oferecer suporte aos atributos preferenciais do mixer, os fornecedores devem oferecer suporte ao roteamento de dispositivos USB para a porta de mixagem dinâmica, como segue:
Defina a porta de mixagem dinâmica em
usb_audio_policy_configuration.xml
.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
egetAudioRoutes
.
Veja a implementação de referência para o HAL de áudio USB em hardware/libhardware/modules/usbaudio
. Veja um exemplo de porta mix dinâmica em frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml
.
Atributo de reprodução perfeito
O atributo de reprodução bit-perfect é opcional e é suportado apenas na implementação AIDL do Audio HAL. Para oferecer suporte à reprodução perfeita, os fornecedores devem adicionar o sinalizador de saída perfeita AUDIO_OUTPUT_FLAG_BIT_PERFECT
à porta de mixagem dinâmica que pode ser roteada para o dispositivo USB.
O exemplo de código a seguir mostra o uso do sinalizador 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 bit-perfect for especificado, o HAL deve garantir que o fluxo de áudio seja enviado para o dispositivo USB sem qualquer modificação, ou seja, o fluxo de áudio não deve ter qualquer escala de volume, conversão de taxa de amostragem ou efeitos de processamento de áudio e não deve ser misturado no DSP. Nesse caso, o hardware controla o volume, pois a estrutura não fornece nenhum controle de volume por software.
Validação
Execute os testes CTS em PreferredMixerAttributesTestActivity.java
para validar o suporte para atributos de mixer preferenciais para dispositivos USB.
Para validar a implementação do atributo BIT_PERFECT
, use DACs USB que suportam MQA e DSD em formatos de áudio de modulação de código de pulso (PCM).