如何在Windows上用Python过滤Yamaha P-45键盘的MIDI输出?

时间:2017-05-15 20:29:46

标签: python pygame midi

目前我正在编写一个接受键盘输出的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()

0 个答案:

没有答案