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 事件,格式为VstMidiEvent
s,其中包含常规的 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 仪器多进多出的主要内容,如果未能解决你的问题,请参考以下文章