我想做一个简单的 VST 插件来做到这一点:
- 分析音频流(音量、节拍等...)
- 在分析仪的输出上有触发器(例如,当音量 > 阈值时执行某些操作)
- 根据触发器生成 MIDI 事件
这是为了能够链接插件,即使它们不是为它设计的。例如,我可以使用音频流的包络控制压缩器的增益,只需将插件的 MIDI OUT 连接到压缩器增益按钮的 MIDI IN 即可。
问题是我不知道该怎么做。VST 中是否支持这样的直接 MIDI 连接?或者,也许我需要某种“虚拟 MIDI 设备”来进行互连?
您在这里的预感可能是正确的;通过编写虚拟 MIDI 设备而不是 VST 插件,这个任务将更容易完成。可以使用 sendVstEventsToHost() 调用将 MIDI 事件发送到音序器,但问题是文档从未指定主机如何对这些事件做出反应。许多主机只是忽略它们,我当然想不出一个可以轻松从插件路由到 MIDI 通道(也许是 plogue bidule?)。
您可能可以使用具有 kAudioUnitType_Generator 插件类型的音频单元来完成此操作...虽然我从未编写过这样的插件,但我的印象是您将使用它来为主机生成 MIDI。但同样,这里的问题是我不确定主机如何允许您将音频路由到插件并接受来自它的 MIDI。
无论如何,当你想为最广泛使用的音序器标准化它的行为时,你作为插件实现的想法将是最难实现的。我认为完成您想要的更简单的方法是创建一个虚拟 MIDI 设备,正如您已经想到的那样,然后使用 rewire 将输入信号路由到您的程序。
编辑:以下是为各种系统编写 MIDI 驱动程序的一些资源:
VST 插件不支持直接 MIDI 连接,它们只能有 MIDI 输入/输出端口。
仍然可以这样做,您只需要一台支持将 midi 从一个插件路由到另一个插件的主机。EnergyXT、Bidule、AudioMulch 和 Console 等模块化主机在这里表现出色。它们都允许自由路由音频和 MIDI 信号(没有反馈路径除外)。但它也可能在具有更“传统”混音器风格的 vst 机架的主机中实现。(例如,AFAIK Reaper 会将任何 midi 从一个插件转发到下一个插件。)
如果您想在 .NET 中构建插件,请查看VST.NET