读取具有多个轨道的 MIDI 文件(按时间顺序)的最佳方法是什么?(爪哇)
注意:我不想播放 MIDI 文件,只是阅读消息。
几个想法:
假设没有短于 1/64 音符的音符事件是否安全?或者我应该访问每个轨道并且只在所有其他滴答轨道之后移动到下一个滴答
- 假设没有短于 1/64 音符的 midi 事件,并将当前位置滴答计数移动该固定增量。
- 访问每个轨道并前进到下一个最早的滴答声
JFugue可以读取 MIDI 文件并按时间顺序对消息进行排序。
结果可以读取为 JFugue MusicStrings(例如,升 C,第 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 文件(即使有多个轨道)