有一个非常简单的问题了,我有一个猜测,但我无法找到一个明确的答案的任何地方。

在背景:我在第一音轨以TEMPO控制多轨MIDI文件。我需要翻译在其他轨道以“秒”的计ABSOLUTE_TICK(分数秒从MIDI文件的开头的偏移)。

予具有式为涉及ABSOLUTE_TICK基于所述PulsePerQuarterNote(PPQN)秒为文件的速度(每四分音符MS)。

的问题是:在做第一个轨道(轨道0)TEMPO更改应用于所有其他轨道

如果是这样,那么而我解析其它轨道(例如轨道4,其具有NOTE_ON和NOTE_OFF消息我对)我将需要保持指向平行于轨迹0 TEMPO变化的手指。是这样吗?

谢谢,

标记

有帮助吗?

解决方案

在短,是的。第一轨道包含将被应用于整个装置中的定时信息,所以在应用这些消息的每个具有相同的磁道的绝对时间。由于所有事件使用的蜱偏移,则需要先提取节奏变化的消息,将它们转换成绝对时间,然后根据你在其他轨道阅读,你会根据该时间表应用这些消息。

MIDI狂热的技术洗脑班

  

在一个格式0文件时,速度改变分散在整个一个MTrk。在格式1中,非常第一MTrk应仅由速度(和时间签名)的事件,以便它可以由一些能够生成“节拍地图”的设备读取。最好不要放置MIDI事件在这个MTrk。在格式2中,每个MTrk应该与至少一个初始速度(和时间签名)事件开始。

这是说,有些做测序仪打破这个规则,并把实际的MIDI事件在第一条轨道旁边定时信息,因为标准是不是在这方面如此具体。你的程序应该处理这两种情况下,因为它很可能会遇到这样以这种方式格式化野生MIDI文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top