我可以将原始字节发送到MIDI设备吗? 奖金背景上下文...

问题描述

我正在从命名管道中获取实时MIDI数据流,一次是一个字节。

我想将接收到的数据转发到MIDI设备。我熟悉C#中MIDI的WinAPI编码/互操作。

不幸的是,WinAPI函数midiOutShortMsg要求我首先将字节组装成有效的MIDI消息。我想避免这种情况,只在从管道中获取原始字节时就发送它们。

我是否忽略了WinAPI MIDI功能?还是更广泛的WinAPI中的其他功能,可以让我对MIDI设备进行低级访问,以便我可以发送原始字节?

注意:我已经探索了midiStream个函数集,这些函数都具有与上述相同的问题。

奖金背景上下文...

对于那些可能想知道我在命名管道上处理MIDI数据的人...

我仍然在运行Cakewalk Pro和Encore的Windows 3.1 PC上创作音乐。就像我大约在1994年所做的那样。当我说PC时,我实际上是指VirtualBox虚拟机。

虚拟PC已安装Roland的Serial MIDI驱动程序,该驱动程序通过串行端口提供2x16通道的MIDI输出和1x16通道的MIDI输入。 VirtualBox非常友好,允许我们通过命名管道与虚拟串行端口进行通话/监听。在VirtualBox背面大为实现这种有用的功能。

因此,简而言之:我正在通过VirtualBox提供的命名管道从虚拟PC接收MIDI数据。我想将此数据转发到主机PC上的真实MIDI设备。

采样MIDI流

F5 02 90 3C 7F 40 7F 43 7F 80 3C 00 40 00 43 00

熟悉MIDI消息的人可能会注意到F5 02消息是非标准的,在Roland SC-88上面的示例中,这种Roland的“切换”部件组的方式将知道后续数据是预期的B组的 。如果是F5 01,则表示 A组

此外,上面的数据演示了运行状态,可以省略状态字节以节省带宽。好玩。

如您所见,最好将原始字节发送到MIDI设备。但是,使用WinAPI,似乎我必须在发送字节之前将字节处理为完整的MIDI消息。 WinAPI会强制您进入该框。这意味着必须编写一些状态机,以处理运行状态和sysex以及也许我还没有想到的其他细节。我喜欢Windows,但有时它会使应该变得超级容易,非常困难。

所以我想我要在这里花点时间,看看是否有一种简单的方法,然后再花一些时间来艰苦地做。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...