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 um gravador de vídeo com comandos de voz fornecidos por um serviço de acessibilidade.
A estrutura de áudio implementa a política permitindo que apenas determinados aplicativos privilegiados sejam capturados simultaneamente com aplicativos regulares.
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 ele possa recuperar o acesso total ao microfone após a conclusão da captura de outro aplicativo.
A consequência para o áudio HAL e o subsistema de áudio é que eles devem suportar vários fluxos de entrada ativos simultaneamente, mesmo que em alguns casos, apenas um fluxo esteja fornecendo áudio não silencioso para um cliente ativo.
Requisitos de CDD
Consulte CDD para obter os requisitos de suporte de captura simultânea.
Capturar situações de áudio HAL
Um cenário de captura simultânea pode resultar em diferentes situações em termos de número de fluxos de entrada ativos, seleção de dispositivo 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 baixa potência
Atividade simultânea de fluxos de entrada 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, a HAL de áudio deve dar suporte a 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, é recomendável que o HAL de áudio e o subsistema permitam a captura de diferentes fluxos de diferentes dispositivos, como um fone de ouvido Bluetooth e microfone embutido.
Se houver uma incompatibilidade (por exemplo, dois dispositivos compartilham a mesma interface de áudio digital ou back-end), o HAL de áudio deve escolher qual fluxo controla a seleção do dispositivo.
Nesse caso:
- O estado resultante deve ser consistente e oferecer a mesma seleção de dispositivo quando o mesmo cenário for repetido.
- Quando o estado de simultaneidade termina, o fluxo ativo restante deve ser roteado para o dispositivo inicialmente solicitado neste fluxo.
Se uma ordem de prioridade for definida pelo áudio HAL 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 prioridade mais alta 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. Nesse caso, a implementação HAL escolhe qual solicitação é aceita; ele mantém o controle das solicitações ativas e restaura o estado correto quando um dos processos está desabilitado.
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 de HAL e de 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 desmuxação dos fluxos da fonte de captura primária.
Se não for possível por motivos técnicos em um determinado subsistema de áudio, a HAL de áudio deve aplicar regras de prioridade semelhantes às listadas em Seleção de dispositivo .
Chamada de voz simultânea e captura do AP
A captura do AP pode acontecer enquanto uma chamada de voz estiver ativa. Essa 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 esse cenário.
Dois tipos diferentes de captura do AP são necessários durante uma chamada.
- Capturando caminhos de chamada RX e TX
- Capturando de um dispositivo de entrada (por exemplo, microfone embutido)
Capturando chamadas RX e TX
A captura de chamadas RX e TX é acionada pelo uso da fonte de áudio AudioSource.VOICE_UPLINK
ou AudioSource.VOICE_DOWNLINK
e/ou dispositivo AudioDevice.IN_TELEPHONY_RX
.
Os HALs de áudio devem expor 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 concorrente de fluxos de entrada do AP .
No entanto, 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 com suporte para contexto de áudio de baixa potência ou funções de detecção de hotword, a implementação deve oferecer suporte à captura simultânea do AP e do DSP de áudio. Isso inclui captura pelo DSP durante a fase de detecção inicial e 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 acionador de som HAL por meio do descritor de implementação: ISoundTriggerHw.Properties.concurrentCapture = true
.
O áudio HAL 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 acionador 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 Assistente
Requisitos de uso de dados e notificação do usuário
Como o uso simultâneo de microfones, 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 depois que a hotword for detectada. Isso ajuda os usuários a entender que outras conversas passariam por um aplicativo diferente, como o Assistente.
- Os usuários devem poder desligar o microfone ou os acionadores do Assistente.
- Quando as gravações de áudio são armazenadas, os usuários devem ter a capacidade de acessar, revisar e excluir gravações a qualquer momento.
Melhorias funcionais para o 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. Por isso, 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 suave para usuários com ambos os Assistentes.
Apps segurando 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á alteração no comportamento do Android 10.
Exemplo de implementação de HAL de áudio
Um exemplo de implementação de HAL de áudio em conformidade com as diretrizes deste documento pode ser encontrado em AOSP .