【问题标题】:Converting MIDI ticks to actual playback seconds将 MIDI 节拍转换为实际播放秒数
【发布时间】:2010-01-10 19:43:32
【问题描述】:

我想知道如何将 MIDI 节拍转换为实际播放秒数。

例如,如果 MIDI PPQ(每四分音符的脉冲数)为 1120,我将如何将其转换为真实世界的播放秒数?

【问题讨论】:

  • 我没听懂你...假设我有一首恒定速度为 424 BPM 的音乐...现在我在 PPQ 中有波动的 midi 滴答声..例如 70272,70344,70372 等。 ..现在对于每个 miditick,我希望有一个等效的真实世界播放秒.. 如果我以 145240 PPQ(midi tick)..(从示例 midi 音乐文件中获取的示例 midi tick)为例......那么你公式给了我这个 0.9116185787866357 毫秒数......它转换为 0.0009116185787866358 秒......这让我感到困惑,因为这样的 145240 midi 滴答声是在播放 midi 音乐 1 秒后产生的......请帮助

标签: midi


【解决方案1】:

公式为60000 / (BPM * PPQ)(毫秒)。

其中 BPM 是曲目的节奏(Beats Per Minute)。

(即 120 BPM 轨道的 MIDI 时间为 (60000 / (120 * 192)) 或 2.604 毫秒(1 个滴答声)。

如果您不知道 BPM,那么您必须首先确定它。 MIDI 时间完全取决于轨道速度。

【讨论】:

  • 如果这个答案解释了如何计算 BPM,那就太好了。
  • @Oddthinking:从什么计算?
  • BPM 不是 MIDI 的原生概念。它源自每四分音符的微秒数(来自 SET_TEMPO)和时间签名。有关如何计算的更多详细信息,请参阅this blog post
  • 我遇到了类似的问题。更糟糕的是,我正在观看的 6 分钟乐曲中有 80 次节奏变化,因此假设节奏不变是另一个危险。
  • 我正在读取一个 MIDI 文件,并试图计算每个事件的相对时间。听起来像原来的问题。仪器的轨道提供事件的刻度数。您还需要在 MIDI 文件的标题中找到 either 每四分音符的滴答声或每秒的滴答声。如果是前者,那么要回答原始问题,您还需要查看提供 0、1 或更多 SET TEMPO 的 Track 0。他们提供微秒/四分音符。如果你想计算 BPM(不是必需的),你可以从那里开始。您不需要任何先验知识。
【解决方案2】:

你需要两条信息:

  • PPQ(每四分音符的脉冲数),在 midi 文件的标题中定义一次。
  • Tempo(以每四分音符微秒为单位),由"Set Tempo" meta events 定义,并且可以在乐曲中改变。

Ticks 可以按如下方式转换为播放秒数:

ticks_per_quarter = <PPQ from the header>
µs_per_quarter = <Tempo in latest Set Tempo event>
µs_per_tick = µs_per_quarter / ticks_per_quarter
seconds_per_tick = µs_per_tick / 1.000.000
seconds = ticks * seconds_per_tick

请注意,在上面链接的document 中,PPQ 也称为“除法”或“每四分音符的记号”。

请注意,速度通常以 BPM(频率)表示,但原始 MIDI 以每四分之一微秒(一个周期)表示。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多