Standard MIDI File · Format 0/1 · 事件物化 · 空工程回导
MIDI 鼓型导出后为什么变声、变速或合并轨道?跨 DAW 回导测试
同一个鼓型在源工程里正常,导成 .mid 后却换了鼓声、速度不对、微小位移,或者原来的 Kick、Snare、Hat 轨道合成一条。先别把这些现象都叫作“导出坏了”。Standard MIDI File 传递的是带时间的 MIDI 事件与部分元数据,不是鼓采样、插件、混音器,也不是完整 DAW 工程。用 N0→M1→X1→V1 把原生播放、实际事件、文件合同与目标端回导分开,才能判断丢失发生在哪一层。
范围:本文讨论你有权导出的 Standard MIDI File(SMF)鼓事件在不同 DAW 间的交付,不讨论复制未获许可的音源、采样或插件。MIDI Association、Ableton、Apple 与 Steinberg 的资料说明 SMF 的边界、Format 0/1、Live 的导出格式与分辨率、Logic Pro 的导出准备,以及 Cubase 的速度/拍号与 Inspector 设置处理;N0→M1→X1→V1、事件账本、交付合同、故障矩阵与停止条件是 FingerDrum 的原创综合。本文不声称 FingerDrum 能导入或导出 MIDI,也不把 General MIDI(GM)映射、同名轨道或相同 BPM 当作声音一致的保证。
.mid 可以带走音符、通道、力度、控制器和速度/拍号等事件,但不会把原鼓音源和 DAW 工程一起装进去。
先在源工程保存原生基线与音频参考 N0;再把量化、移调、延迟、音色选择等必要播放状态转换成可见的实际 MIDI 事件,得到 M1;随后用 X1 写明 SMF Format、PPQ、轨道/通道、速度/拍号、音符映射和预期范围;最后在目标 DAW 的空工程中回导并建立 V1。只有事件结构、时间坐标和已声明映射都通过,才能说“鼓型可移植”;音色是否相同仍要靠同一音源或另交音频参考。
先定交付边界:SMF 是事件容器,不是鼓声音频或 DAW 工程
MIDI Association 对 Standard MIDI File 的定位是:在软件之间交换带时间戳的 MIDI 数据。SMF 可以容纳一个或多个 MIDI 流,并支持速度、拍号、轨道名称等结构;但 MIDI 文件不必存储真实声音,而是让接收端的声音引擎按事件生成声音。因此,Note 36 在两台机器上都存在,只证明两边看到了同一个音符编号,不证明它们加载了同一个 Kick 采样、相同力度层、Round-robin、包络、效果或总线。
| 交付物 | 通常能保留 | 通常不能替你保留 | 本文角色 |
|---|---|---|---|
| Standard MIDI File | Note On/Off、力度、通道、部分 CC/Program、速度/拍号与轨道结构 | 采样音频、插件实例、专有鼓架、混音处理与完整工程路由 | N0→M1→X1→V1 的主对象 |
| 音频参考 | 源工程当时实际发出的声音与尾音 | 逐音符编辑、鼓件映射与目标端换音色能力 | N0 的可听真相,不替代 MIDI |
| DAW 原生工程 | 宿主专有设备、路由、片段参数与更多编辑状态 | 另一款 DAW 的直接兼容性;外部插件与采样仍可能缺失 | 保留发送端基线,不当跨 DAW 标准 |
| 交付说明 | Format、PPQ、轨道/通道、Tempo/Meter、鼓音符表与例外 | 不能自行发声,也不能修正坏文件 | X1 的合同与复测入口 |
这也解释了三个常见误会。“变声”往往是目标端换了声音引擎或映射;“合并轨道”可能只是收到 Format 0;“变速”则需要继续区分文件里的 tempo meta event、目标端的导入方式,以及鼓型本身的音乐位置是否改变。不要用一种修复同时改三层。
N0 · 在导出前冻结原生基线、事件账本与音频参考
N0 回答“源工程此刻到底是什么”。如果只保留导出的 .mid,导入后看到差异时就没有独立参照:不知道原来的 ghost note 是力度 38 还是 58,不知道第 4 小节是否有拍号变化,也不知道军鼓变 Tom 是事件编号改变还是目标音源映射不同。
- 另存不可改基线:复制源工程并写明 DAW、版本、日期、工程速度模式和导出范围;后续物化与接合只在工作副本进行。
- 选一个诊断段:至少覆盖核心 Kick、Snare、闭/开 Hat、一次同时击打、一个弱击、一个小节边界;若工程有速度或拍号变化,范围必须跨过其中一次变化。
- 导出音频参考:从同一起点生成一份无损立体声参考,保留源音源和处理。它用于确认“原来听起来怎样”,但不拿来证明 MIDI 事件正确。
- 保存原生 MIDI 副本:保留未接合、未永久量化、未转写宿主参数的版本;N0 必须能回退,M1 才能解释每次转换。
- 填事件账本:记录每个声部的数字音符编号、通道、事件数、首末起音、最小/最大力度、Note Off 或长度、关键 CC/Program,以及速度/拍号事件位置。
| 层 | 记录字段 | 示例写法 | 不据此推断 |
|---|---|---|---|
| Note | 数字音符、通道、起点、释放/长度、力度 | n=38 · ch=10 · bar 2 beat 2 · vel=104 | 38 在所有音源都一定是同一军鼓采样 |
| Controller | CC 编号、值、首个位置与变化次数 | CC4 · 0→72→127 · 3 events | 目标音源一定把同一 CC 解释为同一踩镲状态 |
| Program | Bank/Program 事件及通道 | Bank ___ · Program ___ · ch ___ | 不同插件会用同一 Program 号加载同一自定义 kit |
| Time | PPQ、Tempo、Meter、首拍与总长度 | 120 BPM · 4/4 · 4 bars · first note 1.1.1 | 界面显示相同 BPM 就没有起点或分辨率问题 |
| Structure | 轨道名、通道、每轨事件数 | Kick/ch10/16 · Snare/ch10/8 | Format 0 仍会保留原 DAW 的多轨界面 |
账本应优先写数字音符编号,不只写 C1、C2。不同软件可能用不同八度标签显示同一数字音符;这属于界面命名差异,不应被误记为移调。若源工程已经无法稳定复播,或每次播放会随机生成不同 MIDI,请先固定可复现的事件版本,再进入 M1。
M1 · 把必要的宿主播放状态变成实际 MIDI 事件
许多 DAW 参数在播放时会改变结果,却未必已经是片段里的 Note、CC、Bank 或 Program 事件。Apple 要求 Logic Pro 导出前永久应用 MIDI 片段参数和量化、把替身转为拷贝、把循环转成片段、按轨道接合,并把乐器 MIDI 设置插入为事件。Steinberg 说明 Cubase 的 MIDI Inspector 参数会实时影响播放;其 MIDI 导出只按 Export Options 写入指定设置,其他差异需要用 Merge MIDI in Loop 转成真实 MIDI 事件。M1 的目标不是“把所有东西烘焙”,而是只把接收端必须重现的变化物化,并保留 N0 以便回退。
| 宿主 | 官方边界 | M1 动作 | 导出前对账 |
|---|---|---|---|
| Ableton Live | 一次只导出一个 MIDI clip;若要整轨事件,官方建议先选择、Consolidate,再导出。Live 只导出 SMF0,分辨率为 96 PPQ,事件会移到该网格。 | 为目标范围建立一条明确的连续 clip;保留导出前副本,并把 96 PPQ 可能造成的微位移写进 X1。 | 比较源 clip 与导出后回读的起音、CC 和边界;不能只听音频。 |
| Logic Pro | 官方导出准备包括永久应用片段参数与量化、替身转拷贝、循环转片段、按轨道接合,并插入乐器 MIDI 设置事件。 | 在工作副本执行所需准备;每一步后更新 M1 账本,避免把多个变化混成一次不可解释操作。 | 确认多片段导出为 Format 1;只有启用相应设置并选择单片段时才导出 Format 0。 |
| Cubase | 导出包含 Tempo Track 的速度与拍号,或固定模式下当前速度与拍号;Inspector 设置需按导出选项写入,其他设置要先 Merge MIDI in Loop。 | 明确哪些 transpose、velocity、delay、patch、volume/pan 或 MIDI 处理属于交付结果,再转换或勾选对应导出项。 | 检查 Tempo/Signature 事件和已物化事件;不要把仅在 Inspector 中可见的值当作文件已包含。 |
物化会改变编辑状态,因此一定在副本执行。若某个宿主专有处理无法可靠转换成标准 Note/CC/Program 等事件,就把它列为 X1 例外,并同时交付 N0 音频参考;不要用“听起来像”冒充文件确实携带了该处理。
N0 副本已锁定 ___ · 导出范围 ___ · 量化已实际应用/不需要 ___ · 移调已实际应用/不需要 ___ · 延迟已实际应用/不需要 ___ · 力度缩放已实际应用/不需要 ___ · 循环/替身已展开 ___ · Bank/Program/CC 已成事件 ___ · 每次修改后的事件数 ___ · 无法物化的宿主处理 ___
X1 · 先写 SMF Format 0/1 合同,再发送文件
Format 0 与 Format 1 都是 Standard MIDI File。Apple 的说明很直接:Format 0 把所有数据放在一条轨道里;Format 1 可以包含多条各自独立的数据轨。Ableton 的说明进一步指出,SMF0 的数据只靠 MIDI 通道区分,导入 Live 后会显示在一条轨道;SMF1 可在不同轨道呈现。于是,“导入后轨道合并”可能完全符合所选格式,并不等于 Note 事件消失。
Kick track · Snare track · Hat track1 track → ch10:n36 · ch10:n38 · ch10:n42Kick track | Snare track | Hat tracksamples · plug-ins · mixer routing · proprietary devices结构示意:真实文件是否按通道或轨道分开,取决于发送端事件和导出实现。Format 1 保留多轨容器也不保证轨道内的音色、插件或路由会一并转移。
X1 不能只写“这是 MIDI”。至少声明以下字段,让接收端知道怎样判定成功:
- 文件身份:文件名、导出时间、大小,以及可选的校验摘要;若重导,改版本名,不覆盖唯一通过版。
- 格式与分辨率:SMF0 或 SMF1、PPQ、源 DAW 与版本。若来自 Live,明确写
SMF0 / 96 PPQ,不要暗示它保留源多轨。 - 音乐范围:第一小节/拍点、总小节数、是否有 pickup、速度与拍号事件位置;说明目标端应该导入 tempo map 还是保留自身速度。
- 轨道与通道:预期轨道数、每轨名称、MIDI 通道和事件数。Format 0 仍要列通道与鼓件,方便目标端再拆分。
- 映射合同:数字音符编号到鼓件角色的表,以及 CC、Bank/Program 的预期含义;GM 或 GM 派生映射只写成兼容起点,不写成声音身份保证。
- 声音后备:N0 音频参考、所用音源/kit 的文字说明,以及哪些宿主专有处理没有进入 SMF。
General MIDI 的价值是为兼容设备定义一组最低能力与常见映射,但它不携带原采样的波形或插件 preset。Ableton 也明确说明 Live 不会按 GM 自动分配声音。MIDI Association 的 Default Drum Note Map Profile 则把特定鼓类映射到音符编号;只有双方实际支持并启用相应约定时,它才构成明确的语义合同。对普通跨 DAW 文件,最稳妥的做法仍是附上自己的数字音符表,并在 V1 中逐项验证。
文件/版本 ___ · 源 DAW/版本 ___ · SMF0/1 ___ · PPQ ___ · 起点 ___ · 长度 ___ · Tempo events ___ · Meter events ___ · 轨道数 ___ · 轨道/通道/事件数 ___ · Note→鼓件表 ___ · CC/Bank/Program ___ · N0 音频 ___ · 未包含的音源/处理 ___
V1 · 在目标 DAW 的空工程回导:先看事件,再选声音
V1 必须在没有源工程路由和预加载鼓架的空工程里进行。这样可以区分“SMF 自己带来的数据”和“目标模板碰巧补上的设置”。第一次回导先不要为了好听而移动音符、量化或改 Tempo;任何自动导入选项都写进记录卡。
- 建立空工程:记录目标 DAW、版本、初始 BPM/拍号和 MIDI 导入偏好;不要从发送端模板或已有鼓工程开始。
- 只导入一次:选择是“打开为新项目”还是“导入当前工程”,并写清是否接受文件里的 Tempo/Meter。若软件询问导入选项,先截图或抄录再选择。
- 先查结构:在没有修改前记录实际轨道数、每轨通道、事件数、首末起音与文件总长度。SMF0 成为一轨时,继续核对通道和 Note,不立即判失败。
- 再查时间:核对 Tempo/Meter 事件位置、pickup、第一拍和小节边界;用事件列表或 piano roll 比较 M1,而不只看目标工程顶部显示的一个 BPM 数字。
- 再查表达:比较数字音符、力度、Note Off/长度、CC、Bank/Program。若源数据超出目标端支持范围,把它记为接收能力差异,不偷偷删除。
- 最后分配测试音源:先用已知映射的简洁鼓组逐声部试听,再按 X1 重建目标 kit。声音不同但事件一致时,结论应是“事件通过、音源未同一”,不是 MIDI 节奏失败。
- 用未改原文件重复:把同一个 X1 文件再次导入第二个空工程,或交给实际接收端复测;确认通过不依赖第一个 V1 工程里临时保存的映射、拆轨或修复。
| 门禁 | 通过证据 | 允许的已声明差异 | 失败示例 |
|---|---|---|---|
| 结构 | 轨道/通道与 X1 的 Format 合同一致 | SMF0 在目标端显示为一轨,但通道与 Note 都在 | 轨道合并后通道也被改写,无法按合同区分 |
| 事件 | 各声部 Note On 数、编号、力度和关键 CC 对上 M1 | 界面八度名称不同,但数字音符一致 | 弱击丢失、额外重复起音、CC 被删 |
| 时间 | 首拍、总长度、Tempo/Meter 与账本一致 | 已在 X1 声明的 PPQ 取整 | 整段错一拍、速度图被忽略、拍号变化丢失 |
| 声音 | 已按同一音源/映射重建,或明确只验事件 | 不同音源导致音色不同,但角色映射正确 | Note 38 在目标 kit 播成 Tom,却宣称完整通过 |
| 复现 | 未改 X1 在第二个空工程或实际接收端仍满足合同 | 轨道名的非关键格式差异已记录 | 只有第一个工程保存过临时修复后才通过 |
第一处差异在哪一层,就修哪一层
| V1 观察 | 首个可疑层 | 下一步 |
|---|---|---|
| Note 坐标一致,但 Kick/Snare 声音不同 | 音源/kit/Note 映射,不是事件时间 | 按 X1 数字音符表重建映射;若要声音一致,另交合法音源信息或 N0 音频 |
| 多条鼓轨导入后只剩一条 | SMF0 的单轨结构 | 检查通道与事件是否仍在;需要多轨时从支持 SMF1 的源端重导,或在目标端按通道/音符拆分 |
| 轨道仍分开,但整段快慢错误 | Tempo meta event 或目标端导入策略 | 核对 X1 Tempo/Meter 与目标导入选项,不先拉伸 MIDI 音符 |
| BPM 相同,第一拍却整体错位 | 导出范围、pickup 或目标插入位置 | 比较 M1 首个事件、X1 起点与目标导入游标;不要用重新量化掩盖恒定偏移 |
| Live 导出后少量微时序被取整 | 96 PPQ 导出分辨率 | 把回读坐标与 96 PPQ 网格对账;若精度不满足交付需求,停止并改用能满足合同的路径或交付音频参考 |
| Logic 中的量化/移调效果没有进入文件 | M1 未永久应用片段参数 | 回工作副本按官方准备流程物化,再生成新版本并从 N0 重新比较 |
| Cubase 播放时有 Delay/Velocity 变化,文件里没有 | Inspector/MIDI 处理未写入事件或导出项 | 明确启用相应 Export Options,或用 Merge MIDI in Loop 转为实际事件,再重做 M1 |
| GM kit 大致对,但开闭镲或自定义奏法仍错 | 兼容映射不足以描述专有表达 | 补充 CC/Note/奏法合同;无法标准化时列为 X1 例外并保留音频参考 |
| 第一次导入正常,第二个空工程却失败 | 第一次 V1 借用了模板、保存过的映射或未记录修复 | 回到未改 X1,记录两次导入选项与目标环境差异,不把工程内修复算进交付文件 |
以下任一情况都应停止放行:N0 没有可复现的源基线;M1 同时做了量化、移调和映射却没有逐步账本;不知道文件是 Format 0 还是 1;只靠轨道名猜通道;目标端为了“听起来正确”先移动了音符;把 GM 当成原采样身份;或 V1 只能证明文件能发声,不能证明 Note、Tempo、Meter 与结构对应。停止不等于文件无用,只表示它还没有达到已声明的跨 DAW 合同。
MIDI 鼓型跨 DAW 导出常见问题
Format 0 会把所有鼓音符变成同一个声音吗?
不会必然如此。Format 0 把数据放在一条轨道中,但不同 MIDI 通道和不同数字音符仍可存在。变成一个声音通常还涉及目标端的音源或映射。先核对 Note 与通道,再决定是否需要拆轨。
Format 1 是否一定保留源工程的所有鼓轨?
它支持多轨数据,但不会保存 DAW 的全部轨道类型、文件夹、插件链、路由或专有设备。还要看发送端选择了哪些片段和导出选项。用 X1 的“预期轨道/通道/事件数”验收,不以格式名称单独放行。
为什么 Live 导出的 MIDI 微时序和原 Clip 不完全一样?
Ableton 官方说明 Live 以 96 PPQ 导出,并把 MIDI 事件移到该网格,因此比这个网格更细的原位置可能改变。把这个限制写进 X1,并用导出后回读坐标判断是否在任务可接受范围;不要虚构一个通用毫秒容差。
只交一个 MIDI 文件,能让对方听到同一套鼓吗?
不能保证。MIDI 文件不存储原采样音频;即使有 Bank/Program 或 GM 映射,接收端的声音引擎、kit、力度层、包络和效果仍可能不同。若声音身份重要,同时交付 N0 音频参考与合法的音源/kit 说明。
GM 鼓映射是不是跨软件的万能标准?
不是。GM 提供有用的兼容基线,但并非所有软件都会自动按 GM 分配声音,自定义鼓架也可以使用其他映射。MIDI Association 的默认鼓音符 Profile 需要双方支持并启用才形成明确约定。X1 仍应列数字音符到鼓件角色的实际表。
跨 DAW 后速度不对,是否应该把所有音符整体拉伸?
先不要。先看文件是否含正确 Tempo/Meter、目标端是否导入了速度图、起点是否插在同一音乐位置。只有证明事件相对网格本身确实缩放错误,才在副本中修音符;否则会把导入策略问题写死进数据。
为什么本文还要音频参考?这不是 MIDI 测试吗?
音频参考提供“源工程实际听起来怎样”的独立证据,能区分事件通过但音源不同,以及事件本身已经改变。它不是拿来替代事件账本,也不意味着 MIDI 文件包含音频。
这和工程移交、MIDI 映射或 Swing 参数迁移有什么区别?
工程移交保留的是完整宿主项目与依赖;Note 映射排查关注控制器到音源的单次地址;Swing 审计比较不同设备的时序语义。本文只验证 Standard MIDI File 是否把已物化的事件、时间与结构按合同送进另一个空工程,范围更窄。
N0 已保存可复现原生工程、未修改 MIDI 与同范围音频参考;M1 只在副本中把必要量化、移调、延迟、力度、Bank/Program/CC 等宿主状态变成可见事件,并有前后账本;X1 写明文件身份、SMF0/1、PPQ、起点、长度、Tempo/Meter、轨道/通道/事件数、数字音符映射、音频参考和未包含处理;V1 在空工程先验结构与事件、后分配音源,且未改 X1 在第二个空工程或实际接收端仍通过。任何一项没有证据,就标为未验证,不把“能响”写成“跨 DAW 完整一致”。
来源与访问日期
MIDI Association 说明 SMF 用于交换带时间的 MIDI 数据、可含多流与速度/拍号等结构,并强调 MIDI 文件不必存储真实声音;Ableton 说明 Live 的 MIDI 导出方式、SMF0 限制、96 PPQ 取整与 GM 自动音色分配边界;Apple 说明 Format 0/1 结构以及 Logic Pro 导出前的片段准备;Steinberg 说明 Cubase 导出速度/拍号,并要求将未被 Export Options 覆盖的 Inspector 设置转换为真实事件。这些来源没有规定本文的 N0→M1→X1→V1 顺序、事件账本、交付卡、故障矩阵或放行条件。
- MIDI Association — Standard MIDI Files(访问于 2026 年 11 月 2 日)
- MIDI Association — About MIDI, Part 4: MIDI Files(访问于 2026 年 11 月 2 日)
- MIDI Association — General MIDI Level 1(访问于 2026 年 11 月 2 日)
- Ableton Live 12 Reference Manual — Managing Files and Sets(访问于 2026 年 11 月 2 日)
- Ableton Help — Understanding MIDI Files(访问于 2026 年 11 月 2 日)
- Apple Logic Pro 使用手册 — 标准 MIDI 文件(访问于 2026 年 11 月 2 日)
- Apple Logic Pro 使用手册 — 将 MIDI 片段导出为 MIDI 文件(访问于 2026 年 11 月 2 日)
- Steinberg Cubase Pro 15 — Exporting MIDI Tracks as Standard MIDI Files(访问于 2026 年 11 月 2 日)
- MIDI Association — MIDI-CI Profile for Default Drum Note Map(访问于 2026 年 11 月 2 日)