Medir a latência de áudio

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

Medir a latência de saída

Existem diversas técnicas disponíveis para medir a latência de saída, com diversos 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ê poderá instalar o LED em um protótipo de dispositivo de fator de forma. Para uma precisão ainda melhor em dispositivos protótipos com circuitos expostos, conecte uma ponta de prova do osciloscópio diretamente ao LED para ignorar a latência do sensor de luz.

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

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

Para realizar este teste:

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

    Observação: para obter resultados úteis, é crucial usar as APIs corretas no aplicativo de teste para exercitar o caminho rápido de saída de áudio. Consulte Design para latência reduzida em segundo plano.

  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 a observação do sinal de saída da linha e o sinal do sensor de luz.

A diferença de 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 sejam ambas 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, o que é suficientemente baixo para ser ignorado.

Medir 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 é o teste de feedback de áudio (efeito Larsen). Isso fornece uma medida aproximada da latência combinada de saída e entrada, cronometrando um loop de resposta ao impulso. Este 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 valores precisos de latência de saída ou 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. Isto 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 externo, como bater com um lápis no microfone. Esse ruído gera um ciclo 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 Larsen:

  • O aplicativo de loopback Dr. Rick O'Rang é um aplicativo Android para teste de feedback de áudio. Você pode baixar o aplicativo no Google Play ou obter o código-fonte no GitHub .
  • Também publicamos um exemplo de implementação em slesTestFeedback.cpp . Este é um aplicativo de linha de comando e foi desenvolvido usando o ambiente de construção da 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 do 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 circuito uma vez e, em seguida, permitir que o circuito 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.

Medir 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 depois usar o teste de feedback de áudio (Larsen) para determinar a soma da latência de saída e da 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 dos dados de áudio.

Reduza 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.

As subexecuções de áudio, quando ocorrem, geralmente são detectáveis ​​apenas sob certas condições ou apenas nas transições. Tente sobrecarregar o sistema iniciando novos aplicativos e percorrendo rapidamente várias telas. Mas esteja ciente de que algumas condições de teste são tão estressantes que ultrapassam os objetivos do projeto. Por exemplo, obter um relatório de bug coloca uma carga tão grande no sistema que pode ser aceitável que haja uma falha nesse caso.

Ao testar subexecuções:

  • Configure qualquer DSP após o processador do aplicativo para adicionar latência mínima.
  • Execute testes sob diferentes condições, como 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 músicas relativamente calmas com as quais você esteja familiarizado e que sejam fáceis de ouvir.
  • Use fones de ouvido com fio para maior sensibilidade.
  • Faça pausas para não sentir "fadiga nos ouvidos".

Depois de encontrar as causas subjacentes de subexecuções, reduza as contagens e tamanhos de buffer para aproveitar isso. A abordagem enérgica de reduzir a contagem e o tamanho dos buffers antes de analisar as subexecuções e corrigir as causas das subexecuções 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". Apresenta 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 médio ou nominal do ciclo. Se você observar um mínimo muito baixo ou um máximo alto, isso é uma indicação de um problema, provavelmente uma latência de agendamento alta ou um tempo de desativação de interrupção. A parte final do resultado é especialmente útil, pois destaca a variabilidade além de +/- 3 desvios padrão.