2

编辑:发布在音频/视频制作网站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 文件?

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

4

3 回答 3

1

我没有在那个论坛上注册,所以我把它贴在这里:

我可以回答第 1 部分。

PPQ 绝对会影响 MIDI 文件的速度。它不会改变声音的质量,它会改变处理事件的速率。

速度以每四分音符的微秒数来定义。如果您更改四分音符 (PPQ) 中的节拍数(脉冲),您实际上会更改文件播放的速率。PPQ 的标准值是 480。如果您对文件所做的唯一更改是将 PPQ 加倍,那么您实际上将播放速率(速度)减半。

于 2012-06-09T04:10:46.027 回答
0

我知道这是一个老问题,但没有完全或完全准确地回答。

所有 MIDI 文件都使用增量时间。MIDI 文件中没有绝对的时序,无论是否 SMPTE。

在原始 MIDI 格式文件中,标题时序信息指定 PPQN,或每四分音符的脉冲数。SetTempo 元事件指定每四分音符的微秒数(速度)。MIDI 事件增量信息指定此事件与上一个事件之间的脉冲数。

在 SMPTE 样式的 MIDI 文件中,标头时序信息指定了两个值 - 每秒帧数和帧细分。每秒帧数实际上是 FPS(需要调整一些值,例如 29 是真正的 29.97)。帧细分可以被认为是每帧的脉冲数。MIDI 事件增量信息指定自上次事件以来帧细分(或脉冲)的数量。

一个重要的区别是,SMPTE 文件不使用 SetTempo 元事件。所有时间尺度都由标头时间字段固定。

于 2014-10-31T15:27:36.557 回答
-1

@LeffelMania 说得对,但我只是想补充一点,SMPTE 只是另一种保持时间安排的方式。如果您使用 SMPTE,那么您将获得每个事件的绝对时间,否则这些事件与之前的事件相关。

根据我的经验,大多数 MIDI 文件使用相对事件计时的传统方式(即,不是 SMPTE),因为这更容易使用。

于 2012-06-09T11:07:20.653 回答