Resulta que estoy configurandome mi equipo para trabajar en audio y lo que se suele llamar producción musical. Me he encontrado con el problema de conectar un dispositivo midi, capturar la entrada y guardarla con un programa como Rosegarden o QTractor.
El caso es que inicialmente he utilizado Timidity para reproducir los eventos MIDI y escuchar lo que voy tocando, pero me da una latencia exagerada y la verdad cuando te pones a grabar en serio, no puedes concentrarte si estas escuchando lo que tocaste hace medio segundo, mientras estas tocando otra nota. Así que he tenido que probar a usar otro sistema para reproducir los samples.
En concreto lo he hecho a través de Fluidsynth pero el resultado ha sido peor. El problema es que se pierde la mayoría de los eventos, y sólo llegan algunos a fluidsynth (eso sí cuando lo llegan lo hacen al instante
Esto es parte de la salida que obtengo enQSynth (ventana messages).
...
event_post_noteon 9 36 85
event_pre_noteon 9 36 0
event_post_noteoff 9 36 127
event_prfluidsynth: noteon 9 36 106 00118 158.997 159.066 0.000 1
fluidsynth: noteoff 9 36 0 00118 158.999 159.067 0.001 2
fluidsynth: noteon 9 36 56 00119 159.293 159.362 0.000
...
vent_post_noteon 9 36 85
event_pre_noteon 9 36 0
event_post_noteoff 9 36 127
event_prfluidsynth: noteon 9 36 106 00118 158.997 159.066 0.000 1
fluidsynth: noteoff 9 36 0 00118 158.999 159.067 0.001 2
fluidsynth: noteon 9 36 56 00119 159.293 159.362 0.000
Así pues retomé la alternativa de Timidity, y busqué en google y tal, y esta es la solución que encontré:
http://josefhuber.com/index.php?option= ... 2&Itemid=1
Se trata de añadir en la linea de comando de Timidity el parámetro -B2,8
De hecho esto ya lo tenía incluido en mi script de inicio de timidiy (/etc/init.d/timidity), y por supuesto sigo teniendo el problema.
Así que investigué un poco más. Al final me decidí a bajar las fuentes de Timidity y mirár más al detalle. Por suerte no tuve que mirar demasiado en profundidad.
En el fichero timidity.h, linea 139, pone:
#define AUDIO_BUFFER_BITS 12 /* Maxmum audio buffer size (2^bits) */
pues en mi caso, simplemente cambiando el valor por 10 el sistema se vuelve más reactivo:
#define AUDIO_BUFFER_BITS 10 /* Maxmum audio buffer size (2^bits) */
Es interesante leer el comentario que pone encima de la constante para entender un poco qué se está tocando, pero que vamos, si no hay ganas, tampoco es necesario...
Bueno pues eso es todo, cambiando el tamaño de esos buffers se consigue una respuesta más inmediata. Por supuesto, se pueden probar valores menores, aunque se corre el riesgo de comenzar a escuchar cracks, glitches y demás artifacts. Por cierto no hay tampoco que pasarse y poner 0,1,2,.... En realidad no se qué efecto puede tener esto, pero si pasa algo, por supuesto no me hago responsable!
Por cierto para los profanos a la programación, esta es la manera de proceder para recompilar Timidity:
- descargar el código fuente y descomprimirlo en una carpeta.
- Abrir un intérprete de comandos e ir a esa carpeta.
- modificar en el fichero ./timidity/timidity.h la famosa línea 139
- escribir:
./configure --enable-audio=oss,alsa,jack --enable-alsaseq
(vigilad las dependencias! igual hay que instalar paquetes de desarrollo de alsa,jack...)
- luego escribir:
make
- y luego:
sudo killall -9 timidity
sudo make install
- y finalmente o bien reiniciar el sistema, o iniciar timidity manualmente:
timidity -iAD -Os
Bueno, eso es todo, simplemente quería exponer un problema que me encontré (y que sé que no he sido el único , y una posible solución que puede servir para ayudar a alguien que se encuentre en una situación como la que yo estaba.
Saludos.