适用范围
原创MIDI事件阅读题,限定MIDI 1.0普通音符消息及一个同通道同音号对象;非设备实测、音量测量或采样器模式教程。
先确认读的是哪一种协议消息
MIDI消息记录演奏或控制事件,不是直接保存一段音频波形。这里固定普通MIDI 1.0音符消息:Note On、通道、音号与力度共同构成要阅读的信息。界面仅写“MIDI”时,不足以排除MIDI 2.0,应该查实际消息说明。
MMA与AMEI的UMP及MIDI 2.0规范明确说明:MIDI 1.0的Note On力度0是特殊情形,与Note Off等效。本页只使用这条音符事件规则,不介绍控制台借用消息的私有映射,也不把所有名为velocity的界面数值一概解释成同一功能。
原创两条日志:80开始,0关音
设同一通道先收到音号60、力度80的Note On,随后收到同通道、同音号60、力度0的Note On。第一条是开始该音的事件;第二条按MIDI 1.0的特殊规则解释为关音,而不是把已经发声的音简单调到零音量。
图中没有持续时间、声压或音频振幅数据。80不是80%的音量,0也不是一条音频电平测量。若只筛选日志中名称为Note Off的行,就可能漏掉这种用Note On零力度表示的结束事件,进而错误报告某音“没有结束消息”。
要把结束事件配给正确对象
核对时保留通道和音号:另一个通道的音号60、或同通道的音号62,都不应被直接当作题设音号60的配对事件。软件可能用0到15或1到16显示通道,比较两份日志前还应确认显示编号约定。
本页只设一个待结束的对应音,没有同通道同音号重叠多次起音。真实日志若有重叠、消息丢失或时间顺序不明,要保留这些条件,不能用这个两行例子证明所有音的生命周期都已配对正确。
协议版本改变时,不要照抄零值规则
MIDI 2.0的Note On允许零力度作为真正的Note On,不把它按MIDI 1.0的方式自动视为Note Off。协议间转换因此需要处理这项语义差异;不能只看字段名字相似就原样推断事件功能。
本文不提供跨协议数值转换器,也不声称当前某款设备怎样自动翻译。记录“来源按MIDI 1.0解释,零力度作为结束”已经比写“所有MIDI力度0都关音”准确。若来源未注明协议,应先补证据再作结论。
关音事件与实际静音分开验收
Oracle的MIDI接口文档同时说明,关音之后声音可能继续衰减;消息语义不是音频此刻归零的保证。因此排查“为何仍有声音”时,先确认消息是否正确到达,再观察发声端的实际响应,不能凭尾声反向否认事件存在。
本页不讨论采样器One-Shot或门控的具体模式,也不把关音消息等同于静音按钮或删除音轨。最终笔记可写“同通道音号60收到零力度Note On,按1.0作为结束;实际声音结束时刻另查”。这样把数据与听觉结果各自保留。
操作步骤
- 确认消息协议为MIDI 1.0,并记录日志通道编号约定。
- 把Note On的力度字段一起读取,不只按消息名称筛选。
- 将零力度事件按关音语义,与同通道同音号的起音核对。
- 把消息配对结果和实际音频响应分开记录,协议或重叠状态未知时不强判。
常见问答
MIDI 1.0的零力度是很轻地起音吗?
对于本页限定的普通Note On消息,零力度具有Note Off语义;正力度范围与它不同。
可以只查名称为Note Off的行吗?
不够。还应纳入MIDI 1.0中Note On力度0的结束事件。
MIDI 2.0也是同样规则吗?
不是。MIDI 2.0的Note On零力度不按这条1.0规则解释为Note Off。
关音事件一到就必定完全无声吗?
不能保证。消息语义与发声端最终音频响应分层判断,本页不把尾声等同于消息缺失。
参考依据
MMA与AMEI:UMP与MIDI 2.0协议v1.1.1 · MMA与AMEI · 核对日期 2026-10-30。已核7.4.2与D.3.1:1.0零力度Note On的特殊关音语义及2.0区别,不声称任一设备翻译实测。
Oracle:MidiChannel · Oracle · 核对日期 2026-10-30。已核noteOn零力度与noteOff说明,及关音后可能继续衰减;不作为所有采样器触发模式说明。