0

如何将来自 midiInProc 委托的 dwParam1 解释为 midi 状态消息,例如 note-off 或 note-on 控制更改?

因为只要我尝试 dwParam1 是 254,并不等于 note-off 或其他任何东西。

4

4 回答 4

1

鉴于您的问题提到了 dwParam1 和 midiInProc,我假设这是针对 Windows 的。当您在 midiInProc 中收到MIM_DATA您可以按如下方式解析 dwParam1:

对于状态字节(命令和通道),使用LOBYTE(dwParam1).

对于第一个数据字节,使用HIBYTE(dwParam1).

如果适用,对于第二个数据字节,使用LOBYTE(HIWORD(dwParam1)).

于 2011-04-21T05:20:06.837 回答
1

您不一定会收到来自每个输入设备的注释。IIRC 设备发送音量=0 的音符代替音符关闭是合法的。还有一个鼓流(来自鼓机和/或 MIDI 通道 10)我相信通常只包含音符,没有音符。

于 2010-05-13T14:43:28.863 回答
0

@Conrad Albrecht 的答案大部分是正确的,但我想回答(而不是评论),因为我认为原始海报可能被MIDI running status混淆了。

如果您看到的字节与正常的 MIDI 状态字节不同,您可以假设它们与您收到的前一个字节的类型相同。因此,在速度为 0 的事件上使用 MIDI 音符代替 MIDI 音符关闭不仅合法,而且非常普遍。

您应该将这些字节解释为事件中 MIDI 音符的正常后两个字节。

于 2011-04-21T08:09:54.670 回答
0

我不完全确定您在问什么,但我认为您正在尝试弄清楚如何解释 MIDI 数据。

我建议这个资源: http: //www.midi.org/techspecs/midimessages.php

与音符相关的 MIDI 消息由前 4 位而不是整个字节来区分。第一个字节的最后四位指定通道。

于 2010-07-14T02:36:20.900 回答