这是一个相当简单的问题,我有一个猜测,但我在任何地方都找不到一个明确的答案。
背景:我有一个多音轨的midi文件,在第一个音轨中有节奏控制。我需要将其他曲目中的ABSOLUTE_TICK计数转换为“秒”(相对于midi文件开头的小数秒偏移量)。
我有一个公式来联系ABSOLUTE_TICK到秒的基础上的PulsePerQuarterNote (PPQN)为文件的节奏(毫秒每季度音符)。
问题是:第一首曲目(曲目0)中的节奏变化是否适用于所有其他曲目?
如果是这样,那么当我解析其他曲目(例如曲目4,其中有我感兴趣的NOTE_ON和NOTE_OFF消息)时,我将需要并行地将手指指向曲目0中的节奏变化。是那么回事吗?
谢谢,
标记
发布于 2009-07-05 08:57:54
简而言之,是的。第一个磁道包含将应用于整个排列的计时信息,因此您可以将这些消息应用于具有相同绝对时间的每个磁道。由于所有事件都使用以刻度为单位的偏移量,因此您需要首先提取节奏更改消息,将其转换为绝对时间,然后在读取其他曲目时,您将根据该时间轴应用这些消息。
从MIDI fanatic's technical brainwashing center
在格式为0的文件中,节拍变化分散在一个MTrk中。在格式1中,第一个MTrk应该只包含节拍(和时间签名)事件,以便它可以被某些能够生成“节拍映射”的设备读取。最好不要在此MTrk中放置MIDI事件。在格式2中,每个MTrk应至少以一个初始速度(和时间签名)事件开始。
也就是说,一些音序器确实打破了这一规则,将实际的MIDI事件与定时信息一起放在第一轨道上,因为标准在这方面并不是那么具体。你的程序应该处理这两种情况,因为它可能会在野外遇到以这种方式格式化的MIDI文件。
https://stackoverflow.com/questions/1080297
复制相似问题