【问题标题】:Midi Message need helpMidi 消息需要帮助
【发布时间】:2011-04-21 16:11:08
【问题描述】:

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

因为只要我尝试dwParam1就是254,不等于note-off或者别的什么。

【问题讨论】:

  • 您的问题涉及细节。如果您指定更多详细信息,例如操作系统、编程语言和可能的代码 sn-p,以及您尝试解码的 midi 消息的具体细节,您将有更多机会获得适当的答案。

标签: midi


【解决方案1】:

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

【讨论】:

  • 但是我怎样才能收到那个音符,通道,速度等??
【解决方案2】:

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

对于status byte (command and channel),使用LOBYTE(dwParam1)

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-19
        • 1970-01-01
        • 1970-01-01
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-22
        相关资源
        最近更新 更多