sábado, 14 de marzo de 2009

Conexiones de audio entre aplicaciones y tarjeta de sonido. Jack Control y Patchage.

################################
Notas de revisiones:
Revisión 0: Marzo 2009. Publicado sin contenido.
Revisión 1: 21 junio 2009. Publicado completo.
Revisión 2: 23 junio 2009. Retocado y ordenado texto.
Revisión 3: 27 junio 2009. Eliminada chapa filosófica (para otra entrada).
Revisión 4: 7 julio 2009. Añadida nota 1.
Revisión 5: 8 julio 2009. Añadido pantallazo qjackctl y retocado texto.
Revisión 6: 28 enero 2010. Añadido enlace a "Reproductores multimedia a través de jack"
#################################
_________________________________________________________________
1. Breve presentación del servidor Jack
_________________________________________________________________

Jack Audio Connection Kit (JACK) es un sistema para enviar audio entre aplicaciones y para permitir que éstas compartan la tarjeta de audio. Jack está diseñado para funcionar a latencias muy bajas (tan bajas como la tarjeta de audio lo permita) y para sincronizar perfectamente el audio entre ellas.

La herramienta gráfica más utilizada para lanzar el servidor jack es "qjackctl", que suele aparecer como "Jack Control" en el menú "Sonido y vídeo", "Multimedia" o similar en los entornos gráficos de escritorio. Desde Jack Control, botón setup, configuramos los parámetros y opciones con las que el servidor jack va a ejecutarse. En otra entrada daremos algunas orientaciones sobre esta configuración.

qjackctl

Si damos al botón "Conexiones", en la pestaña "Audio" veremos los denominados "clientes" de Jack, que son todas las aplicaciones "jack-aware" o "jackificadas" (es decir, que han sido programadas para ser clientes de jack, al menos optativamente) que tengamos abiertas en este momento. En esta entrega nos centramos en las conexiones de audio y veréis que resulta muy fácil conectar aplicaciones entre sí y con la tarjeta de sonido.

Otra característica destacable de jack es su transporte (teclas play / forward / rewind / pause ...) que es capaz de sincronizar diferentes clientes (secuenciadores, grabadores, reproductores...) en una única línea de tiempo, si así lo deseamos.

Acerca de jack, hay algunos conceptos no tan obvios que debemos tener claros para evitar confusiones:

1) El servidor jack se ejecuta "por debajo". No se ve, es un "demonio".

2) El servidor jack aborta el audio de toda aplicación que no sea su cliente, es decir, las aplicaciones no jackificadas no suenan (si esto es un problema para escuchar tu música o ver tus películas, echa un vistazo a esta entrada).

3) Qjackctl (Jack Control) es una interface gráfica para lanzar, configurar y hacer conexiones entre clientes del servidor jack (Ver nota 1).

4) Hay otras formas de lanzar el servidor jack, además de Jack Control; que yo sepa, bien mediante línea de comandos o bien mediante la configuración de audio de una aplicación que no puede funcionar sin jack, como es ardour. (Esta opción sólo aparece en el diálogo de inicio de ardour si el servidor jack no estaba ejecutándose de antemano).

5) Hay otras formas de hacer conexiones entre clientes de Jack, además de la ventana de conexiones de Jack Control. Por un lado, muchas aplicaciones tienen su propio interfaz de conexiones que, además de a sí mismas, ven también al resto de clientes de jack. Por otro lado, existen otras interfaces independientes, por ejemplo Patchage, como vamos a ver en el video.

_________________________________________________________________
2. Video-demo
_________________________________________________________________

Resumen:
Mostramos la flexibilidad en las conexiones virtuales de audio entre aplicaciones y tarjeta de sonido, utilizando primero la ventana de conexiones de Jack Control y después Patchage. De paso, damos a conocer algunos programas útiles.

video

(00:05) Tengo abierto Jack Control y unas pocas aplicaciones "jack-aware". Al dar al botón "Conexiones" aparece la ventana donde se pueden realizar las conexiones virtuales entre los puertos de salida y los puertos de entrada de las aplicaciones y tarjeta de sonido. "System" representa la tarjeta. Los puertos "capture" vienen de las entradas de micrófono o línea y los puertos "playback" van a las salidas que conectamos a los altavoces o equipo de audio exterior.

El resto de clientes son las aplicaciones que tenemos abiertas:

gtklick, un sencillo metrónomo con un puerto de salida.

Audacious, un reproductor de audio (con el plugin de salida de jack).

Rakarrack, un rack de efectos para guitarra y bajo.

