Jack, el servidor de sonido que provee conexión entre las aplicaciones de audio y el protocolo MIDI (que utilizan entre otros Sonic Pi, SuperCollider o Tidal) necesita de la programación en tiempo real (o de baja latencia) para su buen funcionamiento. Ya hablé en un post anterior sobre el Kernel de baja latencia, en este post configuraremos el sistema para que una aplicación, en este caso Jack, pueda ejecutarse en tiempo real. Una aclaración inicial: no necesitas utilizar o instalar un kernel RT (o de baja latencia) para que una aplicación se ejecute en tiempo real (RT).

Ubuntu, como la mayoría de distribuciones GNU/Linux, limita por defecto el uso del tiempo real en las aplicaciones, ya que lo considera un abuso hacia el sistema. Aunque existen distribuciones que lo permiten e incluso están configuradas por defecto para ello, como AVLinux) y otras distros enfocadas al audio o/y video.

¿Cómo sabemos que jack no funciona en tiempo real? Si no existen los permisos del sistema necesarios, al iniciar jack mediante comando o a través de qjackctrl aparecerá un error parecido a este:

cannot use real-time scheduling (FIFO at priority 10) ... (1: Operation not permitted)

Para solucionar el problema debemos crear un grupo que gestione los permisos necesarios para que jack funcione en RT y luego, añadiremos nuestro usuario al grupo y voila!

Editar el archivo de configuración

Antes de crear el grupo debemos configurar las prioridades que el sistema va a permitir al grupo de audio. El método que usaré a continuación funciona porque Ubuntu utiliza el protocolo PAM (Pluggable Authentication Modules), que gestiona los permisos que una aplicación (u otro software) necesita para realizar cualquier tarea. En principio, si existe el directorio /etc/security/limits.d en tu distro es que utiliza PAM. Si no existe, deberías crear y editar un archivo llamado /etc/security/limits.conf. (Mira la nota final)

Abrimos el archivo de configuración:

sudo nano /etc/security/limits.d/99-realtime.conf

y añadimos la siguientes 2 líneas:

@realtime - rtprio 99
@realtime - memlock unlimited

Creando el grupo realtime

Ahora vamos a crear el grupo realtime, para ello debemos acceder como superusuario (root). En la terminal, ejecutamos:

sudo su

Ya como superusuario creamos el grupo realtime con el siguiente comando:

groupadd realtime

Y seguidamente añadimos nuestro usuario (sustituye rubent por tu nombre de usuario) al grupo:

usermod -a -G realtime rubent

La única forma de comprobar que el sistema está configurado correctamente para RT es probar algún programa que lo necesite como Tidal, Pure data o SuperCollider o abrir qtjackctrl e iniciar el servidor. Así que a probar!

NOTA FINAL: Si tu distro tiene ya un grupo que controla el audio y, por tanto, el archivo limits configurado, deberías averiguar cuál es nombre del grupo (normalmente audio o jackuser) y meter tu usuario en ese grupo. Aunque, recomiendo que si te ocurre esto o alguna otra cosa que no venga en esta mini-guía consultes la guía que proporciona Jack y salgas de dudas.

Referencia: JACK Audio

Anuncios