首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JAVA编写midi文件

用JAVA编写midi文件
EN

Stack Overflow用户
提问于 2016-08-24 00:55:53
回答 2查看 558关注 0票数 0

我试着用java写简单的midi文件,但是我打不开它。我只是创建了三个同时播放的音符。

这是我的代码:

代码语言:javascript
复制
    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文件格式。

代码语言:javascript
复制
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

我的文件有什么问题?

EN

回答 2

Stack Overflow用户

发布于 2016-08-24 01:36:12

WriteVarLen函数不能正常工作。

编码为可变长量的值160必须产生字节81 20

票数 0
EN

Stack Overflow用户

发布于 2016-10-15 05:14:16

你有没有考虑过使用JFugue?如果您这样做了,您的代码将如下所示:

代码语言:javascript
复制
// 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块,以防在写入文件时出现问题,这样就完成了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39106833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档