Captura simultânea

O Android 10 melhora a experiência do usuário que exige que mais de uma captura de áudio ativa ocorra 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.

O framework de áudio implementa a política que permite que apenas determinados apps privilegiados capturem simultaneamente com apps normais.

A política de simultaneidade é implementada silenciando o áudio capturado em vez de impedir que um aplicativo inicie a captura. Isso permite que o framework lide dinamicamente com mudanças no número e nos tipos de casos de uso de captura ativa, sem impedir que um app inicie a captura em um caso em que ele possa recuperar o acesso total ao microfone depois que outro app terminar a captura.

A consequência para o HAL de áudio e o subsistema de áudio é que eles precisam oferecer suporte a vários streams de entrada ativos simultaneamente, mesmo que, em alguns casos, apenas um stream forneça áudio não silencioso para um cliente ativo.

Requisitos do CDD

Consulte o CDD para para suporte a captura simultânea.

Capturar situações da HAL de áudio

Um cenário de captura simultânea pode resultar em diferentes situações em termos de número de fluxos de entrada, seleção de dispositivos de entrada ou configuração de pré-processamento.

A simultaneidade pode acontecer entre:

  • Vários streams de entrada do processador do aplicativo (AP)
  • Fluxos de entrada e uma ligação
  • Streams de entrada e um DSP de áudio que implementa uma detecção de hotword de baixo consumo

Atividade simultânea de streams de entrada de AP

O arquivo de configuração da política de áudio audio_policy_configuration.xml é usado pelo framework de áudio para determinar quantos streams de entrada podem ser abertos e ativados simultaneamente.

No mínimo, a HAL de áudio precisa oferecer suporte a pelo menos uma instância de cada entrada perfil (mixPort da função sink) listado no aberto e arquivo de configuração ativo.

Seleção de dispositivo

Quando vários clientes ativos são conectados ao mesmo fluxo de entrada HAL, o framework seleciona o dispositivo apropriado para esse fluxo de entrada com base na prioridade do caso de uso.

Quando vários streams de entrada estão ativos, cada um 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 que diferentes streams sejam capturados 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 precisa escolher qual stream controla a seleção do dispositivo.

Neste caso:

  • O estado resultante precisa ser consistente e oferecer a mesma seleção de dispositivo quando o mesmo se repete.
  • Quando o estado de simultaneidade termina, o fluxo ativo restante precisa ser roteado para o dispositivo inicialmente solicitado nesse 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

O framework de áudio pode solicitar o pré-processamento em um stream de entrada usando os métodos HAL addEffect() ou removeEffect().

Para o pré-processamento em um determinado stream de entrada, a estrutura de áudio ativa a configuração correspondente ao caso de uso ativo de maior prioridade no fluxo de entrada. No entanto, pode haver sobreposição durante a ativação e desativação do caso de uso, faz 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 da HAL escolhe qual solicitação aceito; rastreia as solicitações ativas e restaura o estado correto quando processo está desativado.

Quando vários streams de captura estão ativos ao mesmo tempo, diferentes solicitações de pré-processamento podem ser executadas em streams diferentes.

As implementações da HAL e do subsistema de áudio devem permitir que diferentes pré-processamentos sejam aplicadas a diferentes streams, mesmo que compartilhem o mesmo dispositivo de entrada. Ou seja, o pré-processamento precisa ser aplicado após a demuxagem dos streams da fonte de captura principal.

Se isso não for possível por motivos técnicos em um determinado subsistema de áudio, a HAL de áudio precisará aplicar regras de prioridade semelhantes às listadas Seleção de dispositivo.

Ligação de voz e gravação simultâneas do AP

A captura do AP pode acontecer enquanto uma chamada de voz está ativa. Isso não é nova no Android 10 e não está diretamente relacionada à de captura simultânea, mas é útil mencionar as diretrizes desse cenário.

São necessários dois tipos diferentes de captura do AP durante uma chamada.

Capturar RX e TX de chamadas

A captura de RX e TX de chamadas é acionada pelo uso da fonte de áudio AudioSource.VOICE_UPLINK ou AudioSource.VOICE_DOWNLINK e/ou dispositivo AudioDevice.IN_TELEPHONY_RX

As HALs de áudio precisam ser expostas no perfil de entrada (mixPort do papel sink) com uma rota disponível do dispositivo AudioDevice.IN_TELEPHONY_RX.

Quando uma chamada é conectada (o modo de áudio é AudioMode.IN_CALL), é possível ter pelo menos um stream de captura ativo do dispositivo AudioDevice.IN_TELEPHONY_RX.

Capturar em dispositivos de entrada quando um a chamada está ativa

Quando uma chamada está ativa (o modo de áudio é AudioMode.IN_CALL), é possível abrem e ativam fluxos de entrada do AP conforme especificado na seção Atividade simultânea de streams de entrada do AP.

No entanto, a prioridade para a seleção de dispositivos e o pré-processamento sempre precisa ser orientado pela chamada de voz, caso haja um 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 compatível com contexto de áudio de baixo consumo ou detecção de hotword a implementação deve suportar captura simultânea do AP e da DSP de áudio. Isso inclui a captura pelo DSP durante a fase de detecção inicial e a captura pelo AP com AudioSource.HOTWORD após a detecção ser acionada pelo DSP.

Isso deve ser refletido pela flag de captura simultânea relatada pela HAL do gatilho de som via o descritor de implementação: ISoundTriggerHw.Properties.concurrentCapture = true.

A HAL de áudio também deve expor e inserir o perfil específico para captura de hotword identificada pelo sinalização AudioInputFlag.HW_HOTWORD. A implementação precisa oferecer suporte para abrir e ativar um número de streams neste perfil, pelo menos igual ao número de modelos de som que podem ser carregados simultaneamente pelo HAL do gatilho de som.

A captura desse perfil de entrada precisa ser possível enquanto outros perfis de entrada estão ativos.

Implicações para implementações do Google Assistente

Requisitos sobre o uso de dados e a notificação do usuário

Como o uso simultâneo do microfone pode vazar dados particulares do usuário, precisamos do seguinte: condições e garantias a serem aplicadas aos aplicativos privilegiados pré-carregados que solicitarem a manutenção do Função "Assistente".

  • Os dados coletados pelo microfone não podem sair do dispositivo, a menos que o usuário esteja interagendo com o Google Assistente. Por exemplo, depois que a hotword é acionada.
  • Os aplicativos que estão ouvindo em paralelo precisam fornecer dicas visuais ao usuário depois que o comando de ativação for detectado. Isso ajuda os usuários a entender que outras conversas passariam por uma situação diferente como o Google Assistente.
  • Os usuários precisam ter a opção de desativar o microfone ou os acionadores do Google Assistente.
  • Quando as gravações de áudio forem armazenadas, os usuários poderão acessar, revisar e excluir as gravações a qualquer momento.

Melhorias funcionais para o Android 10

Os assistentes não estão bloqueando uns aos outros

No Android 9 ou versões anteriores, quando há dois Google Assistentes sempre ativos no dispositivo, apenas um deles pode detectar a palavra de ativação. Por isso, era necessário alternar entre os dois assistentes. No Android 10, o Google Assistente padrão pode ouvir em paralelo com o outro. O resultado é uma experiência muito mais tranquila para os usuários com os dois Assistentes.

Apps que mantêm o microfone aberto

Quando apps como o Shazam ou o Waze mantêm o microfone aberto, o Google Assistente padrão ainda pode detectar a hotword.

Para apps do Google Assistente que não sã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 de HAL de áudio em conformidade com as diretrizes deste documento pode ser no AOSP.