我的目标是从标准MIDI文件中检索确切的音符开/关时间。 该文件是类型1(它有几个轨道),定时模式是每季度的滴答。
我的方法:
我在每个轨道中搜索setTempo-Events并将它们全部放入列表中。我还在列表中存储了后续setTempo-Events之间的刻度数。
然后我将每个事件的所有deltaTimes相加,并获得每个事件相对于刻度线零的刻度线的绝对数量。
最后,我从绝对蜱数和包含tempi的列表中计算出以秒为单位的时间
这是从MIDI文件获取音符开启的正确方法,还是我必须考虑时间签名? - 是来自setTempo-event microseconds / quarter或microseconds / beat?
的数据另一个问题: 假设我有两个曲目的文件。跟踪二在文件的最后只有一个事件,假设deltatime = 1000。第一个轨道有两个setTempo-Event,一个是deltatime = 0,另一个是deltatime = 500。
哪个速度用于等待第二个音轨中的1000个音阶 - 第一个速度,第二个或两者?
答案 0 :(得分:2)
我使用的一般状态是:
如果你正在按顺序进行所有处理,那么一旦你建立了间隔,确定音符落入哪个间隔是相当微不足道的。
对于您的第二个问题 - 之前的所有节奏都会影响事件的实时。上述策略将解释所有这些。