midiInProc デリゲートからの dwParam1 を、ノート オフ、ノート オン、コントロール チェンジなどの MIDI ステータス メッセージに解釈するにはどうすればよいですか?
私が試している限り、dwParam1 は 254 であり、ノートオフなどと等しくないからです。
midiInProc デリゲートからの dwParam1 を、ノート オフ、ノート オン、コントロール チェンジなどの MIDI ステータス メッセージに解釈するにはどうすればよいですか?
私が試している限り、dwParam1 は 254 であり、ノートオフなどと等しくないからです。
すべての入力デバイスからノートオフを受け取るとは限りません。IIRCは、デバイスがノートオフの代わりにボリューム=0のノートオンを送信することは合法です。また、ドラムストリーム(ドラムマシンおよび/またはMIDIチャンネル10)には、通常、ノートオンのみが含まれ、ノートオフは含まれないと思います。
あなたの質問がdwParam1とmidiInProcに言及していることを考えると、これはWindows用であると思います。midiInProcでMIM_DATAを受け取ったら、次のようにdwParam1を解析できます。
ステータスバイト(コマンドとチャネル)には、を使用しますLOBYTE(dwParam1)
。
最初のデータバイトには、を使用しますHIBYTE(dwParam1)
。
該当する場合は、2番目のデータバイトに。を使用しますLOBYTE(HIWORD(dwParam1))
。
@Conrad Albrecht による回答はほとんど正しいですが、元のポスターはおそらくMIDI の実行状況によって混乱していると思われるため、(コメントではなく) 回答を付けたいと思いました。
通常の MIDI ステータス バイトに似ていないバイトが表示されている場合は、受信した前のバイトと同じタイプであると想定できます。したがって、MIDI ノート オフの代わりにベロシティ 0 のイベントで MIDI ノートを使用することは、合法であるだけでなく、非常に一般的です。
これらのバイトは、イベントの MIDI ノートの通常の 2 番目の 2 バイトとして解釈する必要があります。
あなたが何を求めているのか完全にはわかりませんが、MIDI データを解釈する方法を理解しようとしていると思います。
このリソースをお勧めします: http://www.midi.org/techspecs/midimessages.php
ノートに関連する MIDI メッセージは、バイト全体ではなく、最初の 4 ビットで区別されます。最初のバイトの最後の 4 ビットはチャネルを指定します。