Midi - 如何获取特定秒的所有音符

Mir*_*ine 0 python midi

我正在做一个项目,遗憾的是我对 MIDI 文件知之甚少。我正在为 MIDI文件使用python 库

主要问题是如何获取特定时间&&轨道(例如1:20到1:21)的所有笔记(消息)

另一个问题是:在某些 MIDI 文件中,我们有不同的速度。我可以通过计算时间和速度来解决这个问题,但我不知道如何将这些数字转换为秒并应用不同的节奏。

For*_*tor 5

代替那个库(目前似乎没有维护),您可以使用另一个库为每个事件提供开箱即用的时间,例如使用漂亮的midi - docs(python 3):

import pretty_midi
midi_data = pretty_midi.PrettyMIDI('example.mid')
print("duration:",midi_data.get_end_time())
print(f'{"note":>10} {"start":>10} {"end":>10}')
for instrument in midi_data.instruments:
    print("instrument:", instrument.program);
    for note in instrument.notes:
        print(f'{note.pitch:10} {note.start:10} {note.end:10}')
Run Code Online (Sandbox Code Playgroud)

您可以按已计算的时间note.startnote.end时间过滤音符事件(以秒为单位)。