我试着用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我的文件有什么问题?
发布于 2016-08-24 01:36:12
该WriteVarLen函数不能正常工作。
编码为可变长量的值160必须产生字节81 20。
发布于 2016-10-15 05:14:16
你有没有考虑过使用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块,以防在写入文件时出现问题,这样就完成了。
https://stackoverflow.com/questions/39106833
复制相似问题