Encoding 使用十六进制从头开始编写Midi文件

Encoding 使用十六进制从头开始编写Midi文件,encoding,format,hex,sublimetext,midi,Encoding,Format,Hex,Sublimetext,Midi,我正试图从头开始编写一个midi文件。它将演奏一个C大调的三个小节的琶音。我一直在使用升华文本保存使用十六进制编码。然后将结果导入逻辑(将扩展名更改为.mid之后)。到目前为止,这是不成功的,逻辑根本没有任何作用 我从中获得了大部分信息,并写了以下内容: 4d 54 68 64 00 00 06 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

我正试图从头开始编写一个midi文件。它将演奏一个C大调的三个小节的琶音。我一直在使用升华文本保存使用十六进制编码。然后将结果导入逻辑(将扩展名更改为.mid之后)。到目前为止,这是不成功的,逻辑根本没有任何作用

我从中获得了大部分信息,并写了以下内容:

4d 54 68 64 00 00 06 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

下面是每个字节的分解图,它以注释形式出现,但总结了我对文件格式的理解:

有人能指出为什么这不能将正确的结果加载到逻辑中吗。我是否误解了文件格式本身,或者问题在于编码更深。
更新:这是最终的十六进制更正…

4d 54 68 64 00 00 06 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 ff 2f 00


该曲目缺少曲目结束元事件(类型2F,长度0)。因此,添加字节
00ff2f00
,并相应地调整磁道大小

该曲目包含六条MIDI信息。所有六条都是注释信息,因此没有任何实际注释

8x
是一条备忘信息。
9x
是消息上的注释,但速度为0实际上指定了注释关闭。(这是一种优化,在使用运行状态时非常有用。)