2012-09-13 32 views
1

基本上,我希望獲取並顯示作爲音序器實時播放它的midi音符(音軌,音符和八度音階)的數據。實時處理midi筆記

我希望能夠把它添加到下面的代碼:

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; 
    } 
} 

但我不知道該怎麼做。

回答

2

將一個ControllerEventListener添加到Sequencer中。它將爲您節省積極的等待時間,並提供您需要顯示的所有信息。

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); 

看看這page以及。

+0

它似乎沒有工作,出於某種原因,我可以使用一個壞的MIDI? –