Parsing midi文件解析,无法识别的事件类型

Parsing midi文件解析,无法识别的事件类型,parsing,midi,Parsing,Midi,我在解析midi文件时遇到问题。我正在尝试解析frets on fire游戏使用的notes文件(它只使用midi文件,所以我认为这不相关),如果你们中的任何人都熟悉它,那么我遇到的问题就是一般的midi问题。我有一个名为吉他部分的曲目文件,hex,在hex编辑器中查看如下: 4D 54 72 6B 00 1E 74 00 FF 03 0B 50 41 52 20 47 55 49 54 41 52 A9 20 90 61 40 9A 20 61 00 83 60 63 40 BC 我的程序按如

我在解析midi文件时遇到问题。我正在尝试解析frets on fire游戏使用的notes文件(它只使用midi文件,所以我认为这不相关),如果你们中的任何人都熟悉它,那么我遇到的问题就是一般的midi问题。我有一个名为吉他部分的曲目文件,hex,在hex编辑器中查看如下:

4D 54 72 6B 00 1E 74 00 FF 03 0B 50 41 52 20 47 55 49 54 41 52 A9 20 90 61 40 9A 20 61 00 83 60 63 40 BC

我的程序按如下方式解析此罚款:

4D M
54t
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“我”
54“T”
41“A”
52“R”
A9事件时间(可变长度)10101001
20事件时间(可变长度)00100000
90事件,频道(非元)1001=注意,频道=0000
61注意:上有2个参数这是第一个
40这是第二次
9A可变时间10011010
20可变时间00100000

这就是我的问题所在,没有事件类型为0x6的事件,因为0x61是0110001,我们必须假设它是非元的,因此事件类型应该是6(0110),通道是(0001),但midi规范不包含此事件的标识。。我在此之后添加了一些字节,以防它们以某种方式相关,但显然在我的程序点击下一个字节时,无法识别事件并爆炸。
61
00
83
60
63
40
BC

如果有人认为他们可以解释我的解析逻辑哪里出了问题,我会非常感激,很抱歉格式化了,我想不出更好的方法来说明我的问题

我一直在使用这个网站:作为参考,到目前为止,它还没有让我出错。我想这可能与《火上烦恼》有直接关系,但似乎不是,因为我为游戏下载了另一个notes文件,该文件不包含此事件


提前谢谢。

这是电话。如果一个事件与前一个事件的类型相同,则可以消除MIDI状态字节。因此,如果计时信息后的第一个字节<$80,则使用前一个状态。在$61字节的情况下,以前的状态是$90,因此它在通道0上显示。这是有道理的,因为之前的事件是61美元40美元。此事件为音符编号$61 velocity 0(释放先前播放的音符)。下一个活动是纸币编号$63 velocity$40。

太棒了!这是有道理的。我想知道为什么我提到的网站上也没有这些信息。非常感谢,稍后我会对我的程序进行一些修改,看看我会怎么做。谢谢!这似乎确实是作者的疏忽。他还忽略了一个事实,即速度为零的音符是一个音符。这比看到一个实际的Note Off命令要常见得多(正如您在发布的摘录中所看到的)。