gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:06:03 27 4
gpt4 key购买 nike

我在尝试解析 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吨
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 事件, channel (非元)1001=注释, channel =0000
61 注意有 2 个参数,这是第一个
40 这是第二个
9A可变时间10011010
20个可变时间00100000

这就是我的问题所在,没有事件类型为0x6的事件,因为0x61是01100001,我们必须假设它是非元,因此事件类型应该是6(0110)并且 channel 是(0001)但 midi 规范不包含此事件的标识。我在这之后添加了一些字节,以防它们在某种程度上相关,但显然此时我的程序到达下一个字节,无法识别该事件并且炸弹爆炸了。
61
00
83
60
63
40
不列颠哥伦比亚省

如果有人认为他们可以阐明我的解析逻辑出了问题的地方,我将非常感激,对格式感到抱歉,我想不出更好的方法来说明我的问题。

我一直在使用这个网站:http://www.sonicspot.com/guide/midifiles.html作为引用,到目前为止它还没有让我出错。我认为这可能与着火的烦恼直接相关,但似乎并非如此,因为我下载了游戏的另一个注释文件,并且该文件不包含此事件。

提前致谢。

最佳答案

它的名字是 running status 。如果事件与前一个事件类型相同,则可以消除 MIDI 状态字节。因此,如果计时信息后的第一个字节 < $80,则使用之前的状态。对于 $61 字节,之前的状态是 $90,因此它是音符打开, channel 0。这是有道理的,因为之前的事件是音符编号 $61 力度 $40。该事件是音符编号 $61、力度 0(释放先前弹奏的音符)。下一个事件是音符编号 $63,速度 $40。

关于parsing - midi 文件解析,无法识别的事件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7719366/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com