Midi消息需要帮助吗

Midi消息需要帮助吗,midi,Midi,如何将来自MIDINPROC委托的dwParam1解释为midi状态消息,如note off或note on控件更改 因为只要我尝试,dwParam1是254,不等于note off或其他任何东西。您不一定会收到来自每个输入设备的note off。IIRC设备发送音量为0的备忘以代替备忘是合法的。此外,我认为鼓流(来自鼓机和/或MIDI通道10)通常只包含音符,不包含音符。我不完全确定您在问什么,但我认为您正在尝试了解如何解释MIDI数据 我建议这一资源: 与音符相关的MIDI消息由前4位区分

如何将来自MIDINPROC委托的dwParam1解释为midi状态消息,如note off或note on控件更改


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

您不一定会收到来自每个输入设备的note off。IIRC设备发送音量为0的备忘以代替备忘是合法的。此外,我认为鼓流(来自鼓机和/或MIDI通道10)通常只包含音符,不包含音符。

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

我建议这一资源:


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

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

对于,请使用
LOBYTE(dwParam1)

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


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

由@Conrad Albrecht给出的答案基本上是正确的,但我想插入一个答案(而不是注释),因为我认为原始海报可能会被混淆

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


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

您的问题很简单。如果您提供更多详细信息,如操作系统、编程语言、可能的代码片段,以及您试图解码的midi消息的具体细节,您将有更多机会获得适当的答案。但是,我如何才能在、频道、速度等方面收到注释??