2009-07-25 24 views
8

¿Cuál es la mejor manera de leer un archivo MIDI (cronológicamente) con varias pistas? (Java)Lectura de archivos MIDI

Nota: No quiero reproducir el archivo MIDI, solo lea los mensajes.

las ideas de los pares:

¿Es seguro asumir que no hay eventos de nota más corta que la nota 1/64º? O debería visitar cada pista y sólo pasar a la siguiente señal después de todos los demás garrapatas pistas

  • asumir que no hay ningún evento midi más corto que un billete de 1/64º, y mover la posición actual del conteo de garrapatas por que el delta del arreglo.
  • Visita cada pista y el progreso al siguiente temprano garrapata
+1

No es seguro asumir 1/64 notas, 1/128 también existen, por ejemplo. Sin embargo, es seguro asumir que los datos se almacenan en un solo byte. (Puede evaluar aquellos con la clase MidiMessage). –

+0

@yxk También me gusta crear partituras adecuadas desde el archivo Midi. ¿Tienes y guías para que arranque? – Kalpesh

+0

Anvil Studio tiene una opción de $ 60 que imprimirá partituras desde archivos Midi. Además, ¿alguien sabe alguna opción java de código abierto que lea un archivo MIDI? –

Respuesta

0

En Java, se puede leer un archivo MIDI con:

try { 
     Sequencer sequencer = MidiSystem.getSequencer(); 
     sequencer.setSequence(MidiSystem.getSequence(yourMidiFile)); 
     sequencer.open(); 
     sequencer.start(); 
     while(true) { 
      if(sequencer.isRunning()) { 
       try { 
        Thread.sleep(1000); // Check every second 
       } catch(InterruptedException ignore) { 
        break; 
       } 
      } else { 
       break; 
      } 
     } 

} catch(Exception e) { 
     System.out.println(e.toString()); 
} finally { 
    // Close resources 
    sequencer.stop(); 
    sequencer.close(); 
} 

Este código debe leer sus archivos midi (incluso si hay múltiples pistas)

+0

No necesariamente quiero reproducir la secuencia, solo obtengo los mensajes del evento en las pistas – yxk

+0

@srand. Supongo que esto es solo un ejemplo, puede usar las clases MidiSystem, Sequence y Track para leer los MidiEvents almacenados en el archivo. –

+0

@Jasper Sí, eso es lo que estoy haciendo actualmente, sin embargo es una lectura serial/secuencial del archivo midi (y no cronológico). – yxk

3

JFugue puede leer un archivo MIDI y ordenar los mensajes en orden cronológico.

Los resultados se pueden leer como JFugue MusicStrings (por ejemplo, C-sharp, 5th octave, whole note = "C# 5w"), o puede escribir su propio ParserListener y adjuntarlo al MidiParser para que pueda tu propio texto