如何解决我可以将原始字节发送到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 举报,一经查实,本站将立刻删除。