sábado, 17 de julio de 2010

Compensación de latencia de captura en Ardour

#########################
Notas de revisiones:
Revisión 0: 17 julio 2010. Publicado.
#########################

En este tutorial vamos a mostrar cómo se puede compensar la latencia de captura en Ardour2 cuando hacemos overdubbing, es decir, cuando capturamos audio al tiempo que escuchamos una pista grabada anteriormente.

Antes de nada, vamos a hacer una distinción entre dos formas de monitorizar (escuchar lo que estamos grabando al mismo tiempo); por software y por hardware.

La monitorización por hardware tiene una serie de ventajas. No consume CPU, podemos reducir drásticamente la probabilidad de xruns y la latencia es inexistente ("latencia cero"). Para monitorizar usamos la mesa de mezclas o la propia tarjeta de audio, si lo permite. En este caso, conviene elegir un valor de cuadros por periodo alto en Jack. No sólo no necesitamos baja latencia en software; además, subirla va a dar mejor rendimiento y estabilidad.

La monitorización por software es posible si tenemos un sistema ajustado para una latencia aceptablemente baja. Requiere menos hardware y permite monitorizar con procesado de señal por software (efectos y amplificadores virtuales). Creo que este es el caso más común en estudios caseros. La configuración de jack, para encontrar un buen equilibrio entre latencia y rendimiento, es esencial en este caso.

En el tutorial que sigue he trabajado con una latencia bastante baja. Normalmente lo tengo así porque suelo tocar la guitarra con rakarrack y con algún otro ampli virtual. Cuando grabo en ardour, también, siempre, hago monitorización por software. A 128 cuadros por periodo y 48.000 Hz, con 2 periodos por buffer, la latencia teórica de bucle completo es 256 cuadros ó 5,3 ms. La latencia real será un poquito mayor, como vimos en la entrada acerca de jack_delay.

En todo caso, con una latencia tan baja, no tengo claro si merece la pena compensar la latencia de captura en overdubbing. Con monitorización por hardware y latencia en Jack alta, es esencial. Al final de la entrada elaboro un poco más esta idea.

Procedimiento


En ardour, añadimos tres pistas mono y en el mezclador asignamos sus entradas al puerto de captura correspondiente a la entrada donde tenemos conectado un micrófono. En el caso del pantallazo, el segundo puerto de captura, in 2.



Ahora grabamos un par de notas en la primera pista. Yo lo hecho con la guitarra acústica. Dejo la segunda pista armada para grabar...



Colocamos el micrófono entre los auriculares de monitorización y grabamos en la segunda pista lo que teníamos grabado en la primera, que suena por los auriculares.



Se supone que cuando hagamos overdubbing con una segunda guitarra o con la voz vamos a tocar o cantar sincronizados con la música grabada, de forma natural. Queremos que lo que capturamos por el micro vaya perfectamente sincronizado con la pista grabada.

En el pantallazo de arriba no se observa desplazamiento porque el zoom está muy alejado. Pero existe y vamos a medirlo.

Con botón derecho sobre los relojes, los configuramos para que muestren los cuadros o muestras (samples)...



y en "opciones misceláneas", que el reloj secundario muestre la diferencia al punto de edición.



Ahora, nos aseguramos que el modo de edición es "Deslizar" (slide) y que la rejilla no está activa. Ponemos "marca" como punto de edición (también lo podemos hacer con "ratón") y configuramos el display de "empujar" en muestras.



Elegimos el cursor como foco del zoom...



Un truco (no está en los pantallazos):

Para hacer muy rápido los zooms sobre el cursor podemos hacer lo siguiente: Voy a Transporte -> Cursor -> Centrar cursor y pulso la tecla "," (coma). Esta es la forma rápida de asignar los atajos de teclado... Y sobre Ver -> Zoom -> Acercar, elijo la tecla "." (punto). Así tenemos tres dedos contiguos para centrar el cursor, acercar y alejar. ¡La tecla para acercar por defecto, "=", viene muy a desmano en un teclado español!

Otro truco es hacer zoom con la rueda del ratón, con la tecla Control pulsada.

En cualquier caso, acercamos (zoom in) y desplazamos el cursor hasta que lo tengamos al comienzo de una señal de audio (una de las notas que hemos grabado) en una de las pistas, más o menos. Además, creamos una marca, con botón derecho y la desplazamos al comienzo de la señal en la otra pista.

ADVERTENCIA: Hay un bug en ardour2 (hasta revisión 7387 por lo menos, #2798) que hace que el segundo paso de zoom, en el sentido de más cercano a más lejano, muestre incorrectamente la posición de las regiones. ¡Evitarlo! Propongo trabajar con el tercer paso.

Observamos la diferencia en muestras en el reloj secundario y escribimos ese número en el display de "empujar", como muestra la imagen.



Empujamos hacia atrás la segunda pista.





De esta forma hemos sincronizado la pista capturada en overdubbing. Si ahora hacemos una grabación real sabemos que la pista grabada va atrasada en el tiempo el mismo número de samples que hemos medido en la prueba. En la imagen está delante y debemos empujarla hacia atrás.

Para una determinada configuración de jack sobre una determinada tarjeta de audio, el número de muestras a "empujar hacia atrás" será siempre el mismo y será algo mayor que la cantidad de cuadros por periodo. En el caso seguido en este tutorial, tengo aproximadamente 195 cuadros o muestras de desfase y el tamaño del periodo (cuadros por periodo) y, por lo tanto, la latencia teórica de entrada, es de 128 muestras.

Como se ve en el último pantallazo, también tenemos la posibilidad de "empujar atrás por compensación de captura". Esto empuja hacia atrás, precisamente, la cantidad de cuadros por periodo que hemos configurado en jack (lo podéis comprobar). Se observa que la compensación no es perfecta pues no tiene en cuenta la latencia de captura propia de la tarjeta de audio.


Podemos hacer algo para no tener que desplazar manualmente cada pista después de grabar: Declarar en la configuración de Jack la latencia de entrada. Guardamos y cerramos ardour y vamos al setup de qjackctl.



El resultado al grabar la tercera pista es éste:




Sin embargo, como apuntamos al principio, 195 muestras de desfase es realmente muy poco y el desfase producido por la propia tarjeta, del orden de 65 muestras en mi caso, aún menos.

Dependerá de cada caso y de cada persona, pero como norma general, si tenemos una latencia lo bastante baja como para permitirnos la monitorización por software, el desfase será muy pequeño y es muy probable que no lo notemos. Si en cambio, monitorizamos por hardware y tenemos en jack un valor de cuadros por periodo elevado, la compensación es necesaria, aunque probablemente nos conformemos con empujar hacia atrás (o bien declarar en jack) la compensación teórica, igual al tamaño del periodo.