Configurando GNU/Linux para transmitir en RadioGNU

En RadioÑú usamos el programa IDJC para hacer las transmisiones en vivo. Aunque con otros programas se puede lograr el mismo resultado, es con el IDCJ con el cual damos soporte en nuestra radio.

Esta aplicación trae binarios para las distintas distribuciones que es posible instalar desde el administrador de paquetes que se use. En el caso de distribuciones de GNU/Linux basadas en Debian el asunto se resuelve así:

sudo aptitude install jackd2 qjackctl idjc

Nota: si tu computadora tiene un puerto firewire y su tarjeta de sonido es externa y conectada a ese puerto, deberás incluir en el aptitude el paquete “jackd2-firewire”

Para que el JACK pueda trabajar en tiempo real adecuadamente requiere hacer más de un paso. En las distribuciones modernas este paso no es necesario, pues ya el sistema operativo vendrá configurados con estos parámetros, sin embargo es bueno verificarlos.

Primero será necesario unir el usuario un grupo que podrá luego invocar el tiempo real en el kernel.

adduser usuario audio 

Por supuesto, cambias “usuario” por en nombre del login de tu “usuario” :-P

Luego se debe editar el archivo /etc/security/limits.conf y allí agregar al final estas dos líneas que dan permiso al grupo @audio:

Dependiendo del sistema, modificar los límites puede causar problemas, siempre intenta probar sin modificar este archivo, luego puedes ir probando a ver qué tal.
@audio - rtprio   100
@audio - nice     -10
@audio - memlock  unlimited

“rtprio” es el índice de prioridad que se le otorga al proceso en tiempo real que viene del grupo @audio.

“memlock” será la cantidad de memoria que la aplicación puede usar para si misma. Para trabajar con audio se recomiendan 2GB de memoria o más. Este valor se puede expresar numéricamente (en KB) para definir un máximo permitido. Ejemplo:

@audio   -  memlock    769515

Reiniciar la sesión del usuario es suficiente para tomar los cambios, pero no viene mal en este punto reiniciar.

init 6

Es importante en adelante hacer uso comedido del procesador. Es decir, ver un video y sobretodo si el mismo tiene algún nivel de compresión alto es algo que demanda uso de CPU. Use esta computadora sólo para el IDJC y el JACKD. Si se necesita navegar en internet, se sugiere el uso de una sola ventana y una sola pestaña de navegación y sobre todo: evitar páginas con flash, que al parecer fue diseñado no solo para limitar al usuario y vulnerar su privacidad, sino también para no respetar ningún tipo de ahorro de consumo del CPU.

En algunas distribuciones será necesario tener un kernel RT (realtime) instalado para que esto funcione.

Levantando el JACK (con qjackctl)

La manera más sencilla de invocar un servidor con JACK es usando una aplicación llamada qjackctl. Para quienes no deseen usar una interfaz gráfica, el servidor puede ser levantado con las opciones que se deseen desde el intérprete de lineas de comando.

El nombre de QJACKCTL es definido por CTL (que significa Control) del servidor JACK y que está hecho con librerías gráficas QT, por eso la Q al principio.

Al invocar QJACKCTL tendremos una pantalla como esta:

Antes de darle a INICIAR, tenemos que verificar que su configuración sea correcta. en SETUP.

Para ello tendremos que asegurarnos de varias configuraciones antes. Lo primero es que para que funcione todo en TIEMPO REAL, es necesario que nuestro kernel soporte tal cosa, de lo contrario dará errores. Se sugiere la primera vez no activar esta opción.

Nótese que en esta configuración hay una tarjeta de audio externa USB. En su caso quizás no tenga tal hardware y no ncesitará escoger hw:1 en la interfaz y dejar “default” en esta opción será suficiente.

Otras dos configuraciones son importantes y darán finalmente la latencia con la cual trabajaremos.

Brevemente, “latencia” significa retardo, y es en este caso el retardo que tendrá el sonido desde que entra al sistema hasta que sale del mimso. Evidentemente, mientras menos retardo será mejor. La combinación de la FRECUENCIA DE MUESTREO (se recomienda mantener 44100 Hz), los CUADROS/PERÍODO y los PERIODOS/BUFFER darán como resultado la latencia resultante. A mayor latencia menor uso del procesador: a menor latencia mayor consumo de procesador y viceversa.

RT significa que está activada la opción TIEMPO REAL en el kernel. Haga pruebas sin esta opción en caso de errores. Algunas distribuciones no traen soporte para RT (Real Time) en sus kernels genéricos. Trisquel GNU/Linux sí soporta esta característica.

Cuando se modifican los CUADROS y BUFFERS para lograr la menor latencia posible hay que evitar los llamados “XRUNS”, que sin mucho detalle significan “rupturas en el audio debido a que no hay suficiente hardware en la tarjeta de sonido para manejar los valores asignados”.

Los “XRUNS” se presentarán de color rojo en el lugar donde estás los ceros de color verde. Lo idóneo es que no hayan XRUNS.

Esto significa que han habido pequeñas (a veces imperceptibles) interrupciones de audio. Si se evidencian valores como estos:

significa que hay problemas por corregir. Si esos valores se alcanzan en menos de un minuto es posible que la voz pueda comenzar a escucharse como si las interrumpiera una olla de cotufas (pop-corn) en plena ebullición.

Esto se corrige, ajustando adecuadamente los períodos de buffers y cuadros, anteriormente explicado.

Ahora, que ya está el JACK levantado (le hemos dado PLAY al qjackctl y no ha dado error) es cuando abrimos el IDJC. Es importante mantener este orden. IDJC no funcionará bien sin JACK levantado.