Chapter 1
JACK: a real-time audio connection kit

JACK (http://jackaudio.org) es un driver de audio que puede ejecutarse en plataformas que siguen el est’andar POSIX (GNU/Linux, Solaris, FreeBSD, OS X y Windows). Tiene dos caracter’isticas que lo hacen muy interesante:

1.1 Instalaci’on de JACK

Vamos a instalar JACK a partir de otro programa (muy b’asico) que lo necesita. Dicho programa es Meterbridge y se trata de un v’umetro (un dispositivo que mide el nivel de volumen en tiempo real de la seņal de audio):

sudo apt-get install meterbridge  
 
# Instala entre otros, los paquetes "jackd" (el demonio para jack),  
# "qjackctl" (el controlador del demonio llamado "JACK Control") y  
# "meterbridge (un vol’umetro). Estas dos ’ultimas aplicaciones son  
# gr’aficas y aparecen en el men’u desplegable.  
 
# A la pregunta de que si se desea ejecutar "jackd" en tiempo real,  
# indicar s’i (aunque deber’ia tenerse en cuenta que sin un kernel RT  
# (Real-Time) "jackd" podr’ia generar "XRuns" (p’erdida de datos de  
# audio)".  
 
# El paquete "jackd" ha debido generar el fichero:  
#  
# /etc/security/limits.d/audio.conf  
#  
# Que indica los privilegios necesarios para usar el driver de  
# audio Jack. Si lo visualizamos podemos ver dos cosas:  
# 1. Que se manipula a trav’es de "dpkg-reconfigure -p high jackd".  
# 2. Que para poder obtener estos privilegios, el usuario deber’ia  
# pertenecer al grupo "audio".  
 
# Para pertenercer al grupo "audio" primero tenemos que verificar si  
# existe o no:  
X=‘grep audio /etc/group‘ # Ojo con estas comillas.  
# Son las que est’an a la derecha de la tecla "P".  
echo $X  
 
# Si el anterior comando devuelve algo semejante a:  
# "audio:x:29:pulse" es que el grupo est’a creado. Si no fuera as’i,  
# habr’ia que crearlo con el comando "groupadd".  
 
# Y una vez que el grupo "audio" existe, nos a~nadimos al mismo:  
sudo cp /etc/group /etc/group.old  
rm -f /tmp/1  
sed -e "s/$X/$X,$USER/g" /etc/group.old > /tmp/1  
sudo mv /tmp/1 /etc/group  
 
# Tambin hay que aadir tu nombre de usuario al fichero /etc/gshadow  
 
# Ahora cerramos la sesi’on y volvemos a entrar.

1.2 Ejecuci’on de JACK

JACK debe estar ejecut’andose siempre antes de que cualquier otra aplicaci’on basada en JACK sea ejecutada. Para lanzar el demonio de JACK lo m’as sencillo es buscarlo en el men’u desplegable y ejecutarlo. Deber’ia aparecer una ventana semejante a:

PIC

Pulsar en el bot’on “Iniciar” y esperar a que aparezca el mensaje “Iniciado” en el display. Por supuesto, esto tambi’en puede realizarse si desde la l’inea de comandos lanzamos:

# Cambiamos de grupo.  
newgrp audio  
 
# Verificamos que ahora pertenecemos al grupo "audio".  
id -gn vruiz  
 
# Lanzamos JACK (el servidor y la aplicaci’on que lo controla).  
qjackctl &

N’otese que si pertenecemos al grupo “audio”, el demonio puede lanzarse en modo usuario. Si no pertenecemos, habr’ia que lanzarlo como administrador.

JACK funciona b’asicamente como una mesa de mezclas donde tenemos que ir realizando conexiones entre los diferentes puertos. Por defecto no existe ninguna conexi’on. As’i, por ejemplo, si hablamos a trav’es del micro no escucharemos el retorno. La soluci’on: conectar el puerto en salida del host (“system”) con el puerto de entrada del host. Para ello hay que seleccionar ambos items en la ventana “Conexiones” y luego pulsar en “Conectar”. El resultado:

PIC

1.3 Uso de JACK y Meterbridge

Si ahora lanzamos Meterbridge (deber’ia aparecer una ventaja titulada vu bridge-????, donde ???? es el n’umero de proceso), en la ventana de conexiones deber’ia crearse una conexi’on que va desde el puerto de salida del sistema al puerto de entrada de “bridge-????”, y luego otra conexi’on que parte en el puerto de salida de “bridge-????” y llega al puerto de entrada del sistema. La ventana de conexiones deber’ia de quedar como:

PIC

y la ventana “vu bridge-????” deber’ia mostrar dos v’umetros que indican la amplitud de la seņal de entrada a trav’es del micro conectado al host:

PIC

Finalmente, n’otese que Meterbridge tiene otras posibilidades:

meterbridge -t vu alsa_pcm:playback_1 alsa_pcm:playback_2  
meterbridge -t ppm alsa_pcm:playback_1 alsa_pcm:playback_2  
meterbridge -t dpm alsa_pcm:playback_1 alsa_pcm:playback_2  
meterbridge -t jf alsa_pcm:playback_1 alsa_pcm:playback_2  
meterbridge -t sco alsa_pcm:playback_1 alsa_pcm:playback_2

1.4 Los analizadores de espectro Jaaa y Japa

B’asicamente, un analizador de espectros permite visualizar la forma de onda del sonido a partir de sus componentes de frecuencia. Existen dos muy sencillos: Jaaa (http://www.kokkinizita.net/linuxaudio/#jaaa) y Japa (http://www.kokkinizita.net/linuxaudio/#japa).

sudo apt-get install jaaa japa  
jaaa -J &  
japa -J &  
# No olvidar conectar el puerto de salida del sistema  
# con el puerto de entrada de jaaa o japa!

1.5 El reproductor de audio Aqualung

Aqualung (http://aqualung.sourceforge.net) es un reproductor de ficheros MP3 y OGG Vorbis, y que se conecta a JACK.

wget http://www.hpca.ual.es/~vruiz/docencia\  
/imagen_y_sonido/practicas/audio_files/THX.mp3  
sudo apt-get install aqualung  
aqualung THX.mp3 &  
# Y conectar el puerto de salida del sistema con el puerto de entrada  
# de jaaa.

1.6 JAMin: the JACK Audio Mastering interface

JAMin (http://jamin.sourceforge.net) es b’asicamente un ecualizador gr’afico.

sudo apt-get install jamin  
jamin

1.7 Timemachine: a simple audio recording tool

Timemachine (http://plugin.org.uk/timemachine) es una aplicaci’on que permite salvar en disco cualquier cosa que conecte a JACK.

sudo apt-get install timemachine  
timemachine &  
# El fichero que se genera al pulsar el bot’on de Timemachine puede  
# ser reproducido con aqualung.

1.8 Ardour: un multipistas ... con muchas pistas

Un multipistas como Ardour (http://ardour.org) es un sistema que permite grabar una nueva pista (o varias) de audio mientras se utiliza(n) otra (u otras) previamente grabada(s) como seņal de sincronizaci’on. Esta t’ecnica es muy usada en los estudios de grabaci’on.

sudo apt-get install ardour  
ardour2 &

1.9 The Hydrogen Drum Machine

Para los que no tienen una bater’ia ... Hydrogen (http://www.hydrogen-music.org/hcms).

sudo apt-get install hydrogen  
hydrogen &

1.10 El multiefectos JACK Rack

JACK Rack (http://jack-rack.sourceforge.net) es una aplicaci’on que permite concatenar una gran cantidad de efectos simples, tales como ecos, generadores, phasers, etc.

sudo apt-get install jack-rack  
jack-rack &

1.11 Un distorsionador de guitarra: Rakarrack

Rakarrack (http://rakarrack.sourceforge.net) es parecido a JACK Rack, pero s’olo tiene un multiefectos espec’ificamente diseņado para distorsionar el sonido de una guitarra el’ectrica.

sudo apt-get install rakarrack  
rakarrack &

1.12 Un generador de efectos en el dominio de la frecuencia: Freqweak

Freqweak (http://freqtweak.sourceforge.net) permite generar espectros, espectrogramas, filtros, ecualizaciones, etc.

sudo apt-get install freqtweak  
freqtweak &

1.13 Rosegarden y MusE: secuenciadores MIDI

Un secuenciador como Rosegarden (http://www.rosegardenmusic.com) o MusE (http://www.muse-sequencer.org) son aplicaciones que reproducen una secuencia de notas musicales (especificadas normalmente usando el sistema MIDI).

sudo apt-get install rosegarden muse  
rosegarden &  
muse &

1.14 MPlayer

Reproductores multimedia tan ’utiles como MPlayer (http://www.mplayerhq.hu) tienen un interface para JACK!

sudo apt-get install mplayer  
mplayer -ao jack filename.mp3

1.15 Free Music Instrument Tuner

Un afinador de instrumentos musicales, reconocedor de notas, visualizador de espectro, etc.:

sudo apt-get install fmit  
fmit &

1.16 PulseAudio sobre JACK

JACK es potente pero complejo de usar para aquellos usuarios que no son expertos en audio por computadora y por esa raz’on, en la mayor’ia de distros de Linux (Ubuntu por ejemplo), el controlador de audio es otro diferente, y muchas veces PulseAudio (http://www.pulseaudio.org). Por este motivo, aplicaciones tan relevantes como Mozilla Firefox no han sido desarrolladas con soporte para JACK.

Por suerte, los desarrolladores de PulseAudio han desarrollado un m’odulo que permite que todas las aplicaciones que usan PulseAudio se conecten, desgraciadamente como un todo, a JACK. A pesar de esta limitaci’on s’olo visibles desde el punto de vista de JACK, vale la pena usar dicho m’odulo porque vamos a poder usar JACK y PulseAudio de forma simult’anea.

La instalaci’on, configuraci’on y uso del m’odulo de PulseAudio para JACK se puede realizar como a continuaci’on se especifica:

sudo apt-get install pulseaudio-module-jack  
cd /etc/pulse/  
sudo cp default.pa default.pa.old  
sudo gedit default.pa  
 
# A~nadir las l’ineas:  
#  
# load-module module-jack-source  
# load-module module-jack-sink  
# al final de la l’inea que posee la cadena: "load-module module-pipe-sink".  
#  
# Por supuesto, estas dos l’ineas NO tienen una "#" al comienzo.  
# Y a continuaci’on comentar todo el bloque (que normalmente se especifica  
# a continuaci’on y que est’a relacionado con "module-udev-detect".  
 
qjackctl & # Cargamos JACK (si ya no lo est’a).  
 
# Iniciar JACK (si ya no lo est’a).  
pulseaudio --kill # Reiniciamos PulseAudio  
 
# Ahora deber’iamos ver los puertos "PulseAudio JACK Sink" y  
# "PulseAudio JACK Source" en la ventaja de conexiones de JACK y  
# conectados como se muestra a continauci’on.

PIC

1.17 Latencias, kernels RT (Real-Time) y dem’as

Cuando se trata de hacer m’usica en directo con una computadora que corre Linux, es muy importante que la latencia de JACK sea lo m’as baja posible. Esto se puede controlar en el apartado de configuraci’on de JACK (Setup) modificando los distintos par’ametros, hasta conseguir la latencia deseada.1

Sin embargo, no podemos olvidar que Linux es un sistema operativo multi-tarea (y multi-usuario), y que JACK compite por los mismos recursos que muchas otras aplicaciones que se est’an ejecutando en la computadora. Cuando JACK no dispone de suficiente CPU, t’ipicamente se genera un XRun y el audio se entrecorta.

Para minimizar al m’aximo la ocurrencia de XRuns deber’iamos ir verificando (en orden de prioridad) que:

  1. S’olo corren las aplicaciones estrictamente necesarias para el correcto funcionamiento de la computadora. Aplicaciones como servidores de correo electr’onico, servidores Web, gestores de ventanas potentes (tipo GNOME (http://www.gnome.org) o KDE (http://www.kde.org)), m’ultiples instancias de shells, etc., son elementos prescindibles en una computadora dedicada a crear m’usica en tiempo real.
  2. El servidor de JACK (/usr/bin/jackd) est’a ejecut’andose con la m’axima prioridad posible. Para averiguar la prioridad2 del servidor:
    X=‘ps -C jackd -o pid=‘; ps -o nice -p $X

    Si no es suficientemente alta (cosa que depende en realidad de la prioridad del resto de aplicaciones que est’an corriendo) deberemos incrementarla:

    X=‘ps -C jackd -o pid=‘; sudo renice -20 -p $X  
    # N’otese que renice s’olo puede usarse como adminitrador!

  3. Usar un kernel que permita reducir al m’aximo la latencia de ALSA (http:///www.alsa-project.org). Esto implica descargar los fuentes del kernel (http://www.kernel.org), configurarlo con este objetivo, compilarlo, probablemente modificar los ficheros de configuraci’on de GRUB (http://www.gnu.org/software/grub) y finalmente rebotar la m’aquina para usarlo.
  4. Mejorar el hardware de sonido. Chipsets con coprocesadores que descarguen a la CPU de tanto como sea posible son preferibles.
  5. Mejorar la CPU (procesador + memoria).