Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VST仪器多路输入和输出_C++_Audio_Midi_Vst - Fatal编程技术网

C++ VST仪器多路输入和输出

C++ VST仪器多路输入和输出,c++,audio,midi,vst,C++,Audio,Midi,Vst,我想创建一个具有16个MIDI输入和至少16个音频输出的VST乐器。类似于kontakt或halion的做法 有什么想法吗?正如@leftaroundabout所指出的,您不太可能需要16个输入和输出,尤其是对于一个乐器。然而,对于鼓机和其他多声道乐器来说,拥有16个MIDI输入和16个音频输出是非常常见的,用户可能希望单独处理每个声音。一般来说,音频输入对整个乐器并不特别有用 也就是说,您只需像这样实例化您的插件: MyPlugin::MyPlugin(audioMasterCallback

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


有什么想法吗?

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

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

MyPlugin::MyPlugin(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, 0, kNumParameters) {
  if(audioMaster) {
    setNumInputs(0);
    setNumOutputs(16);
  }
  // other constructor stuff ...
}
这是你的出发点。然而,由于绝大多数插件都是立体声的,因此要让主机提供16个输出通道(假设它支持),还需要做很多其他工作。您可能需要在某个时候调用
getSpeakeraRange()
setSpeakeraRange()
,并重写
getOutputProperties()


至于MIDI通道,主机不应与正常通道有任何区别。将以
VstMidiEvent
s的形式向您发送常规MIDI事件,该事件将包含常规MIDI数据(即,如果用户选择,则适用于所有16个通道)。这是最简单的部分——设置输出就是诀窍。

但是你已经有了一些vst编程的经验了吗?我发现令人惊讶的是,16个通道比2个通道更难实现,但在使用SynthMaker之类的软件构建vst插件时,情况并非如此(这是我迄今为止唯一的实现方式)。在那里,您可以添加任意数量的输入和输出。但我的新项目需要在C++中。另外一件事:你真的需要16个MIDI输入,还是仅仅16个MIDI通道(这是任何MIDI连接所提供的数字)?我猜是16个MIDI通道。我希望能够从一个vst控制16种不同的声音,我希望每个通道至少有一个音频输出。我假设你知道Kontakt是如何工作的。如何设置vst,使每个midi通道都可以发送到vst内部的不同通道?所有midi事件都一起发送。根据频道号手动分离传入的midi事件。@Shannon说了什么。;)基本上,您从状态字节中获取较低的半字节以获取频道并将其发送到相应的语音。如何处理16个通道是插件内部设计的一部分,和整个VST框架无关。@Nik,你们知道有并没有可用的示例代码吗。我想看看那会是什么样子。@Daniel,看这里:还有这里: