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:
- Presenta una latencia muy baja lo que es ideal para trabajar en tiempo
real.
- Permite conectar las aplicaciones de audio compatibles de forma que se
puede especificar un orden de conexi’on entre ellas.
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:
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:
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:
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:
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.
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.
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:
- 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.
- El servidor de JACK (/usr/bin/jackd) est’a ejecut’andose
con la m’axima prioridad posible. Para averiguar la
prioridad
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!
- 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.
- Mejorar el hardware de sonido. Chipsets con coprocesadores que descarguen a
la CPU de tanto como sea posible son preferibles.
- Mejorar la CPU (procesador + memoria).