如何使用 python-midi 模块引用单个 MIDI 事件?
How can I reference individual MIDI events using the python-midi module?
我正在使用 this python module(对于 python 2)来尝试访问单个 MIDI 事件。到目前为止我有
import midi
pattern = midi.read_midifile('Conquest of Paradise.mid')
print pattern
这会打印很多 MIDI 事件。但是 len(pattern)
returns 值 13(少了很多)。我如何遍历 pattern
以访问任何 midi.NoteOnEvents
?我试过阅读源代码,但我想我知道的还不够 python。
编辑:用户 CL 指出 13 指的是曲目。
所以我想我可以像这样遍历 MIDI 文件:
trackCount = len(pattern)
eventCount = 0
for i in range(trackCount):
for j in range(i):
print(pattern[i][j].name)
eventCount += 1
print(eventCount)
但是现在这给出了 eventCount = 78
,当它肯定比 78 多很多时。另外,在所有打印的名字中,none 是 NoteOnEvent
或 NoteOffEvent
.
您在内循环中错误地迭代了模式,试试这个:
trackCount = len(pattern)
eventCount = 0
for i in range(trackCount):
for j in range(len(pattern[i])):
print(pattern[i][j].name)
eventCount += 1
print(eventCount)
或者,甚至更好:
eventCount = 0
for p in pattern:
for event in p:
print(event.name)
eventCount += 1
print(eventCount)
我正在使用 this python module(对于 python 2)来尝试访问单个 MIDI 事件。到目前为止我有
import midi
pattern = midi.read_midifile('Conquest of Paradise.mid')
print pattern
这会打印很多 MIDI 事件。但是 len(pattern)
returns 值 13(少了很多)。我如何遍历 pattern
以访问任何 midi.NoteOnEvents
?我试过阅读源代码,但我想我知道的还不够 python。
编辑:用户 CL 指出 13 指的是曲目。
所以我想我可以像这样遍历 MIDI 文件:
trackCount = len(pattern)
eventCount = 0
for i in range(trackCount):
for j in range(i):
print(pattern[i][j].name)
eventCount += 1
print(eventCount)
但是现在这给出了 eventCount = 78
,当它肯定比 78 多很多时。另外,在所有打印的名字中,none 是 NoteOnEvent
或 NoteOffEvent
.
您在内循环中错误地迭代了模式,试试这个:
trackCount = len(pattern)
eventCount = 0
for i in range(trackCount):
for j in range(len(pattern[i])):
print(pattern[i][j].name)
eventCount += 1
print(eventCount)
或者,甚至更好:
eventCount = 0
for p in pattern:
for event in p:
print(event.name)
eventCount += 1
print(eventCount)