MIDI同通道同音高连续NOTE ON事件的正确解析规则咨询
MIDI重复NOTE ON事件处理规范解答
结论
这种处理方式完全符合MIDI 1.0官方规范。
规范依据
MIDI官方标准中明确规定了同通道同音高重复NOTE ON事件的隐式关闭规则:
- 当某一通道的指定音高已经处于激活状态(已触发NOTE ON且未收到对应NOTE OFF)时,若再次收到同一通道、同一音高的NOTE ON事件,接收端必须先隐式关闭前一个处于激活状态的同音,再执行新的NOTE ON触发逻辑。
- 该规则的设计初衷是兼容早期MIDI制作设备的输出逻辑,部分老旧设备不会主动发送NOTE OFF事件,而是通过重复发送NOTE ON来实现重奏、断音等演奏效果。
对应你给出的事件序列的标准处理流程
- Tick 384:触发通道1音高53的NOTE ON,该音高进入激活状态
- Tick 672:收到同通道同音高的NOTE ON,先执行隐式NOTE OFF(若合成器支持释音阶段,会触发前一个音的释音效果),再触发新的NOTE ON
- Tick 768:收到NOTE OFF,关闭当前处于激活状态的音高53
补充说明
部分简化实现的MIDI播放器会直接丢弃第二个NOTE ON事件,这种处理才是不符合规范的,会丢失原制作时的重奏、叠音等意图。
内容的提问来源于stack exchange,提问作者Invariant
相关产品推荐
相关产品推荐

