C++:
VstIntPtr function dispatcher(AEffect* e, VstInt32 opcode, VstInt32 index, VstIntPtr value,
void* ptr, float opt);
Delphi:
function dispatcher(e: PAEffect; opcode, index: VstInt32; value: VstIntPtr; ptr: pointer;
opt: Single): VstIntPtr; cdecl;
always returns 0, unless otherwise defined.
all string-pointers points to zero terminated strings.
e[ ]: = plugin receives as entry parameter
x[ ]: = plugin returns to host
dispatcher() function using opcode 64:
64. effGetMidiProgramCategory
>= VST2.1
@see AudioEffectX::getMidiProgramCategory()
e[index]: MIDI channel
e[ptr]: points to MidiProgramName* structure initialized by host.
x[ptr]: struct will be filled with information for 'thisCategoryIndex'.
x[return]: number of used categoryIndexes. if 0 is returned, no MidiProgramCategories supported.
C++ method:
VstInt32 AudioEffectX::getMidiProgramCategory(VstInt32 channel, MidiProgramCategory* category)
Delphi method:
function AudioEffectX.getMidiProgramCategory(channel: VstInt32; category: PMidiProgramCategory): VstInt32;
MidiProgramName structure:
struct MidiProgramName
{
VstInt32 thisProgramIndex; // 0 or greater: fill struct for this program index
char name[kVstMaxNameLen]; // program name
char midiProgram; // -1:off, 0-127
char midiBankMsb; // -1:off, 0-127
char midiBankLsb; // -1:off, 0-127
char reserved; // zero
VstInt32 parentCategoryIndex; // -1:no parent category
VstInt32 flags; // omni etc. @see VstMidiProgramNameFlags
};
VstMidiProgramNameFlags constant:
enum VstMidiProgramNameFlags
{
MidiIsOmni = 1 // default is multi. for omni mode, channel 0 is used for inquiries and program changes
};