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

Midi - how to get all notes for specific second(s)

我正在做一个项目,遗憾的是我对 MIDI 文件了解不多。我正在使用 python library for MIDI 个文件。

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

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

您可以使用另一个库来代替该库(目前似乎未维护),它为每个事件提供开箱即用的时间(以秒为单位),例如使用 pretty-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}')

您可以按已计算的 note.startnote.end 秒过滤音符事件。