Pygame MIDI功能只需按键或按键而不是MIDIIN?

时间:2017-09-11 23:08:03

标签: pygame midi

所以我正在使用此功能来检测MIDI键盘上的事件,然后将其作为乐谱打印出来:

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

这会返回2个事件,一个是按下键时的一个事件,另一个是按下它时的事件。这对于单个音符很有效,因为我只创建一个函数,只在每次出现事件时使if语句触发但是对和弦很难,因为事件可能会出现各种顺序音符40 keydown,note 41 keydown,note 41 key up,note 40 key up。或注40下,注41上,注40下,注41上。等等。除非它没有说'key up'或'key down',它只是触发if语句。所以我的问题是,是否有一个函数只会被按下或按下的键被触发?像pygame.midi.MIDI_KEYDOWN

这样的东西

1 个答案:

答案 0 :(得分: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之间的状态字节请注意。