使用 python-midi 库从 midi-events 获取变量

Get variables from midi-events with the python-midi library

我使用 python-midi 库将 midi 文件读入列表。

variable = midi.read_midifile(source)

条目如下所示:

   midi.NoteOffEvent(tick=2, channel=10, data=[48, 98]),
   midi.NoteOnEvent(tick=46, channel=10, data=[48, 100]),
   midi.NoteOffEvent(tick=12, channel=10, data=[48, 100]),
   midi.NoteOnEvent(tick=36, channel=10, data=[48, 91]),
   midi.NoteOffEvent(tick=14, channel=10, data=[48, 91]),
   midi.NoteOnEvent(tick=34, channel=10, data=[48, 122]),

现在我想获取这些事件的参数,但我不知道该怎么做。我想计算所有滴答声,获取所有不同的通道并读取数据(因此音符和速度)。我查看了 Github-Repository,但没有找到问题的答案。 link 到存储库:https://github.com/vishnubob/python-midi

难道 pyhton-midi 不是真正为读取和操作 midi 文件而设计的吗?

我对 python-midi 库一无所知,但我从源代码中猜测 read_midifile() 方法 returns 一个 Pattern 对象。 Pattern 对象包含一个事件列表。

每个事件将包含 tickchanneldata 属性。

我猜你可以像列表一样对 Pattern 对象进行切片,所以你应该可以这样做:

pattern = midi.read_midifile(source)
print pattern[0].tick

这将 select 模式中的第一个事件并打印其刻度 属性。

然后您可以通过执行以下操作来计算滴答声:

pattern = midi.read_midifile(source)
tick_count = 0
# a unique list
channels = set()

for event in pattern:
    tick_count += event.tick
    channels.add(event.channel)

如果您需要了解对象中的内容,可以随时使用 dir() 函数。例如

print dir(event)

祝你学习顺利。保持高目标!