domingo, 20 de diciembre de 2009

Introducción a jconvolver

##################################
Notas de revisiones:
Revisión 0: 20 diciembre 2009. Publicado.
Revisión 1: 22 diciembre 2009. Retocada descripción de frontends.
Revisión 2: 23 diciembre 2009. Ampliado tutorial de Jc_Gui
##################################

jconv (renombrado a jconvolver desde la versión 0.8.4) es un motor de convolución a tiempo real, cliente de jack. Nada mejor que la descripción que da el propio autor, Fons Andriensen, en su página web . Si descargáis las fuentes, hay una descripción más completa en archivo README. Esto pretende ser una introducción para romper el hielo.

INSTALACION
""""""""""""""""
En instalaciones basadas en Debian, podemos instalar los paquetes 'jack-jconv' y 'jconv-config-files'. Por supuesto, siempre podemos compilar e instalar manualmende desde el código fuente, que podemos descargar desde la página oficial del proyecto.

USO
"""""
Básicamente, el comando jconv llama a un archivo de configuración, el cual, a su vez, invoca el archivo wav de impulso, con varias opciones. El propio autor explica en qué consiste un archivo de configuración de jconv. Vamos a hacer una búsqueda. En una terminal:

sudo updatedb
locate jconv

Vemos que hay un README.CONFIG en /usr/share/doc/jack-jconv. Vamos a ver qué dice:

cat /usr/share/doc/jack-jconv/README.CONFIG

Vemos que hay 7 comandos diferentes, cada uno con sus opciones. Con el locate también vimos que hay varios archivos de configuración y algunos impulsos de ejemplo en el directorio /usr/share/jack-jconv/config-files/.

Voy a pasar todo esto a mi home, más que nada por tener un único directorio donde poner todos los impulsos y los archivos de configuración que me interesen. De momento, voy a crear un nuevo directorio llamado conv-reverb y luego lo copio allí con:

