我正在尝试使用C#实现MIDI设备的使用。现在,我正在实现通过输出设备发送消息。我看到有MidiOutProc。我正在midiOutOpen方法中传递适当的回调。问题是当我通过设备发送消息时未执行回调(发送正常,我看到数据是通过我正在测试API的虚拟MIDI端口传输的)。发送消息时,我应该属于这个回调吗?打开设备时,我会收到MOM_OPEN
消息的回调,因此回调已正确连接。
我正在通过midiOutShortMsg函数发送消息。
已更新:
似乎对于输出设备,带有消息的回调将仅使用MOM_DONE
执行。从有关此消息类型的文档中:
当指定的系统专用缓冲区或流缓冲区已播放并且正在返回给应用程序时,MOM_DONE消息将发送到MIDI输出回调函数。
因此,似乎未对通过midiOutShortMsg
发送的 Note On 之类的通道消息执行回调。是吗?
答案 0 :(得分:1)
在发送带有缓冲区的大型MIDI消息时,需要MOM_DONE回调消息来告知您的程序何时可以重新使用(或释放)缓冲区。而且该回调消息仅用于管理缓冲区。
对于短消息,不必要这样的通知。如果要在发送短消息后执行某些操作,只需直接调用该代码即可。