2010-05-13 95 views
0

如何將midiInProc委託中的dwParam1解釋爲midi狀態消息,如note-off或note-on,control change?Midi消息需要幫助

因爲只要我嘗試dwParam1是254,並不等於註釋或其他任何東西。

+1

你的問題是關於細節。如果您將更多細節(例如操作系統,編程語言和可能的代碼段)以及您嘗試解碼的MIDI消息的具體細節分開,那麼您將有更多機會獲得適當的答案。 – mdma 2010-05-13 14:28:08

回答

1

您不一定會收到來自每個輸入設備的註釋。 IIRC對於設備發送音量= 0的音符作爲音符的替代是合法的。另外一個鼓流(來自鼓機和/或MIDI通道10)我相信通常只包含音符,不包括註釋。

+0

但我怎樣才能收到音符,頻道,速度等? – Rinaldi 2010-05-13 15:43:26

+0

但我怎樣才能收到筆記,通道,速度等? – Rinaldi 2010-05-13 15:54:34

0

我不完全確定你在問什麼,但我認爲你正試圖弄清楚如何解釋MIDI數據。

我建議這個資源: http://www.midi.org/techspecs/midimessages.php

相關票據MIDI消息由前4位分化,而不是整個字節。第一個字節的最後四位指定通道。

1

鑑於您的問題提到了dwParam1和midiInProc,我假設這是針對Windows的。當你在midiInProc收到MIM_DATA,您可以解析dwParam1如下:

對於status byte (command and channel),使用LOBYTE(dwParam1)

對於第一個數據字節,使用HIBYTE(dwParam1)

如果適用,對於第二個數據字節,請使用LOBYTE(HIWORD(dwParam1))

0

@康拉德阿爾布雷希特的回答大多是正確的,但我想用一個答案(而不是一個評論),因爲我認爲原來的海報可能被MIDI running status弄糊塗了。

如果您看到的字節與正常的MIDI狀態字節不相似,則可以假定它們與您收到的前一個字節的類型相同。因此,對速度爲0的事件使用MIDI音符作爲MIDI音符關閉的替代品不僅合法但非常常見。

您應該將這些字節解釋爲MIDI音符事件的正常後兩個字節。