修改:发布于音频/视频制作网站https://video.stackexchange.com/questions/4148/creating-midi-files-explanation-of-time-division-in-header-chunk
我一直在阅读有关MIDI文件结构的内容,因为我有兴趣编写一个以这种格式读/写文件的应用程序,但我对标题块中的时间分区感到有些困惑。
我的理解是该部分基本上是16位,其中如果符号位是1,则其余位指定SMPTE时间码,如果它是0,则这些位指定每四分音符(PPQ)的滴答/脉冲数。
我的问题具体是:
基本上,我试图了解这些对最终结果的实际意义。
答案 0 :(得分:1)
我没有在该论坛上注册,所以我会将其粘贴到这里:
我可以回答第1部分。
PPQ绝对会影响MIDI文件的速度。它不会改变声音的质量,它会改变处理事件的速率。
速度以每季度音符的微秒数定义。如果更改四分音符(PPQ)中的刻度(脉冲)数,则可以有效地更改文件的播放速率。 PPQ的标准值是480.如果对文件进行的唯一更改是将PPQ加倍,则基本上将播放速率(速度)减半。
答案 1 :(得分:0)
我知道这是一个老问题,但没有完全回答,或完全准确。
所有MIDI文件都使用delta时间。 MIDI文件中没有绝对时间,SMPTE与否。
在原始MIDI格式文件中,标题计时信息指定PPQN或每季度脉冲数。 SetTempo元事件指定每季度音符的微秒数(速度)。 MIDI事件增量信息指定此事件与最后一个事件之间的脉冲数。
在SMPTE风格的MIDI文件中,标题定时信息指定两个值 - 每秒帧数和帧细分。每秒帧数实际上是FPS(有些值需要调整,比如29实际上是29.97)。帧细分可以被认为是每帧的脉冲数。 MIDI事件增量信息指定自上次事件以来的帧细分(或脉冲)数。
一个重要的区别是,SMPTE文件不使用SetTempo元事件。所有时间尺度都由标题定时字段固定。
答案 2 :(得分:-1)
@LeffelMania做对了,但我只想补充一点,SMPTE只是一种不同的方式来保持你的安排时间。如果您使用SMPTE,那么您将获得每个事件的绝对时间,否则事件将与之前的事件相关。
根据我的经验,大多数MIDI文件使用传统的相对事件定时方式(即不是SMPTE),因为这更容易使用。