O Android 10 melhora a experiência do usuário que exige que mais de uma captura de áudio ativa aconteça simultaneamente, por exemplo, se o usuário quiser controlar uma chamada VoIP ou gravador de vídeo com comandos de voz fornecidos por um serviço de acessibilidade.
A estrutura de áudio implementa a política que permite que apenas determinados aplicativos privilegiados sejam capturados simultaneamente com aplicativos normais.
A política de simultaneidade é implementada silenciando o áudio capturado em vez de impedir que um aplicativo inicie a captura. Isso permite que a estrutura resolva dinamicamente as alterações no número e nos tipos de casos de uso de captura ativa, sem impedir que um aplicativo inicie a captura em um caso em que possa recuperar o acesso total ao microfone após a conclusão da captura de outro aplicativo.
A consequência para o HAL de áudio e o subsistema de áudio é que eles devem suportar vários fluxos de entrada ativos simultaneamente, mesmo que, em alguns casos, apenas um fluxo forneça áudio não silencioso para um cliente ativo.
Requisitos de CDD
Consulte CDD para obter os requisitos de suporte à captura simultânea.
Capture situações de áudio HAL
Um cenário de captura simultânea pode resultar em situações diferentes em termos do número de fluxos de entrada ativos, seleção de dispositivos de entrada ou configuração de pré-processamento.
A simultaneidade pode acontecer entre o seguinte:
- Vários fluxos de entrada do processador de aplicativos (AP)
- Fluxos de entrada e uma chamada de voz
- Fluxos de entrada e um DSP de áudio implementando uma detecção de hotword de baixo consumo de energia
Atividade simultânea de fluxos de entrada de AP
O arquivo de configuração de política de áudio audio_policy_configuration.xml
é usado pela estrutura de áudio para determinar quantos fluxos de entrada podem ser abertos e ativos simultaneamente.
No mínimo, o HAL de áudio deve suportar pelo menos uma instância de cada perfil de entrada ( mixPort
de role sink
) listado no arquivo de configuração aberto e ativo .
Seleção de dispositivo
Quando vários clientes ativos são anexados ao mesmo fluxo de entrada HAL, a estrutura seleciona o dispositivo apropriado para esse fluxo de entrada com base na prioridade do caso de uso.
Quando vários fluxos de entrada estão ativos, cada fluxo pode ter uma seleção de dispositivo diferente.
Se a tecnologia for compatível, é recomendado que o HAL de áudio e o subsistema permitam a captura de diferentes fluxos de diferentes dispositivos, como um fone de ouvido Bluetooth e um microfone integrado.
Se houver uma incompatibilidade (por exemplo, dois dispositivos compartilham a mesma interface de áudio digital ou back-end), o HAL de áudio deverá escolher qual fluxo controla a seleção do dispositivo.
Nesse caso:
- O estado resultante deve ser consistente e oferecer a mesma seleção de dispositivos quando o mesmo cenário for repetido.
- Quando o estado de simultaneidade terminar, o fluxo ativo restante deverá ser roteado para o dispositivo solicitado inicialmente neste fluxo.
Se uma ordem de prioridade for definida pelo HAL de áudio entre casos de uso ativos, siga a mesma ordem encontrada em source_priority()
em frameworks/av/services/audiopolicy/common/include/policy.h
Seleção de pré-processamento
A estrutura de áudio pode solicitar pré-processamento em um fluxo de entrada usando os métodos HAL addEffect()
ou removeEffect()
.
Para pré-processamento em um determinado fluxo de entrada, a estrutura de áudio habilita apenas a configuração correspondente ao caso de uso ativo de maior prioridade no fluxo de entrada. No entanto, pode haver alguma sobreposição durante a ativação e desativação do caso de uso, fazendo com que dois processos ativos simultâneos (por exemplo, duas instâncias do cancelador de eco) sejam executados no mesmo fluxo de entrada. Neste caso, a implementação HAL escolhe qual solicitação será aceita; ele monitora as solicitações ativas e restaura o estado correto quando um dos processos é desativado.
Quando vários fluxos de captura estão ativos simultaneamente, diferentes solicitações de pré-processamento podem ser executadas em diferentes fluxos.
As implementações do HAL e do subsistema de áudio devem permitir que diferentes pré-processamentos sejam aplicados a diferentes fluxos, mesmo que compartilhem o mesmo dispositivo de entrada. Ou seja, o pré-processamento deve ser aplicado após a desmultiplexação dos fluxos da fonte primária de captura.
Se isso não for possível por motivos técnicos em um determinado subsistema de áudio, o HAL de áudio deverá aplicar regras de prioridade semelhantes às listadas em Seleção de dispositivo .
Chamada de voz simultânea e captura de AP
A captura do AP pode acontecer enquanto uma chamada de voz estiver ativa. Esta situação não é nova no Android 10 e não está diretamente relacionada ao recurso de captura simultânea, mas é útil mencionar as diretrizes para este cenário.
Dois tipos diferentes de captura do AP são necessários durante uma chamada.
- Capturando caminhos RX e TX de chamadas
- Capturar de um dispositivo de entrada (por exemplo, microfone integrado)
Capturar chamadas RX e TX
A captura de RX e TX da chamada é acionada pelo uso da fonte de áudio AudioSource.VOICE_UPLINK
ou AudioSource.VOICE_DOWNLINK
e/ou dispositivo AudioDevice.IN_TELEPHONY_RX
.
HALs de áudio devem ser expostos no perfil de entrada ( mixPort
do sink
de função) com uma rota disponível do dispositivo AudioDevice.IN_TELEPHONY_RX
.
Quando uma chamada é conectada (o modo de áudio é AudioMode.IN_CALL
), deve ser possível ter pelo menos um fluxo de captura ativo do dispositivo AudioDevice.IN_TELEPHONY_RX
.
Captura de dispositivos de entrada quando uma chamada está ativa
Quando uma chamada está ativa (o modo de áudio é AudioMode.IN_CALL
), deve ser possível abrir e ativar fluxos de entrada do AP conforme especificado na seção Atividade simultânea de fluxos de entrada do AP .
Porém, a prioridade para seleção de dispositivos e pré-processamento deve sempre ser orientada pela chamada de voz caso haja conflito com as solicitações dos fluxos de entrada do AP.
Captura simultânea de DSP e AP
Quando o subsistema de áudio contém um DSP que suporta contexto de áudio de baixa potência ou funções de detecção de hotword, a implementação deve suportar captura simultânea do AP e do DSP de áudio. Isso inclui a captura pelo DSP durante a fase inicial de detecção e a captura pelo AP com AudioSource.HOTWORD
após a detecção ser acionada pelo DSP.
Isso deve ser refletido pelo sinalizador de captura simultânea relatado pelo gatilho de som HAL por meio do descritor de implementação: ISoundTriggerHw.Properties.concurrentCapture = true
.
O HAL de áudio também deve expor e inserir perfil específico para captura de hotword identificado pelo sinalizador AudioInputFlag.HW_HOTWORD
. A implementação deve suportar a abertura e ativação de um número de fluxos neste perfil pelo menos igual ao número de modelos de som que podem ser carregados simultaneamente pelo gatilho de som HAL.
A captura deste perfil de entrada deve ser possível enquanto outros perfis de entrada estiverem ativos.
Implicação para implementações do Assistant
Requisitos sobre uso de dados e notificação do usuário
Como o uso simultâneo do microfone, se abusado, pode vazar dados privados do usuário, precisamos que as seguintes condições e garantias sejam aplicadas aos aplicativos pré-carregados privilegiados que solicitam a função de assistente.
- Os dados coletados pelo microfone não devem sair do dispositivo, a menos que o usuário esteja interagindo com o Assistente. Por exemplo, após a hotword ser acionada.
- Os aplicativos que escutam simultaneamente devem fornecer dicas visuais ao usuário após a hotword ser detectada. Isso ajuda os usuários a entender que outras conversas passariam por um aplicativo diferente, como o Assistant.
- Os usuários devem poder desligar o microfone ou os gatilhos do Assistente.
- Quando as gravações de áudio são armazenadas, os usuários devem poder acessar, revisar e excluir gravações a qualquer momento.
Melhorias funcionais para Android 10
Assistentes não bloqueando uns aos outros
No Android 9 ou inferior, quando há dois assistentes sempre ativos no dispositivo, apenas um deles pode estar ouvindo sua hotword. Portanto, houve a necessidade de alternar entre os dois assistentes. No Android 10, o Assistente padrão pode ouvir simultaneamente com o outro Assistente. Isso resulta em uma experiência muito mais tranquila para usuários com ambos os assistentes.
Aplicativos que mantêm o microfone aberto
Quando aplicativos como Shazam ou Waze mantêm o microfone aberto, o Assistente padrão ainda pode ouvir a hotword.
Para aplicativos do Assistente não padrão, não há mudança de comportamento no Android 10.
Exemplo de implementação de HAL de áudio
Um exemplo de implementação HAL de áudio em conformidade com as diretrizes deste documento pode ser encontrado em AOSP .