Jack-capture, un grabador de audio que conecta automáticamente todo lo que conectemos a los "system playbacks" de forma que grabamos todo lo que sale de los altavoces. (Jack-capture lo he utilizado para grabar el audio de este videotutorial).

(00:40) Parto de todos los puertos desconectados. Conecto la salida de gtclick con los "system playbacks" y el "system capture_1" (que viene de la primera entrada analógica de mi tarjeta de audio donde tengo enchufada directamente una guitarra) con una de las entradas de rakarrack y una de sus salidas con los "system playbacks". Así, puedo practicar con el metrónomo. Después conecto los puertos de salida de audacious con los system playbacks y pongo música, que puedo seguir con la guitarra.

(01:50) Ahora vemos patchage, otro interfaz para hacer las conexiones virtuales. En patchage, cada cliente de jack se representa mediante una o dos cajas, según queramos representar los puertos de entrada y salida de cada cliente en una sola caja (botón derecho, join) o bien tenerlas por separado (split). También podemos desconectar todas las conexiones de cada caja sin afectar al resto (disconnect all).

Las conexiones y puertos de audio aparecen en azul, las conexiones alsa midi en verde y las jack midi en rojo. En el video se ven de pasada algunos puertos alsa midi pero como hemos dicho antes, en esta entrega nos centramos exclusivamente en las conexiones de audio.

Patchage tiene una ventaja con respecto a la ventana de conexiones de Jack Control cuando tenemos muchas aplicaciones abiertas o cuando alguna de ellas presenta muchos puertos, pues ofrece más claridad. Nos permite retirar cajas desconectadas a los márgenes, podemos organizarlas de forma que los cables no se crucen, se pueden poner unas cajas debajo de otras, se pueden seleccionar varias cajas para moverlas simultáneamente y se pueden poner diferentes tamaños de cajas y fuentes jugando con los botones de zoom. Las conexiones y desconexiones se realizan arrastrando el ratón de unos puertos a otros.

(2:38) Lanzo hydrogen (caja ritmos), conecto las salidas de audio a los "system playbacks" y hago un poco de ruido. (3:14) Después lanzo ardour y creo una nueva sesión en la cual agrego una pista estéreo. Por defecto, ardour autoconecta a las entradas de sus pistas los primeros puertos de captura que ve, en este caso "system capture_1" y "_2". (3:41) Los desconecto. (3:47) Desconecto también las salidas de audacious de los "system playbacks" y las conecto a los puertos de entrada de audio de la pista estéreo. (3:57) Después "armo" (preparo para grabar) la pista. Observa la señal de entrada en el vúmetro de la pista. (04:02) Para poder escuchar (monitorizar) lo que entra a la pista hay que elegir "monitorización por Ardour" (es decir, por software, en contraposición con "monitorización por hardware" en la cual se usa el mezclador de la propia tarjeta para evitar toda latencia). (04:07) Para terminar, grabo la parte final de la canción a la pista estéreo.

En el video utilizo gnome con efectos de escritorio por motivos estéticos y didácticos (los zooms son de mucha ayuda). Sin embargo, éstos consumen recursos (RAM y CPU) y en general no se recomienda tenerlos activos cuando se trabaja con audio en tiempo real.

_________________________________________________________________
3. Agradecimientos, créditos y para aprender más...
_________________________________________________________________

www.blogger.com, que cede este espacio gratuitamente.

El vídeo se ha grabado con recordmydesktop. http://recordmydesktop.sourceforge.net

El audio se ha grabado en directo con jack-capture (jack-capture-gui2).
Posteriormente se ha editado en Audacity para cortar un trozo final sobrante y exportar a un formato comprimido.

En kdenlive se han integrado el video y el audio y se ha exportado a un formato admisible por blogspot. www.kdenlive.org

El título lo he montado con The Gimp

JACK (Jack Audio Connection Kit): www.jackaudio.org

qjackctl: http://qjackctl.sourceforge.net/

gtklick. http://das.nasophon.de/gtklick/

rakarrack. http://rakarrack.sourceforge.net/

audacious. http://audacious-media-player.org/

Hydrogen. http://www.hydrogen-music.org/

Ardour. http://www.ardour.org

Canción "Time is on my hands", por The Greatest of Ease,
grabada y producida en ardour por Dave Taht.
_________________________________________________________________

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Notas
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
1. Cuando hablamos de clientes de Jack, nos referimos a clientes de audio y clientes de MIDI (jack MIDI o MIDI manejado por jack). Pero Qjackctl sirve también para hacer conexiones entre clientes de "Alsa MIDI" o MIDI manejado por alsa. En cualquier caso, en esta entrada sólo hablamos de conexiones de audio.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""