2

我正在编写自己的 MIDI 解析器,一切似乎都很顺利。

我正在测试我在野外看到的一些文件。我注意到一个 MIDI 轨道似乎永远不会同时有一个以上的音符(产生一个以上的音调)。这是设计使然吗,midi 音轨是否可以同时播放一个以上的音符?

(我不是指同时音轨的数量,我指的是单个音轨中的音调数量。)

我测试过的midi文件如下所示:

ON_NOTE71:ON_NOTE75:ON_NOTE79 ON_NOTE71:OFF_NOTE71:ON_NOTE75:OFF_NOTE75:ON_NOTE79:OFF_NOTE79

可以这样看吗?

ON_NOTE71:ON_NOTE73:OFF_NOTE73:OFF_NOTE71

如何检测这种替代结构?

4

3 回答 3

2

是的。一次演奏多个音符称为复音。不同的 MIDI 规范定义了对不同级别复音的支持。

http://www.midi.org/techspecs/gm.php

于 2012-04-24T05:31:06.533 回答
1

一次可以播放的音符数量是硬件实现细节。您的软件应该允许同时播放任意数量的音符。我建议保留一张当前打开的音符的表格,以便在播放停止时为每个音符发送一个音符。理想情况下,表格应该对每个音符进行计数,当音符打开时增加,当音符关闭时减少。这样,如果某个音高有两个未决事件的音符,您可以发送两个音符关闭事件。您无法知道与之通信的设备将如何处理相同音高的连续音符事件,因此发送相同数量的音符关闭事件是最安全的。

于 2012-04-24T16:40:32.447 回答
0

是的。控制器和软件都可以产生这样的事件。

于 2012-04-24T05:26:09.150 回答