读MIDI文件

使用多个轨道读取MIDI文件(按时间顺序)的最佳方法是什么? (JAVA)

注意:我不想播放MIDI文件,只需阅读信息即可。

夫妻想法:

假设没有短于1/64音符的音符事件是否安全? 或者我应该访问每个轨道并且只在所有其他刻度轨道之后移动到下一个刻度线

  • 假设没有midi事件短于1/64注释,并将当前位置滴答计数移动该固定增量。
  • 访问每个轨道并进入下一个最早的刻度线

JFugue可以读取MIDI文件并按时间顺序对消息进行排序。

结果可以读作JFugue MusicStrings(例如,C-sharp,第5个八度,整个音符=“C#5w”),或者您可以编写自己的ParserListener并将其附加到MidiParser,以便输出自己的文本。

在Java中,您可以使用以下内容读取midi文件:

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

此代码应读取您的midi文件(即使有多个曲目)