目前我正在编写一个接受键盘输出的python脚本,即Yamaha P-45。我的目标是将键盘上弹奏的每个音符与存储在文本文件中的音符进行比较,并标记错误的音符(例如:播放某种音符时,会显示出错的位置)。
截至目前,它打印任何音符或踏板事件,但将来我希望以
[note, on/off, velocity, tone, time] #for notes
[pedal, on/off, time] #for pedal
问题是键盘发出了我认为键盘的时钟
像这样:
[[248, 0, 0, 0], 1497]
[[248, 0, 0, 0], 1518]
[[248, 0, 0, 0], 1538]
[[248, 0, 0, 0], 1559]
[[248, 0, 0, 0], 1580]
[[248, 0, 0, 0], 1601]
[[248, 0, 0, 0], 1622]
我的问题是,如何过滤midi时间事件?有没有办法直接过滤除音符和踏板事件以外的任何midi事件?我觉得只是有一堆ifs不是最好的解决方案 我的脚本的缩短版本:
midi.init()
midiId = 1 #id of my keyboard
midi_out = midi.Input(midiId)
try: # try finally for ctrl-cing
t0 = time.clock() #define beginning time
while True: #begin main loop
for f in midi_out.read(10):
#the events gets read in nested list [[status, numbers, numbers numbers . . .] time]
print(f)
finally:
midi_out.close()
midi.quit()
pygame.quit()