sudo cp -R /usr/share/jack-jconv/config-files/* /home/pablo/conv-reverb/

También voy a cambiar el propietario de todos estos archivos, para que no tenga problemas a la hora de editar los archivos de configuración:

sudo chown -R pablo:pablo /home/pablo/conv-reverb/

Y voy a descargar algunos impulsos que ha creado el propio autor desde su página oficial (en downloads, abajo, remark 2). Los descomprimo y los muevo a mi directorio conv-reverb.

Por ejemplo, voy a probar el chapel.wav. Ya teníamos un archivo de configuración de ejemplo llamado chapel.conf, así que vamos a partir de éste, que es bastante sencillo. La primera línea a modificar es el la ruta donde se encuentra el archivo chapel.wav. En mi caso, la cambio a:

/cd /home/pablo/conv-reverb

El tamaño de la partición (en la línea /convolver/new, parámetro partition) lo podemos poner igual al tamaño del periodo (cuadros por periodo) de jack. A mayor "partition" mayor latencia.
Vemos también en esa línea que lo estamos definiendo con una entrada y dos salidas. En las siguientes líneas podemos cambiar los nombres de los puertos de jack, si queremos. Por fin, en las líneas /impulse/read definimos el archivo del impulso y algunos parámetros para cada combinación entrada-salida (en este caso dos). Lo podemos dejar como está.

Si ahora hacemos en la terminal:

jconv conv-reverb/chapel.conf

Ya tendremos nuestro impulso cargado. Sus puertos nos aparecerán en las conexiones de qjackctl, y los podremos conectar con otros clientes a nuestro antojo.



En la imagen he conectado el puerto de captura 1 (donde tengo enchufado un micro) a la entrada de jconv y las salidas de jconv a los system:playbacks, que representan las salidas analógicas a los altavoces. Pues sí, me escucho como en una capilla :)


FRONTENDS
""""""""""""""

El método que hemos visto para usar jconv es muy flexible y, superado el trabajo inicial de pruebas y edición de archivos, mucho más rápido de lo que parece a primera vista. Por ejemplo, podríamos preprogramar varios reverbs y lanzarlos con un click desde un cajón en el panel de gnome.

Sin embargo, si queremos algo más sencillo y gráfico podemos contar, de momento y que yo sepa, con una par de frontends gráficos, Jc_Gui y conviction.

Jc_Gui


Jc_Gui está escrito por Hermann Meyer y James Warden, autores de guitarix, un amplificador virtual de guitarra. Jc_Gui utiliza código de guitarix, que ya tiene la opción de añadir impulsos para simular cajas de altavoces haciendo uso de jconv.

Para instalarlo, vamos a su página oficial de sourceforge y descargamos la última versión disponible. Lo descomprimimos y lo movemos a nuestro directorio de fuentes y desde su directorio hacemos:

./waf configure
./waf build
sudo ./waf install

Nos aparece en el menú de sonido y video.

Jc_Gui y conexiones en qjackctl

En la imagen de la onda podemos seleccionar parte del impulso, arrastrando el ratón con botón izquierdo, para obtener un offset y una longitud. Podemos mover la selección con botón central y borrarla con botón derecho. El tamaño por defecto, en muestras o samples, será igual al tamaño del impulso.

En cuanto a las conexiones, las salidas 2 y 3 de Jc_Gui van a las entradas de jconvolver, que devuelve la señal a las entradas 2 y 3 de Jc_Gui. Por las salidas 0 y 1 de Jc_Gui sale una mezcla que se puede controlar con el slider wet/dry. Nuestra fuente de audio la conectaremos a las entradas 0 y 1 de Jc_Gui.

A la izquierda del slider wet/dry tenemos la señal "seca", sin reverb (le afecta sólo el volumen y la ecualización). A la derecha del todo, sólo la señal "mojada" que se envía al procesador. Como la configuración de jconvolver no se puede modificar en tiempo real, los desarolladores han facilitado una ganancia y un delay "pre-jconv" en la misma ruta de la señal "mojada".


Conviction

Conviction está desarrollado en python por Juan Ramón Castán. Se puede descargar desde aquí .

Es necesario el paquete sndfile-programs y python 2.6. De momento, parece que sólo funciona con jack1 (el jack "normal", versión 0.xxx). La instalación es sencilla: 'sudo make install' desde el directorio creado al descomprimir. Aparece en el menú de sonido y video.

Si simplemente queréis cargar un impulso y que la reverb suene a la primera sin complicaros, conviction es una buena opción. Además, permite cargar varios impulsos que aparecen en las conexiones de jack como puertos independientes.

Conviction

6 comentarios:

  1. No se puede estar mas al dia.
    Gracias Pablo!

    ResponderEliminar
  2. Por cierto, te funciona bien el Jc_gui?
    A mi es como si me cojiera solo una pequenya parte del impulso.
    Espero que Juan Ramón no deje de desarrollar por haber salido otra gui de jconv.
    Salut!

    ResponderEliminar
  3. Buen post compañero. Gracias, como siempre

    ResponderEliminar
  4. Gracias por los comentarios.

    Cato, en Jc_Gui, jconv settings, tienes que subir manualmente el valor max mem (en número de samples), según el tamaño del impulso.

    En conviction es el valor que parece como Max Samples. Parece que Conviction lee el tamaño del impulso y lo asigna automáticamente a esa variable.

    He añadido, algo más sobre Jc_Gui. Yo creo que es así como se debe conectar.

    ResponderEliminar
  5. Bueno, rectifico. En Jc_Gui ya no hace falta subir el max mem manualmente. En la última versión ha habido algunas mejoras y un cambio de aspecto. Confirmo que las conexiones a realizar (o a dejar como están pues se deberían conectar automáticamente) son las mostradas en el pantallazo.

    ResponderEliminar
  6. Para actualizar, sudo ./waf uninstall, ./waf clean, borrar carpeta de fuentes, bajar otra vez las fuentes y volver a compilar / instalar.

    ResponderEliminar