这个真的是费了好大好大好的的劲才弄出来。。。
格式
头区块 (Head Chunk)
MThd + +
头区块字符长度 一般为 6
轨道区块 (Track Chunk)
Track Chunk = MTrk + +
区块字符长度 是 4 byte 的无符号长整型
= + ( | | )
时间戳 为用 VLQ 表示的相对于上一个数据点的时间变化量 (delta time)
= \xFF + + +
类型 为 1 byte 的字节,对照表在下文
数据长度 为用 VLQ 表示的数据块的字符数
例子
比如下面这段 bwv806a.mid 的前 200 字节:
MThd\x00\x00\x00\x06\x00\x01\x00\x04\x00\xf0MTrk\x00\x00\x00G\x00\xff\x03\x08untitled\x00\xffT\x05`\x00\x03\x00\x00\x00\xffX\x04\x0c\x03\x0c\x08\x00\xffY\x02\x00\x00\x00\xffQ\x03\x06EO\x83\x97h\xffQ\x03\x07\xa1 \x82h\xffQ\x03\t\xa3\x1b\x82h\xffQ\x03\x0c\xe5\x0e\x00\xff/\x00MTrk\x00\x00\n\xd9\x00\xff!\x01\x00\x00\xff\x03\x1bEnglish Suite 1, 1. Prelude\x00\xc0\x00\x00\xb0\x07d\x00\n@\x90p\x90Qk\x81pLkxIk\x82hEk`Q\x00\x18PkHL\x00\x00E\x00\x00I\x00\x18P\x00\x18Nk`N\x00\x18Lk`L\x00\x18Nk`N\x00\x18
翻译后如下:
MThd
\x00\x00\x00\x06
\x0