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