要"real-time"的 MIDI 文件事件,标头中没有 PPQ 或 SMPTE



我正在编写带有MIDI播放功能的简单c++合成器。我已经实现了回放,但在一些midi文件中,关于PPQ或SMPTE的信息(或数据无效,例如,所有数据字节都是0(是不存在的,并且如果我使用"0";默认";PPQ(例如24(和来自事件的速度(在该文件中,速度事件只有一个(的值回放太慢或太快。在这种情况下,我手动更正这个值。但如果我在任何DAW中导入这个midi,他们就会正确地读取文件并使用目标BPM播放旋律。在这种情况下,如何正确地将事件刻度转换为实时?在这种情况下,我缺少什么?DAW该怎么办?

每季度的ticks音符值是头块的一部分,因此它存在于每个文件中。如果该值为零,则该文件无效,根本无法播放。

对于节奏和时间签名,默认值在SMF规范中定义:

所有MIDI文件都应该指定节奏和时间签名。如果没有,则假定时间特征为4/4,并且节奏为每分钟120拍。

(120 BPM与每季度500000微秒音符的节奏值相同。(

最新更新