MIDI文件字节布局

时间:2017-04-03 14:35:51

标签: midi

基于this page,我开始学习MIDI是如何工作的,我下载了一个示例MIDI文件,看看我是否可以提取所有信息。

这是MIDI文件:

4D 54 68 64 00 00 00 06 00 01 00 03 00 04 4D 54
72 6B 00 00 00 A1 00 C0 69 00 90 3C 5A 01 41 5A ...

前14个字节是标题信息,我对它们没有任何问题。

以下字节表示有关轨道块的信息;前四个是4D 54 72 6B,在ascii中是Mtrk,它决定了一个跟踪块;以下4个字节确定同一个块中最后一个字节后面的字节数,因此00 00 00 A1(十进制为161)表示在同一个磁道块后面有161个字节

现在轮到跟踪事件

第一个字节是00,它告诉delta时间是0,下一个字节告诉我们它是midi事件(更确切地说,是程序更改命令选择MIDI通道69中的程序0 - 来自here)。

下一个字节是另一个跟踪事件的开始,其中delta-time设置为0;它是频道0上的音符 MIDI事件,注意3C5A的速度。

问题在于,在delta-time设置为01的下一个事件中,事件键值为41,它既不是midi事件,也不是sys事件,也不是元事件。

这里发生了什么?我做错了什么?

1 个答案:

答案 0 :(得分:0)

标准MIDI文件可以使用Running Status字节 - 在通道上发送的最后一个状态字节保持有效,直到另一个状态/等。 (以及您还显示的5A是第二个Note On事件的速度。)

当通过电缆以31.25 kb /秒发送MIDI数据时,允许系统省略冗余数据有效地增加了电缆上的可用带宽。