如何向量化Midi输入?

时间:2018-12-22 14:56:05

标签: python keras lstm midi mido

我想创建一个LSTM模型(使用Keras),该模型将在音乐方面接受训练,但是在对Midi输入进行矢量化时遇到了困难。 我尝试在python中使用'Mido'库,可以从该库中提取以下格式的数据:

note_on channel=0 note=72 velocity=50 time=0
note_on channel=0 note=38 velocity=50 time=0.1171875
note_off channel=0 note=80 velocity=0 time=0.1171875
note_off channel=0 note=41 velocity=0 time=0

我正在将其转换为数组

[note_number, velocity, time]

其中速度表示速度,是否为note_on \ note_off。 现在的问题是我如何在这里补充时间,我的意思是时间以the(我想)为单位。 如何将这些滴答声转换为秒,当我将该数组输入顺序模型时,如何再次将时间从输出转换为滴答声?

1 个答案:

答案 0 :(得分:1)

MIDI文件中的

时间为 delta 时间,即上一个事件之后等待执行该事件的时间。在您的示例中,两个Note Off事件同时发生。通过保持增量时间值的连续总和,您可以轻松地将增量时间转换为绝对时间。

您显示的时间值不能是刻度。刻度必须是整数值。没有看到您的代码,我不知道这些值是什么,但是我猜Mido转换为秒。

刻度通常是基于四分音符而不是时间。四分音符的时间长度(因而是滴答声)取决于当前速度,该速度由“设置速度”元事件设置。

我认为花一些时间更好地理解MIDI文件将使您受益。 Mido documentation on MIDI files是一个很好的起点。那里有许多MIDI文件的说明(例如this one。)

希望这会让您走上正确的道路。如果您仍然遇到问题,请使用Minimal, Complete, and Verifiable example的代码来说明您的问题,以发布新问题。