【问题标题】:Send MIDI events to a stand-alone sampler/synth将 MIDI 事件发送到独立的采样器/合成器
【发布时间】:2011-04-22 14:42:26
【问题描述】:

我想开发一个非常简单的程序来将 PC 键盘映射到钢琴键盘:每次用户按下一个键都会生成一个 MIDI 事件,并且一个独立的采样器/合成器(例如 SFZ+ 或其他)接收这些事件并播放声音。

我能够生成 MIDI 事件(使用 midiOutShortMsg),但它们被直接发送到 FM 合成器(并由它播放),我想将它们发送到外部软件 .代码必须是 C/C++。

你能帮我吗?

Tnx.

【问题讨论】:

    标签: c++ audio midi


    【解决方案1】:

    你应该看看JACK

    JACK 是实时处理系统, 低延迟音频(和 MIDI)。它运行 在 GNU/Linux、Solaris、FreeBSD、OS X 上 和 Windows(并且可以移植到 其他符合 POSIX 的平台)。它 可以连接多个不同的 应用到音频设备,如 以及允许他们共享音频 他们之间。它的客户可以 在他们自己的进程中运行(即作为 正常应用程序),或者他们可以 在 JACK 服务器中运行(即作为 “插入”)。 JACK 还支持 将音频处理分布在一个 网络,既快速又可靠的局域网 以及速度较慢、可靠性较低的 WAN。

    JACK 是从头开始设计的 用于专业音频工作,及其 设计侧重于两个关键领域: 所有客户端的同步执行, 和低延迟操作。更多的 提供背景信息。

    可用作源代码或二进制文件here

    【讨论】:

    • 谢谢!但我想避免第三方库/框架。我希望只使用“mmsystem.h”和“Winmm.lib”或任何其他系统库(是的,我在 Windows 上;-))无论如何,如果使用起来不是那么困难和繁重,我可以给出一个试试吧!
    【解决方案2】:

    您必须使用“midiOutOpen”打开设备。 如果您选择另一个设备 ID 怎么办?

    【讨论】:

    • 如果我传递 0 作为设备 ID 内部 FM 合成器播放,如果我传递 1 程序崩溃! :-(
    【解决方案3】:

    听起来您没有打开正确的设备。 midiOutOpen 将设备 ID 作为第二个参数;您是否检查过您通过的是否正确(使用 midiOutGetNumDevs 和 midiOutGetDevCaps)?

    【讨论】:

    • 我在我的应用程序之前启动 SFZ+,方法 midiOutGetNumDevs 返回 1(只有一个设备)!我的独立采样器似乎无法识别!
    • 采样器如何获得输入?您是否必须将其配置为从硬件 MIDI 驱动程序获取输入?
    • 嗯...这是个好问题!我注意到 SFZ+ 不允许我配置 MIDI 设置,当我点击 MIDI 菜单时什么都没有出现!也许是因为我工作的 PC 没有任何 MIDI 接口。是否值得安装另一个采样器/合成器?
    【解决方案4】:

    许多软件合成器不会将自己设置为 Windows MIDI 设备。尝试使用免费软件LoopBe1 在 MIDI 应用程序之间连接虚拟电缆。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 2016-09-30
      • 2022-01-22
      • 2013-07-12
      • 1970-01-01
      相关资源
      最近更新 更多