创建MIDI文件 - 标题块中的时间分割说明

时间:2012-06-09 01:50:15

标签: file audio header midi

修改:发布于音频/视频制作网站https://video.stackexchange.com/questions/4148/creating-midi-files-explanation-of-time-division-in-header-chunk

我一直在阅读有关MIDI文件结构的内容,因为我有兴趣编写一个以这种格式读/写文件的应用程序,但我对标题块中的时间分区感到有些困惑。

我的理解是该部分基本上是16位,其中如果符号位是1,则其余位指定SMPTE时间码,如果它是0,则这些位指定每四分音符(PPQ)的滴答/脉冲数。

我的问题具体是:

  • 更高/更低的PPQ对MIDI文件有什么作用?这会改变声音的质量吗?我的理解是它不会影响节奏
  • SMPTE时间码如何影响播放中的MIDI文件?

基本上,我试图了解这些对最终结果的实际意义。

3 个答案:

答案 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),因为这更容易使用。