Cómo medir la latencia
Publicidad
Advertencia:
Para conseguir su objetivo, jack_iodelay produce un sonido alto y desagradable. Si haces las cosas como se indican en esta guía, este ruido no debería llegar a los altavoces pero, por si acaso, baja el volumen!
Doy por supuesto que jack está activo.
1) Conexiones físicas
Hace falta conectar un cable físico entre la salida y la entrada de tu tarjeta de audio. Lo normal es conectar la primera salida mono (que en el lado digital correspondería al puerto de jack-audio "system: playback 1") a la primera entrada mono (lo que en jack correspondería al "system: capture 1").
2) Ejecutar jack_iodelay
Abre una terminal e introduce el comando:
jack_iodelay
Verás algo como:
Alguien escribió:new capture latency: [0, 0]
new playback latency: [0, 0]
Signal below threshold...
Signal below threshold...
Signal below threshold...
3) Conectar jack_iodelay
Ahora hacemos las conexiones virtuales. En qjackctl o patchage conecta jack_delay: out a system: playback1. La señal va a través del cable hasta la entrada de la tarjeta. Para cerrar el bucle debemos conectar el system: capture1 to jack_delay: in
4) ¿Qué dicen los números?
La terminal empezará a decir algo. Este es un ejemplo de una prueba que hice el otro día:
Alguien escribió:3106.619 frames 64.721 ms total roundtrip latency
extra loopback latency: 34 frames
use 17 for the backend arguments -I and -O
En este ejemplo, la latencia total es 3106 cuadros aproximadamente. Dividiendo este número entre la frecuencia de muestreo en Hz (muestras por segundo) obtenemos la latencia en segundos. De todas formas, véis que también está indicado.
La "extra loopback latency" es latencia debida al hardware. Sobretodo a los convertidores AD y DA de tu tarjeta de sonido.
Más abajo veis una recomendación: Poner la mitad de los cuadros de "latencia extra" como latencia de entrada y la otra mitad como "latencia de salida" en la configuración de jack. En qjackctl, son los campos la columna derecha, abajo del todo. De esta forma, programas como ardour la tendrán en cuenta para compensarla.
El resto, hasta el valor total, depende de la configuración de jack y de qué implementación (jack1 o jack2) estemos usando. Será:
Para jack1 y jack2 en modo síncrono:
Latencia total debida a jack = p*n
Siendo p el valor de "cuadros por periodo" y n el de "periodos por buffer"
Para jack2 en modo asíncrono (el modo por defecto):
Latencia total debida a jack = p*(n + 1)
En el ejemplo de arriba, estoy con jack2 en el modo por defecto. Con 1024 cuadros por periodo y 2 periodos por buffer. Entonces, 1024*(2 + 1) = 3072 cuadros. 3072 de jack + 34 de hardware son 3106 en total.
La frecuencia es 48000 Hz, luego son 3072 / 48 = 64 ms debidos a la configuración de jack. Más 34 / 48 = 0.7 ms debidos al propio hardware. En total: 64,7 ms.
Para dispositivos USB hay que añadir a esas fórmulas un periodo extra o 24 ms, lo que sea más corto:
http://old.nabble.com/Differences-in-latency-between-USB-and-internal-audio-interfaces-td30407033.html
Si queréis medir la latencia de bucle en una interfaz que sólo tiene entrada de micro podéis usar un adaptador de impedancias cutre como éste que describo aquí:
http://apps.linuxaudio.org/wiki/jack_latency_tests#measuring_roundtrip_latency_with_jack_delay
http://old.nabble.com/Differences-in-latency-between-USB-and-internal-audio-interfaces-td30407033.html
Si queréis medir la latencia de bucle en una interfaz que sólo tiene entrada de micro podéis usar un adaptador de impedancias cutre como éste que describo aquí:
http://apps.linuxaudio.org/wiki/jack_latency_tests#measuring_roundtrip_latency_with_jack_delay
Guau! No sabía ese detalle de las tarjetas USB. Y ahora me explico por qué la latencia aumentaba inesperadamente en unas pruebas que hice hace tiempo sobre una UCA202, mientras que en la m-audio PCI se mantenía según lo esperado.
Por otro lado, en la prueba que hice el otro día en el netbook (que es la que he puesto como ejemplo en la entrada original), puenteé directamente la salida de auriculares a la entrada de micro
Mala idea, no?
Vaya trabajo de investigación te has pegado ¿Dónde está el emoticono que se quita el sombrero?
Una pregunta, las gráficas cómo las hiciste, con gnuplot?
Saludos, Pablo
Por otro lado, en la prueba que hice el otro día en el netbook (que es la que he puesto como ejemplo en la entrada original), puenteé directamente la salida de auriculares a la entrada de micro
Vaya trabajo de investigación te has pegado ¿Dónde está el emoticono que se quita el sombrero?
Saludos, Pablo
Pablo_F escribió:puenteé directamente la salida de auriculares a la entrada de microMala idea, no?
No creo que sea dañino para el equipo, supongo que cualquier entrada/salida llevará proteciones eléctricas básicas frente a sobretensión o cortocircuitos, pero puede dar problemas para conseguir unos niveles de salida y de entrada que permitan el sincronismo que pide la herramienta. Yo no conseguí que sincronizara y empezara a medir hasta que metí el atenuador.
Pablo_F escribió:Una pregunta, las gráficas cómo las hiciste, con gnuplot?
Las gráficas las hizo Robin con gnuplot, que lo tiene más controlado. Yo hice el script que lanzaba jackd con diferentes parámetros, ejecutaba el medidor de latencia y presentaba los resultados en una tabla.
HILOS SIMILARES
Latencia más baja con Jack el 26/11/2010
Ardour con AudioBox USB el 01/12/2011
Audio a través de una red. Experimentos con netjack2 el 09/09/2012
Problema KXstudio el 15/01/2013
Respuesta rápida
Identíficate o regístrate para poder responder en este hilo.