[英]Write midi file in JAVA
我尝试用Java编写简单的Midi文件,但无法打开它。 我只创建了三个同时演奏的音符。
这是我的代码:
file_midi.write("MThd".getBytes());
file_midi.write(fourToBytes(length));
file_midi.write(formatType);
file_midi.write(nbreVoies);
file_midi.write(PPQN);
file_midi.write("MTrk".getBytes());
file_midi.write(fourToBytes(31));
temp = (char)choix_inst[0];
file_midi.write(zero);
file_midi.write(c);
file_midi.write(zero);
num_note_midi = 50;
velocity = 10;
file_midi.write(zero);
file_midi.write(non);
file_midi.write(num_note_midi); //numéro de la note
file_midi.write(velocity); //vélocité de la note
num_note_midi = 60;
file_midi.write(zero);
file_midi.write(non);
file_midi.write(num_note_midi); //numéro de la note
file_midi.write(velocity); //vélocité de la note
num_note_midi = 70;
file_midi.write(zero);
file_midi.write(non);
file_midi.write(num_note_midi); //numéro de la note
file_midi.write(velocity); //vélocité de la note
num_note_midi = 50;
t_note_midi = 160;
file_midi.write(WriteVarLen(t_note_midi));
file_midi.write(noff);
file_midi.write(num_note_midi); //numéro de la note
file_midi.write(velocity); //vélocité de la note
num_note_midi = 60;
file_midi.write(WriteVarLen(t_note_midi));
file_midi.write(noff);
file_midi.write(num_note_midi); //numéro de la note
file_midi.write(velocity); //vélocité de la note
num_note_midi = 70;
file_midi.write(WriteVarLen(t_note_midi));
file_midi.write(noff);
file_midi.write(num_note_midi); //numéro de la note
file_midi.write(velocity); //vélocité de la note
file_midi.write(zero);
file_midi.write(ff);
file_midi.write(a_2f);
file_midi.write(zero);
file_midi.close();
然后我以十六进制格式显示此midi文件,这似乎与普通的midi文件格式相对应。
4D 54 68 64 00 00 00 06 00 01 00 01 00 A0 4D 54 72 6B 00 00 00 1F 00 C0 00 00 90 32 0A 00 90 3C 0A 00 90 46 0A A0 80 32 0A A0 80 3C 0A A0 80 46 0A 00 FF 2F 00
我的文件怎么了?
该WriteVarLen
函数无法正常工作。
编码为可变长度数量的值160必须导致字节81 20
。
您是否考虑过使用JFugue ? 如果这样做,您的代码将如下所示:
// Notes 50, 60, and 70, using the default of a quarter duration, on-velocity of 10
Pattern pattern = new Pattern("50a10 60a10 70a10");
MidiFileManager.savePatternAsMidi(pattern, new File("filename.mid"));
如果在写入文件时遇到问题,请放入try / catch块,然后完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.