2017-09-11 61 views
1

所以我用这个功能来检测从我的MIDI键盘事件,然后获得打印出乐谱:Pygame的MIDI功能只需按下或键入而不是MIDIIN?

for e in events: 
    if 
    if e.type in [pygame.midi.MIDIIN]: 

这将返回两个事件,一个当按键被按下时,一个当按下它up.This适用于个人笔记,因为我只是创建一个函数,只让if语句每隔一次触发一个事件就触发,但对于和弦很困难,因为这些事件可能以各种顺序发出。注释41 keydown,note 41 keydown,注意41键,注意40键。或注释40下来,注释41注释,注释40注释,注释41注释。等等。除了没有说'钥匙'或'钥匙',它只是触发if语句。所以我的问题是,是否有一个函数只能在被按下的键上触发?像pygame.midi.MIDI_KEYDOWN

+0

什么属性确实MIDI事件有哪些? '打印(DIR(E))' – skrx

+0

我只是用e.data1还告诉我,这说明是播放,但有4或5,我认为 –

+0

执行MIDI事件有'keydown'和'keyup'属性类似于'pygame的.KEYDOWN'和'KEYUP'事件类型? – skrx

回答

0

read()函数返回一个MIDI消息的原始字节不用解析他们。

midis2events()功能并没有真正做这些字节东西之一:

((status,data1,data2,data3),timestamp) = midi 

    e = pygame.event.Event(MIDIIN, 
          status=status, 
          data1=data1, 
          data2=data2, 
          data3=data3, 
          timestamp=timestamp, 
          vice_id = device_id) 

所以,你必须自己解析消息:0x900x9F之间的任何状态字节是音符,以及0x800x8F之间,注意。

+0

你只需要使用状态属性thx –