As @leftaroundabout pointed out, you are unlikely to need 16 inputs and outputs, especially for a tool. However, the presence of 16 MIDI inputs and 16 audio outputs is very common for drum machines and other multi-track instruments, where the user may want to process each voice individually. Audio inputs are generally not particularly useful for instruments in general.
However, you simply create your plugin as follows:
MyPlugin::MyPlugin(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, 0, kNumParameters) { if(audioMaster) { setNumInputs(0); setNumOutputs(16); }
This is your starting point. However, since the vast majority of plugins are stereo only, there is one more work that you will need to do for the host to provide you with 16 output channels (provided that it supports them). You will probably need to call getSpeakerArrangement() and setSpeakerArrangement() at some point, and also override getOutputProperties() .
As for MIDI channels, the host should not treat them differently than usual. You will receive regular MIDI events in the form of VstMidiEvent , which will contain normal MIDI data (i.e., for all 16 channels, if the user so desires). This easy part is getting the output that creates the trick.
source share