根据本教程,我正在尝试编写一个 C++ 程序,该程序以十六进制格式读取 MIDI 并推断必要的数据。在轨道块信息中,第一个信息是您正在查看轨道“MTrk”的事实。第二个 4 字节指的是块大小。
据我了解,块大小是指下一个轨道块开始之前的字节数,或者文件结尾。但是,在我一直使用的 midi 文件中,我的块大小通常太小。也就是说,假设块大小为 40 字节:下一个“MTrk”直到当前一个字节之后的大约 70 个字节才会出现(我确实考虑了“MTrk”和块大小本身不是块大小的一部分)。那么,这些额外的 30 个字节是什么?我应该截断块大小之后出现的字节吗?或者我应该忽略块大小并继续阅读,直到遇到下一个轨道(或 FF2F00,表示轨道结束)?
在读入一个 MIDI 文件后,我记录了以下内容作为输出:
4D546864000000060001000300604D54726B0000000B00FFFFFFFF510306FFFFFF8A1B00FFFFFFFF2F004D54726B
下面我将有意义的部分分开:
4D546864
00000006
0001
0003
0060
(标题结束)
4D54726B
0000000B
(块大小 = 11 个字节)
00FFFFFFFF510306FFFFFF8A1B00FFFFFFFF2F00
(但在这里我们看到 20 个字节)
4D54726B
这是我使用的 MIDI 文件。