我想开发一个非常简单的程序来将PC键盘映射到钢琴键盘:每次用户按键时,都会生成一个MIDI事件,并且一个独立的采样器/合成器(例如SFZ +或其他)接收到这些事件发出了声音。
我能够生成MIDI事件(使用midiOutShortMsg),但它们会直接发送到FM合成器(并由它播放),我想将它们发送到外部软件 。代码必须是C / C ++。
你能帮帮我吗?
TNX。
答案 0 :(得分:3)
您应该查看JACK
JACK是实时处理的系统, 低延迟音频(和MIDI)。它运行 在GNU / Linux,Solaris,FreeBSD,OS X上 和Windows(可以移植到 其他符合POSIX标准的平台)。它 可以连接许多不同的 应用程序到音频设备,如 以及允许他们分享音频 他们之间。它的客户可以 在他们自己的过程中运行(即 正常的应用程序),或他们可以 在JACK服务器内运行(即作为 “插入”)。 JACK也有支持 分配音频处理 网络,快速和快速可靠的局域网 以及更慢,更不可靠的WAN。
JACK是从头开始设计的 专业音频工作,及其 设计侧重于两个关键领域: 同步执行所有客户端, 和低延迟操作。更多 背景信息可用。
可用作来源或二进制文件here。
答案 1 :(得分:0)
您必须使用“midiOutOpen”才能打开设备。 如果您选择其他设备ID怎么办?
答案 2 :(得分:0)
听起来你没有打开正确的设备。 midiOutOpen将设备ID作为第二个参数;你检查了你传递的那个是否正确(使用midiOutGetNumDevs和midiOutGetDevCaps)?
答案 3 :(得分:0)
许多软件合成器都没有将自己设置为Windows MIDI设备。尝试使用免费软件LoopBe1连接MIDI应用程序之间的虚拟电缆。