O Android 14 fornece APIs de desenvolvedor que os apps podem usar para consultar e configurar os atributos preferidos de mixer para playback 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 preferenciais em dispositivos USB compatíveis, os usuários podem ter reprodução de áudio com menor latência e conteúdo de áudio de maior resolução.
Esse recurso também oferece suporte ao comportamento opcional do mixer de reprodução bit-perfect para dispositivos USB. O modo bit-perfect permite a reprodução de formatos master quality authenticated (MQA) e direct stream digital (DSD) em conversores digital-analógico (DACs) 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 combina
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 pela estrutura de áudio, HAL e, opcionalmente, processador de sinal digital (DSP), da API até o dispositivo USB. O modo
BIT_PERFECT
é compatível com formatos codificados, como MQA ou DSD, em que qualquer
ajuste ou mixagem de volume pode destruir o significado dos dados.
Quando os apps configuram atributos do mixer, o framework reabre o fluxo de saída com novos atributos, se necessário. A figura a seguir mostra a interface entre o app, o framework e a HAL quando os atributos do mixer são definidos:
Figura 1. Interface entre o app, o framework e a HAL.
Implementação
A implementação de atributos de mixer preferidos, além 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 aceitar o roteamento de dispositivos USB para a porta de mixagem dinâmica, da seguinte forma:
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 de política de áudio ou nos métodos AIDL
getAudioPorts
egetAudioRoutes
.
Consulte a implementação de referência para o HAL de áudio USB em hardware/libhardware/modules/usbaudio
.
Confira um exemplo de porta de mixagem dinâmica em frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml
.
Atributo de reprodução bit-perfect
O atributo de reprodução bit-perfect é opcional e compatível apenas com a implementação AIDL da HAL de áudio. Para oferecer suporte à reprodução bit-perfect, os fornecedores precisam
adicionar a flag de saída bit-perfect 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 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 bit-perfect for especificado, o HAL vai garantir que o fluxo de áudio seja enviado ao dispositivo USB sem modificações. Ou seja, o fluxo de áudio não pode ter efeitos de escalonamento de volume, conversão de taxa de amostragem ou processamento de áudio e não pode ser mixado no DSP. Nesse caso, o hardware controla o volume porque o framework não oferece nenhum controle de volume de software.
Validação
Execute os testes do CTS em
PreferredMixerAttributesTestActivity.java
para validar a compatibilidade com atributos preferidos de mixer para dispositivos USB.
Para validar a implementação do atributo BIT_PERFECT
, use DACs USB que
aceitam MQA e DSD em formatos de áudio de modulação por código de pulso (PCM).