2010-05-13 101 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音符事件的正常后两个字节。