基本上,我想在音序器实时播放时显示并显示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;
    }
}


但是我不知道该怎么做。

最佳答案

将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

09-19 00:41