2012-09-13 5 views
1

Fondamentalement, je veux obtenir et afficher les données d'une note MIDI (la piste, la note et l'octave) comme un séquenceur la joue, en temps réel.Traitement des notes midi en temps réel

Je voudrais pouvoir ajouter ceci au code suivant:

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

Mais je ne sais pas comment le faire.

Répondre

2

Ajoutez un ControllerEventListener au séquenceur. Il vous permettra d'économiser l'attente active et fournira toutes les informations dont vous avez besoin d'afficher.

ControllerEventListener controllerEventListener = new ControllerEventListener() { 
    public void controlChange(ShortMessage event) { 
     // TODO convert the event into a readable/desired output 
     System.out.println(event); 
    } 
}; 

Sequencer sequencer = MidiSystem.getSequencer(); 
int[] controllersOfInterest = { 1, 2, 4 }; 
sequencer.addControllerEventListener(controllerEventListener, controllersOfInterest); 

Regardez également ce page.

+0

Il ne semble pas fonctionner, pour une raison quelconque, pourrais-je utiliser un mauvais midi? –