1

我已经从 Ableton Live 11 导出了一个 MIDI 文件,我想以两列表的形式提取调制轮的变化,其中包含值和相应的时间戳(以秒为单位)。

为此,我使用 mido 编写了一个 Python 脚本来解析 MIDI 文件。在这个文件中,没有'set_tempo' MetaMessage 我将 BPM 值作为参数提供给我的脚本。使用'time_signature' MetaMessage,我正在考虑使用clocks_per_click 值将MIDI 时间转换为秒。如果我猜对了,clocks_per_click 是每四分之一音符的 MIDI 时钟滴答数。因此,我的 MIDI 时间到秒的转换应该是:

# number of seconds in a beat
beat_seconds = 60 / bpm

# number of seconds in a quarter note
quarter_note_seconds = beat_seconds / 4 

# number of seconds in a MIDI clock tick
tick_seconds = quarter_note_seconds / clocks_per_click

# MIDI time to second conversion
seconds = time * tick_seconds

问题是来自 Ableton 的 MIDI 文件显示 36 个clocks_per_click,尽管它没有给我正确的结果。当clocks_per_click 设置为24 时得到正确的结果。

这是我指的 MIDI 文件:modramp.zip 它是第一个节拍期间调制轮从 0 到 255 的线性增加。MIDI 最后一个小节。

如果您能解释一下为什么clocks_per_click 似乎与那里的消息中显示的时间不对应,以及是否有另一种方法可以在不使用缺少的“set_tempo”元消息的情况下转换此时间值,我将不胜感激。

先感谢您,

乔尔

4

0 回答 0