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

Há várias técnicas disponíveis para medir a latência de saída, com diferentes graus de precisão e facilidade de execução, descritos abaixo. Consulte também o Circuito de teste para conferir um exemplo de ambiente de teste.

Teste de LED e osciloscópio

Esse teste mede a latência em relação ao indicador LED do dispositivo. Se o dispositivo de produção não tiver um LED, instale-o em um dispositivo de formato de protótipo. Para uma precisão ainda maior em dispositivos protótipos com circuitos expostos, conecte uma sonda de osciloscópio ao LED diretamente para contornar a latência do sensor de luz.

Se não for possível instalar um LED no 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, já que o backlight pode ter uma latência não desprezível e contribuir para uma leitura de latência imprecisa.

Para realizar este teste:

  1. Execute um app que pulsa o LED periodicamente ao mesmo tempo em que ele gera áudio.

    Observação:para obter resultados úteis, é fundamental usar as APIs corretas no app de teste para que você esteja testando o caminho de saída de áudio rápido. Consulte Design para redução de latência para saber mais.

  2. Coloque um sensor de luz ao lado do LED.
  3. Conecte as sondas de um osciloscópio de dois canais à entrada 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 em comparação com o sinal do sensor de luz.

A diferença de tempo é a latência aproximada da saída de áudio, presumindo que a latência do LED e do sensor de luz sejam zero. Normalmente, o LED e o sensor de luz têm uma latência relativamente baixa na 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 de feedback de áudio (efeito Larsen). Isso fornece uma medida aproximada da latência combinada de saída e entrada ao cronometrar um loop de resposta de impulso. Esse teste não é muito útil para análises detalhadas por conta da natureza do teste, mas pode ser útil para calibrar outros testes e estabelecer um limite máximo.

Esse 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, esse método não é recomendado para medir valores de latência de saída ou de entrada precisos isoladamente, mas pode ser útil para estabelecer estimativas aproximadas.

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

Para realizar este teste:

  1. Executar um app que capture áudio do microfone e reproduza imediatamente os dados capturados pelo alto-falante.
  2. Crie um som externamente, como tocar um lápis perto do microfone. Esse ruído gera um loop de feedback. Como alternativa, é possível injetar um impulso no loop usando software.
  3. Meça o tempo entre os pulsos de feedback para saber a soma da latência de saída, da latência de entrada e da sobrecarga do aplicativo.

Confira alguns recursos para conseguir um app para o teste de Larsen:

Dongle de loopback de áudio

O dongle de retorno de loop 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 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 mostrados não devem ser extrapolados.

medição de ida e volta

Figura 1. Medição de ida e volta

Talvez seja necessário remover o cabo USB para reduzir o ruído e ajustar o nível de volume para ter 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 é determinar primeiro a latência de saída usando o método de 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 da latência de entrada. A diferença entre essas duas medições é a latência de entrada.

Outra técnica é usar um pino GPIO em um dispositivo de protótipo. Externamente, envie uma entrada GPIO ao mesmo tempo em que você apresenta um sinal de áudio para o dispositivo. Execute um app que compare a diferença nos tempos de chegada do sinal GPIO e dos dados de áudio.

Reduzir a latência

Para alcançar uma baixa latência de áudio, preste atenção especial em todo o sistema à programação, ao processamento de interrupção, ao gerenciamento de energia e ao design do driver do dispositivo. Seu objetivo é impedir que qualquer parte da plataforma bloqueie uma linha de execução de áudio SCHED_FIFO por mais de alguns milissegundos. Ao adotar essa abordagem sistemática, você pode reduzir a latência de áudio e ter o benefício adicional de um desempenho mais previsível no geral.

Os underruns de áudio, quando ocorrem, geralmente são detectáveis apenas em determinadas condições ou apenas nas transições. Tente estressar o sistema iniciando novos apps e rolando rapidamente por várias telas. No entanto, tenha em mente que algumas condições de teste são tão estressantes que estão além das metas de design. Por exemplo, a geração de um bugreport 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 de apps para que ele adicione a latência mínima.
  • Execute testes em diferentes condições, como com a tela ligada ou desligada, com o USB conectado ou desconectado, com o Wi-Fi ativado ou desativado, com o Bluetooth ativado ou desativado e com a telefonia e os rádios de dados ativados ou desativados.
  • Selecione músicas relativamente silenciosas que você conhece bem e que sejam fáceis de ouvir.
  • Use fones de ouvido com fio para ter mais sensibilidade.
  • Faça pausas para não ter "fadiga auditiva".

Depois de encontrar as causas subjacentes de underruns, reduza as contagens e os tamanhos de buffer para aproveitar isso. A abordagem ansiosa de reduzir contagens e tamanhos de buffer antes de analisar underruns e corrigir as causas deles só resulta em frustração.

Ferramentas

O 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 móveis simples". Ele tem um resumo da variabilidade dos tempos decorridos para cada mix de áudio e ciclo de E/S. O ideal é que todas as medições de tempo sejam aproximadamente iguais ao tempo médio ou nominal do ciclo. Se o mínimo for muito baixo ou o máximo muito alto, isso indica um problema, provavelmente uma latência de programação alta ou um tempo de desativação de interrupção. A parte cauda da saída é especialmente útil, porque destaca a variabilidade além de +/- 3 desvios padrão.