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

Medindo a latência de áudio

Esta página descreve métodos comuns para medir a latência de entrada e saída.

Medindo a latência de saída

Existem várias técnicas disponíveis para medir a latência de saída, com vários graus de precisão e facilidade de execução, descritas a seguir. Consulte também o circuito de teste para obter um exemplo de ambiente de teste.

Teste de LED e osciloscópio

Este teste mede a latência em relação ao indicador LED do dispositivo. Se o seu dispositivo de produção não tiver um LED, você pode instalar o LED em um dispositivo de fator de forma protótipo. Para uma precisão ainda melhor em dispositivos protótipo com circuito exposto, conecte uma ponta de prova do osciloscópio ao LED diretamente para contornar a latência do sensor de luz.

Se você não puder instalar um LED em seu dispositivo de produção ou protótipo, tente as seguintes soluções alternativas:

  • Use um pino de entrada / saída de uso geral (GPIO) para o mesmo propósito.
  • Use JTAG ou outra porta de depuração.
  • Use a luz de fundo da tela. Isso pode ser arriscado, pois a luz de fundo pode ter uma latência não desprezível e pode contribuir para uma leitura de latência imprecisa.

Para realizar este teste:

  1. Execute um aplicativo que pulsa periodicamente o LED ao mesmo tempo em que produz áudio.

    Nota: Para obter resultados úteis, é crucial usar as APIs corretas no aplicativo de teste para que você esteja exercitando o caminho de saída de áudio rápido. Consulte Projeto para latência reduzida para obter o plano de fundo.

  2. Coloque um sensor de luz próximo ao LED.
  3. Conecte as pontas de prova de um osciloscópio de canal duplo ao conector de fone de ouvido com fio (saída de linha) e ao sensor de luz.
  4. Use o osciloscópio para medir a diferença de tempo entre observar o sinal de saída da linha e o sinal do sensor de luz.

A diferença no tempo é a latência aproximada da saída de áudio, assumindo que a latência do LED e a latência do sensor de luz são zero. Normalmente, o LED e o sensor de luz têm, cada um, uma latência relativamente baixa da ordem de um milissegundo ou menos, que é suficientemente baixa para ser ignorada.

Medindo a latência de ida e volta

A latência de ida e volta é a soma da latência de saída e da latência de entrada.

Teste de Larsen

Um dos testes de latência mais fáceis é um teste de feedback de áudio (efeito Larsen). Isso fornece uma medida bruta da latência combinada de saída e entrada cronometrando um loop de resposta ao impulso. Esse teste não é muito útil para análises detalhadas por si só devido à natureza do teste, mas pode ser útil para calibrar outros testes e para estabelecer um limite superior.

Este método não divide os tempos dos componentes, o que é importante quando a latência de saída e a latência de entrada são independentes. Portanto, este método não é recomendado para medir a latência de saída precisa ou valores de latência de entrada isoladamente, mas pode ser útil para estabelecer estimativas aproximadas.

A latência de saída para o alto-falante do dispositivo pode ser significativamente maior do que a latência de saída para o conector do fone de ouvido. Isso se deve à correção e proteção do alto-falante.

Para realizar este teste:

  1. Execute um aplicativo que capture áudio do microfone e reproduza imediatamente os dados capturados no alto-falante.
  2. Crie um som externamente, como tocar um lápis perto do microfone. Este ruído gera um loop de feedback. Alternativamente, pode-se injetar um impulso no loop usando software.
  3. Meça o tempo entre os pulsos de feedback para obter a soma da latência de saída, latência de entrada e sobrecarga do aplicativo.

Aqui estão alguns recursos para obter um aplicativo para o teste de Larsen:

  • O aplicativo loopback Dr. Rick O'Rang é um aplicativo Android para teste de feedback de áudio. Você pode baixar o aplicativo do Google Play ou obter o código-fonte do GitHub .
  • Também publicamos um exemplo de implementação em slesTestFeedback.cpp . Este é um aplicativo de linha de comando e é construído usando o ambiente de construção de plataforma; no entanto, deve ser simples adotar o código para outros ambientes. Você também precisará do código FIFO sem bloqueio localizado na biblioteca audio_utils .

