Latencia con Timidity: Problema y posible solución.

Demented
#1 por Demented el 03/10/2008
Hola a tod@s,

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.
Subir
OFERTAS Ver todas
  • -20%
    Technics SL-1200M7 Lamborghini
    1.199 €
    Ver oferta
  • -29%
    Behringer X-Touch Compact
    263 €
    Ver oferta
  • -50%
    NI Komplete 15 Collector's Edition
    885 €
    Ver oferta
Chickenexecutor
#2 por Chickenexecutor el 04/10/2008
Pues está majo tu post. Muchas gracias :)
Subir
alehop
#3 por alehop el 28/10/2008
Lo probaré, muchas gracias.

¿alguna alternativa a timidity?.


Saludos
Subir
Demented
#4 por Demented el 31/10/2008
Pues depende de para qué uses Timidiy :)

Si es básicamente para reproducir midi (ya sea interpretando en tiempo real, o a través de un secuenciador), puedes probar fluidsynth con bancos de samples SF2.

Yo tuve problemas, pero puede que no sea tu caso. De cualquier manera, merece la pena intentarlo.
Suerte!

:)
Subir
gyeraldh
#5 por gyeraldh el 09/03/2009
Hola. He intentando compilar timidity con el buff = 10 y no he podido te agradezco si me envias la carpeta que tienes donde está ya compilado
Subir
Demented
#6 por Demented el 09/03/2009
Hola,
te he enviado un PM.

De todas maneras si no has conseguido compilar el proyecto, igual no podrás ejecutarlo, por lo de las dependencias y demás, pero pruébalo "for if the flies"...
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo