MIDI 文件格式
SMF 用 MThd 与 MTrk 组织事件,0 与 1 两种格式各有用途。
相关
文件格式决定事件怎样排队,也决定拆轨与变速是否方便。
问题
同一段演奏,存成一条轨还是多条轨,编辑体验完全不同。拿到的文件打不开、速度不对、轨道全挤在一起,往往要从文件头找原因。
协议或消息
文件以 MThd 开头,头长 6 字节,记录 format、ntrks 与 division,整个头共 14 字节。format 0 只有一条 MTrk;format 1 有多条同步的 MTrk,通常第一条放速度与拍号;format 2 是彼此独立的片段,很少见。每条 MTrk 里是 delta time 加事件,delta 用可变长度编码。division 表示每四分音符的 tick 数,也可以写成 SMPTE。Meta 事件以 0xFF 开头,0x51 是速度,0x58 是拍号,0x2F 是结束。
参数与做法
编曲用 format 1,分轨清楚。交换文件也用 format 1,兼容性最好。小型播放器可以吃 format 0。改速度时确认改在 tempo 轨上。
听什么
两种格式回放应当一致。若不一致,多半是速度轨或通道分配出了问题。拆轨后逐轨听,确认力度与踏板还在原来的位置。
常见误解
轨道数不等于通道数。format 1 的所有轨共用一条时间线。扩展名相同不代表都是 GM。
在库中听例子
sailors battle midi theme 9format 0,单条 MTrk 装着 5 个通道、1081 个音符详情Piano Quintet in A major · 2. Andanteformat 1,18 条 MTrk,速度表里有多次变速详情intro verse1 copyformat 1,32 条 MTrk,却只用 16 个通道详情
每首均来自 midicn-lib,行内徽标为许可档位(C1 可商用 / C2 非商业 / C3 仅学习研究)。
事实来源
- SMF 1.0 规范对 MThd 与 MTrk 的结构定义,依 MMA 公开规范核查,未抄文本
- format 0、1、2 与 division 的用法,依通行音序器文档核查,未抄文本
仅用于核查事实,正文为原创撰写。