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:
- 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.
- Coloque um sensor de luz ao lado do LED.
- 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.
- 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:
- Executar um app que capture áudio do microfone e reproduza imediatamente os dados capturados pelo alto-falante.
- 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.
- 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:
- O app de loopback Dr. Rick O'Rang é um app Android para testes de retorno de áudio. Você pode fazer o download do app no Google Play ou receber o código-fonte do GitHub.
-
Também publicamos um exemplo de implementação em
slesTestFeedback.cpp.
Esse é um app de linha de comando e é criado usando o ambiente de build da plataforma.
No entanto, é simples adotar o código para outros ambientes.
Você também vai precisar do código FIFO não de bloqueio
localizado na biblioteca
audio_utils
.
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.

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.