Dongle de loopback de áudio

O dongle de loopback de áudio Dr. Rick O'Rang é útil para medir a latência de ida e volta no conector do fone de ouvido. A imagem abaixo demonstra o resultado de injetar um impulso no loop uma vez e, em seguida, permitir que o loop de feedback oscile. O período das oscilações é a latência de ida e volta. O dispositivo específico, a versão do software e as condições de teste não são especificados aqui. Os resultados apresentados não devem ser extrapolados.

medição de ida e volta

Figura 1. Medição de ida e volta

Pode ser necessário remover o cabo USB para reduzir o ruído e ajustar o nível de volume para obter uma oscilação estável.

Medindo a latência de entrada

A latência de entrada é mais difícil de medir do que a latência de saída. Os testes a seguir podem ajudar.

Uma abordagem é primeiro determinar a latência de saída usando o método LED e osciloscópio e, em seguida, usar o teste de feedback de áudio (Larsen) para determinar a soma da latência de saída e latência de entrada. A diferença entre essas duas medidas é a latência de entrada.

Outra técnica é usar um pino GPIO em um dispositivo protótipo. Externamente, pulse uma entrada GPIO ao mesmo tempo em que apresenta um sinal de áudio ao dispositivo. Execute um aplicativo que compare a diferença nos tempos de chegada do sinal GPIO e os dados de áudio.

Reduzindo a latência

Para obter baixa latência de áudio, preste atenção especial em todo o sistema ao agendamento, tratamento de interrupções, gerenciamento de energia e design de driver de dispositivo. Seu objetivo é evitar que qualquer parte da plataforma bloqueie um thread de áudio SCHED_FIFO por mais de alguns milissegundos. Ao adotar essa abordagem sistemática, você pode reduzir a latência de áudio e obter o benefício colateral de um desempenho geral mais previsível.

Os underruns de áudio, quando ocorrem, geralmente são detectáveis ​​apenas sob certas condições ou apenas nas transições. Tente estressar o sistema iniciando novos aplicativos e percorrendo rapidamente vários monitores. Mas esteja ciente de que algumas condições de teste são tão estressantes que vão além dos objetivos do projeto. Por exemplo, obter um relatório de bug coloca uma carga tão grande no sistema que pode ser aceitável ter um underrun nesse caso.

Ao testar para underruns:

  • Configure qualquer DSP após o processador do aplicativo para que adicione latência mínima.
  • Execute testes em diferentes condições, como ter a tela ligada ou desligada, USB conectado ou desconectado, WiFi ligado ou desligado, Bluetooth ligado ou desligado e telefonia e rádios de dados ligados ou desligados.
  • Selecione uma música relativamente baixa com a qual você esteja familiarizado e que seja fácil de ouvir.
  • Use fones de ouvido com fio para sensibilidade extra.
  • Dê a si mesmo pausas para não sentir "fadiga de ouvido".

Depois de encontrar as causas subjacentes dos subexecuções, reduza as contagens e os tamanhos do buffer para tirar proveito disso. A abordagem ávida de reduzir contagens e tamanhos de buffer antes de analisar underruns e corrigir as causas de underruns só resulta em frustração.

Ferramentas

systrace é uma excelente ferramenta de uso geral para diagnosticar falhas de desempenho no nível do sistema.

A saída de dumpsys media.audio_flinger também contém uma seção útil chamada "estatísticas de movimentação simples". Ele contém um resumo da variabilidade dos tempos decorridos para cada mixagem de áudio e ciclo de E / S. Idealmente, todas as medições de tempo devem ser aproximadamente iguais ao tempo de ciclo médio ou nominal. Se você vir um mínimo muito baixo ou máximo alto, isso é uma indicação de um problema, provavelmente uma alta latência de agendamento ou tempo de desabilitação de interrupção. A parte final da saída é especialmente útil, pois destaca a variabilidade além de +/- 3 desvios padrão.