2017-09-11 65 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 –