python - 如何矢量化 MIDI 输入?

标签 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]

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

最佳答案

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

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

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

我认为花一些时间更好地理解 MIDI 文件会让您受益匪浅。 Mido documentation on MIDI files是一个很好的起点。有许多关于 MIDI 文件的解释(例如 this one 。)

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

关于python - 如何矢量化 MIDI 输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53896681/

相关文章:

python - 如何将工作表转换为字符串?或者我什至需要这样做?

Python ldap macOS - ValueError : option error

python - 权重和内核调节器相同吗?

python - 为什么自动编码器与编码器 + 解码器的预测不同?

python - 将千层面转换为 Keras 代码(CNN -> LSTM)

python - 如何将向量中的数值和分类值组合为 LSTM 的输入?

python - 向 Seaborn 因子图添加数据标签

python - 在 statsmodels.logit 中将协方差类型更改为稳健

android - 如何测试具有多个输入的 Tensorflowlite 模型?

python - 多元时间序列的 LSTM 输入形状?