我的目标是从标准 MIDI 文件中检索确切的音符开/关时间。该文件是类型 1(它有几个轨道),计时模式是每季度滴答声。
我的做法:
我在每首曲目中搜索 setTempo-Events 并将它们全部放入列表中。我还将连续 setTempo-Events 之间的滴答数存储在我的列表中。
然后我将每个事件的所有 deltaTimes 相加,并获得每个事件相对于零刻度的绝对刻度数。
最后,我从绝对滴答数和包含 tempi 的列表中计算出以秒为单位的时间
这是从 MIDI 文件获取音符开始的正确方法,还是我也必须考虑时间签名?- setTempo-event 的数据是微秒/季度还是微秒/节拍?
另一个问题:假设我有一个包含两个轨道的文件。轨道二在文件的最后只有 1 个事件,假设 deltatime=1000。轨道一有两个 setTempo-Event,一个 deltatime=0,另一个 deltatime=500。
哪个速度用于等待第二轨中的 1000 个滴答声 - 第一个速度,第二个或两者?