gpt4 book ai didi

python - 如何矢量化 MIDI 输入?

转载 作者:行者123 更新时间:2023-12-01 08:31:29 25 4
gpt4 key购买 nike

我想创建一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com