我正在尝试从头开始编写Midi文件。它将演奏C小调的3小调琶音。我一直在使用sublime文本通过十六进制编码进行保存。然后将结果导入逻辑(将扩展名更改为.mid之后)。到目前为止,这还没有成功,并且逻辑什么也没做。
我从here获得了大部分信息,并编写了以下内容:
4d 54 68 64 00 00 00 06 00 00 00 01 00 18 4d 54 72 6b 00 00 00 1e 80 18 81 3c 7f 80 00 91 3c 00 80 18 81 40 7f 80 00 91 40 00 80 18 81 43 7f 80 00 91 43 00
这是每个字节的分割,以注释形式显示,但总结了我对文件格式的理解:
任何人都可以指出为什么这不能将正确的结果加载到Logic中。我是否误解了文件格式本身,或者是编码中更深层的问题。
更新:这是最终的,更正的十六进制...
4d 54 68 64 00 00 00 06 00 00 00 01 00 18 4d 54 72 6b 00 00 00 22 80 18 91 3c 7f 80 00 81 3c 00 80 18 91 40 7f 80 00 81 40 00 80 18 91 43 7f 80 00 81 43 00 00 ff 2f 00
最佳答案
轨道缺少轨道结束元事件(类型2F,长度为0)。因此,添加字节00 FF 2F 00
,并相应地调整轨道大小。
该音轨包含六个MIDI消息。全部六个都是注释信息,因此没有任何实际的注释。8x
是一个注释信息。9x
是一个音符开启消息,但是速度为0时实际上表示音符消失。 (这是一种优化方法,在使用运行状态时很有用。)
关于encoding - 使用十六进制从头开始写入Midi文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44142513/