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.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

8 comentarios:

  1. Cool. My name is Trevor MacLean and I wrote that song about my time in San Juan Del Sur, Nicaragua. I'm glad you liked it and I hope it was helpful in making this video.

    ResponderEliminar
  2. Hi Trevor!
    Yes, I like the song a lot!
    Made in ardour and in Nicaragua. Unique.
    Thank you, it was very helpful indeed.
    Cheers! Pablo

    ResponderEliminar
  3. ¿Es posible guardar las configuraciones para posteriormente rellamarlas en Patchage?

    ResponderEliminar
  4. Ahora mismo, no es sencillo poder restaurar las configuraciones y las conexiones entre aplicaciones diferentes, de una vez.

    Hay un proyecto en desarrollo llamado ladish. Había (y hay) algo parecido llamado LASH. Pero las aplicaciones tienen que tener soporte para LASH y no todas dan esa opción.

    Ladish intenta hacer algo similar, pero aprovechando dbus. La idea es poder guardar un "estudio" de aplicaciones jack-aware que pueda ser lanzado más tarde, de forma que con una única llamada se lanzarían y se conectarían todos los programas del "estudio" guardado previamente. Está en fase de pruebas pero funcionaba bastante bien cuando lo probé en el netbook hace un par de meses. Necesita jack compilado con la opción "dbus", lo cual no es así por defecto. Igual hago una entrada de presentación de ladish más adelante.
    http://www.freedesktop.org/wiki/Software/dbus
    http://ladish.org/

    ResponderEliminar
  5. Hace tiempo probé la distribución Musix. No la llegué a instalar porque no me reconocía mi Sound Blaster (???) Pero al margen de ese problema, habían cosas que me gustaban, y una de ellas era que existían unos lanzadores de menú, como con el que abres, por ejemplo, el navegador de internet. Pero la diferencia es que se abrían varios programas a la vez, junto con Jack, y todo ya preconectado para comenzar a trabajar.

    Tengo que averiguar cómo se hace eso en Ubuntu, porque es un latazo tener que abrir y conectar todo manualmente cada vez que abres un proyecto.

    También me tengo que mirar lo que me comentas, Ladish, a ver qué es más cómodo y práctico. De momento ya me lo pongo entre los marcadores para retomarlo más adelante. Gracias por la sugerencia.

    ResponderEliminar
  6. Hola José,

    Sí, supongo que eso está hecho a través de scripts del tipo:

    lanza qjackctl
    arranca jack
    espera unos segundos
    lanza rosegarden
    conecta puertos
    etc

    Si los programas con los que trabajas son siempre los mismos es una buena idea un script de ese tipo, desde luego. También está el patchbay de jack que facilita las conexiones entre clientes. Es que hay tantas posibilidades... es buena idea para una entrada, pero voy a tener que estudiar, uff, ya veremos.

    Ladish es más ambicioso pero ahora mismo está en fase de desarrollo y para empezar tendrías que compilar jack. Mejor esperar a no ser que disfrutes como "beta tester" y estés dispuesto a enfrentarte a compilar varios programas, nuevos problemas, etc. De momento, no lo veo apto para músicos ocupados en su música. Ya vendrá, espero.

    ResponderEliminar
  7. Hola Pablo, queria preguntarte si has probado jack2(http://www.grame.fr/~letz/jackdmp.html). Se supone que funciona mejor con ordenadores de múltiples procesadores. Sigo teniendo muchos xruns y estoy pensando en probar este camino. También he probado a desactivar el "escalado de frecuencia de la cpu" pero no he obtenido ninguna mejora significativa. Otra pregunta que quería hacerte es si el tener la wifi conectada (aun sin ningun navegador abierto) afecta al rendimiento de Ardour/jack y si sería suficiente con desconectarse de la red o por el contrario habría que inhabilitar el dispositivo wifi.

    ResponderEliminar
  8. Hola Unai, Se me había escapado tu comentario.

    Efectivamente, la WIFI puede ser problemática para Jack. En mi experiencia con el acer aspire one, fue suficiente con desconectarme de la red WIFI para dejar de recibir xruns que curiosamente se repetían en intervalos de tiempo fijos y múltiplos de 10 segundos exactos, casi a la milésima (en los mensajes aparece la hora en que se ha producido el xrun).

    Yo uso jack2 pero no puedo afirmar que noto gran diferencia. Si quieres pruébalo. Te advierto que antes de instalarlo tienes que desinstalar el otro completamente.

    Para karmic no estoy seguro si puedes encontrar jack2 precompilado. Yo lo compilé.
    Para lucid hay un PPA: https://launchpad.net/~falk-t-j/+archive/lucid

    Thorgal (uno de linuxmusicians) comentó que él lo lanza en "modo síncrono" y le va mejor. En la configuración de jack, lo que llama la "ruta del servidor", lo que sería la primera parte del comando, añade "-S" (o sea, /usr/bin/jackd -S).

    Un abrazo grande. Cuidate, Pablo

    ResponderEliminar