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.