如何访问 MIDI 文件中的最后一个事件?

How can I access the last event in a MIDI file?

这是我的代码:

import midi
pattern = midi.read_midifile('midifile.mid')

for p in pattern:
    for event, lastEvent in zip(p[1:], p):
        if event.name == 'Note On' and lastEvent.name == 'Note On':
            if event.channel == 1:
                print(event.pitch, lastEvent.pitch)

例如,前 5 个球场是 57, 45, 65, 53, 52
意思是我要

45, 57
65, 45
53, 65
52, 53

但是代码的输出是

45, 57
53, 65
64, 52
50, 62

提前致谢

我认为问题在于 .name 属性不全是 'Note on'

这意味着您将事件与上一个事件进行比较,而不是将 event.name == 'Note on'

的上一个事件进行比较

也许试试:

import midi
pattern = midi.read_midifile('midifile.mid')

for p in pattern:
    previous_event = p[0]
    for event in p[1:]:
        if event.name == 'Note on':
            if event.channel == 1:
                print(event.pitch, previous_event.pitch)
                previous_event = event

我想做的是过滤 p 中的事件,只过滤那些 event.name == 'Note on' 的事件(尽管我确信有任何更简单的方法可以通过重新定义来做到这一点p 类似 p = [event for event in p if event.name == 'Note on']

合并这意味着:

import midi
pattern = midi.read_midifile('midifile.mid')

for p in pattern:
    p2 = [event for event in p if event.name == 'Note on'] # maybe should include and event.channel ==1 ?
    for event, lastEvent in zip(p2[1:], p2):
        if event.name == 'Note On' and lastEvent.name == 'Note On':
            if event.channel == 1:
                print(event.pitch, lastEvent.pitch)