1

我想创建一个将接受音乐训练的 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]

其中velocity表示速度以及是否为note_on\note_off。现在的问题是我如何在这里输入时间,我的意思是时间以刻度为单位(我猜)。我如何将这些滴答声转换为秒,并且我将这个数组提供给顺序模型,我将如何再次将时间转换为输出中的滴答声?

4

1 回答 1

1

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

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

记号通常基于四分音符,而不是时间。四分音符的时间长度(以及节拍)取决于当前速度,该速度由 Set Tempo 元事件设置。

我认为你会从花一些时间更好地理解 MIDI 文件中受益。MIDI 文件的Mido 文档是一个很好的起点。那里有许多关于 MIDI 文件的解释(例如这个。)

希望这会让你走上正轨。如果您仍然遇到问题,请发布一个新问题,其中包含一个最小、完整和可验证的代码示例来说明您的问题。

于 2018-12-23T13:09:45.060 回答