VST 仪器多进多出

Posted

技术标签:

【中文标题】VST 仪器多进多出【英文标题】:VST instrument multiple in and out 【发布时间】:2011-05-26 16:17:47 【问题描述】:

我想创建一个具有 16 个 MIDI 输入和至少 16 个音频输出的 VST 乐器。类似于 kontakt 或 halion 的做法。

有什么想法吗?

【问题讨论】:

但是你已经有一些vst编程的经验了吗?我发现 16 个通道比 2 个通道更难实现,这让我感到惊讶,使用 SynthMaker 之类的软件构建 vst 插件时并非如此(这是迄今为止我完成的唯一方法)。在那里,您可以添加任意数量的输入和输出。 一些经验,之前用过synth maker。但我的新项目需要使用 C++。 另一件事:你真的需要 16 个 MIDI 输入,还是只需要 16 个 MIDI 通道(这是任何 MIDI 连接提供的数量)? 我猜有 16 个 Midi 频道。我希望能够从一个 vst 控制 16 种不同的声音,并且我希望每个通道至少有 1 个音频输出。 【参考方案1】:

正如@leftaroundabout 所指出的,您不太可能需要 16 个输入和输出,尤其是对于乐器而言。然而,对于鼓机和其他多轨乐器来说,拥有 16 个 MIDI 输入和 16 个音频输出是非常常见的,用户可能希望单独处理每个声音。一般来说,音频输入对于整个乐器来说并不是特别有用。

也就是说,您只需像这样实例化您的插件:

MyPlugin::MyPlugin(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, 0, kNumParameters) 
  if(audioMaster) 
    setNumInputs(0);
    setNumOutputs(16);
  
  // other constructor stuff ...

这是你的出发点。然而,由于绝大多数插件都是立体声的,你需要做很多其他的工作才能让主机为你提供 16 个输出通道(假设它支持它)。您可能需要在某些时候调用getSpeakerArrangement()setSpeakerArrangement(),并覆盖getOutputProperties()

对于 MIDI 通道,主持人不应有任何区别对待它们。您将收到常规的 MIDI 事件,格式为VstMidiEvents,其中包含常规的 MIDI 数据(即,如果用户选择,则用于所有 16 个通道)。这是最简单的部分——设置输出就是诀窍。

【讨论】:

我假设您知道 Kontakt 的工作原理。如何设置我的 vst 以便每个 midi 通道都可以发送到 vst 内的不同通道? 所有midi事件一起发送。根据通道号手动分离传入的 MIDI 事件。 @Shannon 所说的。 ;) 基本上,您从状态字节中获取低半字节以获取通道并将其发送到相应的语音。如何处理 16 个通道是插件内部设计的一部分,与整个 VST 框架无关。 @Nik,您知道是否有可用的示例代码。我想看看那会是什么样子。 @Daniel,看这里:gweep.net/~prefect/eng/reference/protocol/midispec.html 在这里:srm.com/qtma/davidsmidispec.html

以上是关于VST 仪器多进多出的主要内容,如果未能解决你的问题,请参考以下文章

在 C#/C++ 中托管 VST/DX 仪器? [关闭]

WinCE项目应用之虚拟仪器(VI)

错误 - 未注册仪器!必须在注册仪器下运行

测控技术与仪器专业好不好

RS323串口连接仪器,接收仪器信息

单元/仪器测试 Android Gradle。仪器测试不会运行