Estoy reproduciendo una canción MIDI usando Java Sequencer. La canción está diseñado para ser colocado de forma continua, lo que puedo hacer fácilmente con
sequencer. setLoopCount (Sequencer.LOOP_CONTINUOUSLY)
Cuando se juega a través del sintetizador interno (tarjeta de sonido) esto funciona bien y (con la adición de un dummy event si es necesario) la temporización de bucle en el clavo.Separación de eventos de canción MIDI desde los eventos de configuración inicial
Sin embargo, cuando se reproduce a través de un sintetizador externo (USB o serie), hay un espacio notable en la salida en el punto donde gira. Esto se explica por el hecho de que hay muchos eventos de configuración al comienzo del archivo .mid que tardan un poco en enviarse a través de la línea serie.
Lo que me gustaría probar está aislando a los eventos de configuración de una sola vez en su propio Sequence
que se envía al dispositivo una vez cuando se carga la canción, pero mantuvo fuera de la principal (bucle) Sequence
.
¿Existe un algoritmo simple (o función de biblioteca) que pueda distinguir los dos tipos de eventos?
Se tendría que prever:
- Registered parameter cambios, que se envían como un grupo de mensajes relacionados.
- Ocasionalmente los cambios de programa de canal se envían en medio de una pista (y deben ser parte de la secuencia de bucle), pero donde se mantiene el mismo programa durante toda la canción (la mayoría de los casos) el cambio de programa debe ser parte del secuencia de configuración. Lo mismo se aplica a los cambios de tempo.
* Esto se explica por el hecho de que hay muchos eventos de configuración al inicio del archivo .mid que tardan un poco en enviarse a través de la línea serie * - ¿es esto una suposición o una estimación o tiene una fuente (artículo técnico o salida de depuración) para demostrarlo? –
@Charles Goodwin, no He probado esto eliminando eventos manualmente – finnw