O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Configurando Políticas de Áudio

A versão do Android 10 inclui uma refatoração significativa do gerenciador de política de áudio para fornecer mais flexibilidade para oferecer suporte a casos de uso automotivos complexos:

  • Estratégias de roteamento específicas do OEM.
  • Grupos de volumes customizáveis ​​para grupos de tipos de fluxo legado usando as mesmas curvas de volume.
  • Estratégias de roteamento declaradas pelo mecanismo de política de áudio em vez de serem codificadas.
  • Curvas de volume e grupos gerenciados pelo mecanismo de política de áudio.
  • Refatoração interna preparando para uma futura divisão entre código comum e código configurável e oferecendo gerenciamento de dispositivo de áudio mais rico. Por exemplo, o uso de todas as propriedades do dispositivo não apenas seu tipo nas regras de política.

O Android 7.0 introduziu um formato de arquivo de configuração de política de áudio (XML) para descrever sua topologia de áudio.

Versões anteriores do Android exigiam o uso de device/<company>/<device>/audio/audio_policy.conf para declarar os dispositivos de áudio presentes em seu produto (você pode ver um exemplo deste arquivo para o hardware de áudio Galaxy Nexus em device/samsung/tuna/audio/audio_policy.conf ). No entanto, CONF é um formato proprietário simples que é muito limitado para descrever topologias complexas para setores verticais como televisores e automóveis.

O Android 7.0 audio_policy.conf obsoleto e adicionou suporte para definir uma topologia de áudio usando um formato de arquivo XML que é mais legível por humanos, tem uma ampla variedade de ferramentas de edição e análise e é flexível o suficiente para descrever topologias de áudio complexas. O Android 7.0 usa o USE_XML_AUDIO_POLICY_CONF construção USE_XML_AUDIO_POLICY_CONF para escolher o formato XML dos arquivos de configuração.

Vantagens do formato XML

Como no arquivo CONF, o arquivo XML permite definir o número e os tipos de perfis de fluxo de saída e entrada, dispositivos utilizáveis ​​para reprodução e captura e atributos de áudio. Além disso, o formato XML oferece as seguintes melhorias:

  • No Android 10, mais de um aplicativo de gravação ativo é permitido simultaneamente.
    • O início da gravação nunca é rejeitado devido a uma situação de simultaneidade.
    • O retorno de chamada registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) notifica os clientes sobre as alterações do caminho de captura.
  • Nas seguintes situações, um cliente obtém amostras de áudio silenciosas:
    • Um caso de uso sensível à privacidade (por exemplo, VOICE_COMMUNICATION ) está ativo.
    • O cliente não tem um serviço de primeiro plano ou IU de primeiro plano.
    • As funções especiais são reconhecidas pela política:
      • Serviço de acessibilidade: pode gravar mesmo se um caso de uso sensível à privacidade estiver ativo.
      • Assistente: considerado sensível à privacidade se a IU estiver na parte superior.
  • Os perfis de áudio têm uma estrutura semelhante aos descritores de áudio simples HDMI, permitindo um conjunto diferente de taxas de amostragem / máscaras de canal para cada formato de áudio.
  • Existem definições explícitas para todas as conexões possíveis entre dispositivos e fluxos. Anteriormente, uma regra implícita tornava possível conectar todos os dispositivos anexados ao mesmo módulo HAL, evitando que a política de áudio controlasse as conexões solicitadas com APIs de patch de áudio. No formato XML, a descrição da topologia define as limitações de conexão.
  • O suporte para inclui evita a repetição de definições de envio padrão A2DP, USB ou redirecionamento.
  • As curvas de volume são personalizáveis. Anteriormente, as tabelas de volume eram codificadas permanentemente. No formato XML, as tabelas de volume são descritas e podem ser personalizadas.

O modelo em frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml mostra muitos desses recursos em uso.

Formato e localização do arquivo

O novo arquivo de configuração de política de áudio é audio_policy_configuration.xml e está localizado em /system/etc O exemplo abaixo mostra uma configuração simples de política de áudio no formato de arquivo XML.

A estrutura de nível superior contém módulos que correspondem a cada módulo de hardware HAL de áudio, onde cada módulo tem uma lista de portas mix, portas de dispositivo e rotas:

  • As portas de mixagem descrevem os perfis de configuração possíveis para fluxos que podem ser abertos no HAL de áudio para reprodução e captura.
  • As portas de dispositivo descrevem os dispositivos que podem ser conectados com seu tipo (e, opcionalmente, endereço e propriedades de áudio, se relevante).
  • As rotas são separadas do descritor de porta mista, permitindo a descrição das rotas de dispositivo para dispositivo ou fluxo para dispositivo.

As tabelas de volume são listas simples de pontos que definem a curva usada para traduzir de um índice de IU para um volume em dB. Um arquivo de inclusão separado fornece curvas padrão, mas cada curva para um determinado caso de uso e categoria de dispositivo pode ser substituída.

Inclusões de arquivo

O método XML Inclusions (XInclude) pode ser usado para incluir informações de configuração de política de áudio localizadas em outros arquivos XML. Todos os arquivos incluídos devem seguir a estrutura descrita acima com as seguintes restrições:

  • Os arquivos podem conter apenas elementos de nível superior.
  • Os arquivos não podem conter elementos XInclude.

O uso inclui para evitar a cópia de informações de configurações do módulo HAL de áudio do Android Open Source Project (AOSP) para todos os arquivos de configuração de política de áudio (que estão sujeitos a erros). Um arquivo XML de configuração de política de áudio padrão é fornecido para os seguintes HALs de áudio:

  • A2DP: a2dp_audio_policy_configuration.xml
  • rsubmix_audio_policy_configuration.xml submix: rsubmix_audio_policy_configuration.xml
  • USB: usb_audio_policy_configuration.xml

Organização do código da política de áudio

AudioPolicyManager.cpp é dividido em vários módulos para facilitar a manutenção e a configuração. A organização de frameworks/av/services/audiopolicy inclui os seguintes módulos.

Módulo Descrição
/managerdefault Inclui as interfaces genéricas e a implementação de comportamento comum a todos os aplicativos. Semelhante a AudioPolicyManager.cpp com a funcionalidade do mecanismo e conceitos comuns abstraídos.
/common Define classes básicas (por exemplo, estruturas de dados para perfis de fluxo de áudio de entrada e saída, descritores de dispositivo de áudio, patches de áudio e portas de áudio). Isso foi definido anteriormente em AudioPolicyManager.cpp .
/engine

Implementa as regras que definem quais dispositivos e volumes devem ser usados ​​para um determinado caso de uso. Ele implementa uma interface padrão com a parte genérica, como para obter o dispositivo apropriado para um determinado caso de uso de reprodução ou captura, ou para definir dispositivos conectados ou estado externo (ou seja, um estado de chamada de uso forçado) que pode alterar o roteamento decisão.

Disponível em duas versões: configurável e padrão . Para obter informações sobre como selecionar a versão, consulte Configuração usando o Parameter Framework .

/engineconfigurable Implementação do mecanismo de política que se baseia no Parameter Framework (veja abaixo). A configuração é baseada no Parameter Framework e onde a política é definida por arquivos XML.
/enginedefault Implementação do mecanismo de política com base em implementações anteriores do Android Audio Policy Manager. Este é o padrão e inclui regras codificadas que correspondem às implementações do Nexus e AOSP.
/service Inclui interfaces de binder, threading e implementação de bloqueio com a interface para o resto da estrutura.

Configuração usando Parameter Framework

O código da política de áudio é organizado para facilitar o entendimento e a manutenção, ao mesmo tempo que oferece suporte a uma política de áudio definida inteiramente por arquivos de configuração. A organização e o design da política de áudio são baseados no Parameter Framework da Intel, um framework baseado em plug-ins e regras para manipulação de parâmetros.

Usar a política de áudio configurável permite aos fornecedores OEMs:

  • Descreva a estrutura de um sistema e seus parâmetros em XML.
  • Escreva (em C ++) ou reutilize um backend (plugin) para acessar os parâmetros descritos.
  • Defina (em XML ou em uma linguagem específica de domínio) condições / regras nas quais um determinado parâmetro deve assumir um determinado valor.

O AOSP inclui um exemplo de arquivo de configuração de política de áudio que usa a Estrutura de Parâmetros em Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml . Para obter detalhes, consulte a documentação da Intel em Parameter Framework .

No Android 10 ou inferior, a política de áudio configurável é selecionada usando a opção de compilação USE_CONFIGURABLE_AUDIO_POLICY . No Android 11 ou superior, a versão do mecanismo de política de áudio é selecionada no arquivo audio_policy_configuration.xml . Para selecionar o mecanismo de política de áudio configurável, defina o valor do engine_library atributo do globalConfiguration elemento configurable como no exemplo a seguir:

<audioPolicyConfiguration>
    <globalConfiguration engine_library="configurable" />
...
</audioPolicyConfiguration>

APIs de roteamento de política de áudio

O Android 6.0 introduziu uma API de enumeração e seleção pública que fica no topo da infraestrutura de patch / porta de áudio e permite que os desenvolvedores de aplicativos indiquem uma preferência por uma saída ou entrada de dispositivo específica para registros ou trilhas de áudio conectadas.

No Android 7.0, a API Enumeration and Selection é verificada por testes CTS e é estendida para incluir o roteamento para fluxos de áudio C / C ++ (OpenSL ES) nativos. O encaminhamento de fluxos nativas continua a ser feito em Java, com a adição de um AudioRouting interface que substitui, combina, e despreza os métodos de encaminhamento explícitas que eram específicos para os AudioTrack e AudioRecord classes.

Para obter detalhes sobre a API Enumeration and Selection, consulte as interfaces de configuração do Android e OpenSLES_AndroidConfiguration.h . Para obter detalhes sobre o roteamento de áudio, consulte AudioRouting .

Suporte multicanal

Se o seu hardware e driver suportam áudio multicanal via HDMI, você pode transmitir o fluxo de áudio diretamente para o hardware de áudio (isso ignora o mixer AudioFlinger para que não seja mixado em dois canais). O HAL de áudio deve expor se um perfil de fluxo de saída suporta recursos de áudio multicanal. Se o HAL expõe seus recursos, o gerenciador de política padrão permite a reprodução multicanal em HDMI. Para obter detalhes de implementação, consulte device/samsung/tuna/audio/audio_hw.c .

Para especificar que seu produto contém uma saída de áudio multicanal, edite o arquivo de configuração da política de áudio para descrever a saída multicanal de seu produto. O exemplo a seguir de frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml mostra uma máscara de canal dinâmica , o que significa que o gerenciador de política de áudio consulta as máscaras de canal suportadas pelo coletor HDMI após a conexão.

Você também pode especificar uma máscara de canal estático, como AUDIO_CHANNEL_OUT_5POINT1 . O mixer do AudioFlinger faz o downmix do conteúdo para estéreo automaticamente quando enviado a um dispositivo de áudio que não oferece suporte a áudio multicanal.

Codecs de mídia

Certifique-se de que os codecs de áudio que seu hardware e drivers suportam estão devidamente declarados para o seu produto. Para obter detalhes, consulte Expondo Codecs à Estrutura .