VST乐器多路输入输出

6
我想创建一个VST乐器,它有16个MIDI输入和至少16个音频输出。与kontakt或halion类似。
你有什么想法吗?

1
但是你已经有一些VST编程的经验了吗?我觉得16个通道应该比2个更难实现,但是在使用SynthMaker等软件构建VST插件时并非如此。在那里,您可以添加任意数量的输入和输出。 - leftaroundabout
我有一些经验,之前也用过合成器制作软件。但是我的新项目需要使用C++语言。 - Daniel Rodrigues
2
另外一件事:你真的需要16个MIDI输入,还是只需要16个MIDI通道(这是任何MIDI连接提供的数量)? - leftaroundabout
我猜有16个Midi通道。我希望能够从一个VST控制16个不同的声音,并且我希望这些通道中每个至少有一个音频输出。 - Daniel Rodrigues
1个回答

4
如@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的形式,其中包含常规的MIDI数据(即,如果用户选择,则包括所有16个通道)。这是易于处理的部分 - 设置输出是关键。

我假设你知道Kontakt的工作原理。我该如何设置我的VST,以便每个MIDI通道可以发送到VST内的不同通道? - Daniel Rodrigues
2
所有的 MIDI 事件都一起发送。根据通道号手动分离传入的 MIDI 事件。 - Shannon Matthews
1
就像@Shannon所说的那样。 ;) 基本上,您从状态字节中获取低位字节以获取通道,并将其发送到相应的音频。如何处理16个通道是插件内部设计的一部分,与整个VST框架无关。 - Nik Reiman
@Nik,你知道是否有任何示例代码可用吗?我想看看那可能是什么样子。 - Daniel Rodrigues
@Daniel,请看这里:http://www.gweep.net/~prefect/eng/reference/protocol/midispec.html 和这里:http://www.srm.com/qtma/davidsmidispec.html - Brad
我已经掌握了基础知识。现在我想知道如何将每个 MIDI 通道分配到一个音频输出。(Midi Ch. 1 - Audio Ch. 1,Midi Ch. 2 - Audio Ch. 2,等等)你有什么想法吗? - Daniel Rodrigues

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接