Parsing 如何解析/忽略标准MIDI文件中未指定的命令?

Parsing 如何解析/忽略标准MIDI文件中未指定的命令?,parsing,midi,smf,Parsing,Midi,Smf,我正在尝试解析MIDI文件,但我的解析器无法解析来自internet的大多数MIDI文件,因为它在SMF规范中未指定的命令字节上不断出现问题。使用FL Studio导出的MIDI文件工作正常,但几乎所有其他MIDI文件都会中断 例如,from: 00 B0 20 02 | 00 00 | 00 C0 00 第一部分很容易解析。这是根据MIDI规范进行的控制更改。但第二部分毫无意义。在0滴答声之后,具体做什么?在那之后我可以期望有多少字节?在SMF中未将0x00指定为命令。然而,后面的部分是可识别

我正在尝试解析MIDI文件,但我的解析器无法解析来自internet的大多数MIDI文件,因为它在SMF规范中未指定的命令字节上不断出现问题。使用FL Studio导出的MIDI文件工作正常,但几乎所有其他MIDI文件都会中断

例如,from:
00 B0 20 02 | 00 00 | 00 C0 00
第一部分很容易解析。这是根据MIDI规范进行的控制更改。但第二部分毫无意义。在0滴答声之后,具体做什么?在那之后我可以期望有多少字节?在SMF中未将0x00指定为命令。然而,后面的部分是可识别的,因此您可以看到第二部分有1个数据字节

然而,如果我只是解决前面的问题,那么以后它就会变成一团乱麻:
00 C000 | 00 B0 07 6E | 00 0A 40 00 5B 46 00 5D 00 5E 19 86 70 90 41 6E 00 45 45 00 41 00 43 6 E 48 43 00 48 00 48 00 6 E 60 48 00 00 3C 6 E 00 35 6 E 30 35 00[等]
好吧,让我们看看。补丁更改,请检查。控制器更换,检查。0A?0A到底是干什么的?在0A部分之后尝试识别任何命令也不起作用,这都是一个大混乱,我不知道该0A命令属于什么,也不知道下一个实际的SMF命令何时启动。我根本不知道在这混乱之后如何解析剩下的曲目


然而,像Winamp和FL Studio这样的程序可以很好地打开这些MIDI文件。他们是怎么做到的?我如何知道垃圾数据何时结束和正确的命令何时开始?

这不是垃圾数据。这就是运行状态。如果在处理命令后,下一个字节小于$80,则假定与上一个命令的状态字节相同