将 MIDI 节拍转换为实际播放秒数

Posted

技术标签:

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

我想知道如何。

例如,如果 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 秒后产生的......请帮助 【参考方案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 以每四分之一微秒(一个周期)表示。

【讨论】:

给定的链接现在是 404s。 您确定Tempo in latest Set Tempo eventµs_per_quarter 表示,而不用µs_per_beat 表示吗?我可以看到一个Tone.js MIDI 接口显示(property) IMidiSetTempoEvent.setTempo: microsecondsPerBeat: number; 你在µs_per_quarter recordingblogs.com/wiki/midi-set-tempo-meta-message 中表达的节奏是正确的,然后Tone.js 界面缺少一些东西。 我找到了 API 并创建了一个问题 github.com/chrisguttandin/midi-json-parser-worker/issues/329

以上是关于将 MIDI 节拍转换为实际播放秒数的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 播放 MIDI 声音的最佳方式

将 MIDI 转换为 mp3

将 midi 时间转换为小节和节拍

在 Java 上播放单个 MIDI 木版音符?

有没有人在 iPhone 上通过 midi->wav 转换等播放 .midi 文件的经验?

Soundfonts 播放 MIDI 文件没有衰减