我在尝试解析 MIDI 文件时遇到问题。我正在尝试解析 frets on fire 游戏使用的注释文件(它只使用 midi 文件,所以我认为这无关紧要)如果你们中的任何人熟悉它,我遇到的问题是一般的 midi 问题。我有一个文件,其中有一个名为吉他部分的轨道,十六进制,在十六进制编辑器中查看如下:
4D 54 72 6B 00 00 1E 74 00 FF 03 0B 50 41 52 54 20 47 55 49 54 41 52 A9 20 90 61 40 9A 20 61 00 83 60 63 40 BC
我的程序对此进行了如下解析:
4D M
54 T
72 R
6B K
00 00 尺寸
1E轨道部分
74 -- >
本次活动时间00
FF 事件类型(这是元)
03 元事件类型
0B 数据长度
50 "P"
41 "A"
52 "R"
54 "T"
20 " "
47 "G"
55 "U"
49 "I"
54 "T"
41 "A"
52 "R"
A9 事件时间(可变长度)10101001
20 次事件(长度可变)00100000
90 事件,通道(非元)1001=注释,通道=0000
61 注意有 2 个参数,这是第一个
40 这是第二个
9A可变时间10011010
20个可变时间00100000
这就是我的问题所在,没有事件类型为0x6的事件,因为0x61是01100001,我们必须假设它是非元,因此事件类型应该是6(0110),通道是(0001),但是midi规范不包含此事件的标识。我在此之后添加了一些字节,以防它们在某种程度上相关,但显然此时我的程序到达下一个字节,无法识别该事件并崩溃。
61
00
83
60
63
40
BC
如果有人认为他们可以阐明我的解析逻辑出了问题的地方,我将非常感激,对格式感到抱歉,我想不出更好的方法来说明我的问题。
我一直在使用这个网站:http://www.sonicspot.com/guide/midifiles.html http://www.sonicspot.com/guide/midifiles.html作为参考,到目前为止它还没有让我出错。我认为这可能与着火的烦恼直接相关,但似乎并非如此,因为我下载了游戏的另一个注释文件,并且该文件不包含此事件。
提前致谢。
它被称为运行状态 http://home.roadrunner.com/~jgglatt/tech/midispec/run.htm。如果事件与前一个事件类型相同,则可以消除 MIDI 状态字节。因此,如果计时信息后的第一个字节
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)