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 39:
39. effOfflinePrepare
>= VST2.0 (offline)
@see AudioEffectX::offlinePrepare()
e[value]: count
e[ptr]: pointer to VstOfflineTask array
x[return]: 1 = successful
C++ method:
bool AudioEffectX::offlinePrepare(VstOfflineTask* offline, VstInt32 count)
Delphi method:
function AudioEffectX.offlinePrepare(offline: PVstOfflineTask; count: VstInt32): boolean;
VstOfflineTask structure:
struct VstOfflineTask
{
char processName[96]; // set by plug-in
// audio access
double readPosition; // set by plug-in/Host
double writePosition; // set by plug-in/Host
VstInt32 readCount; // set by plug-in/Host
VstInt32 writeCount; // set by plug-in
VstInt32 sizeInputBuffer; // set by Host
VstInt32 sizeOutputBuffer; // set by Host
void* inputBuffer; // set by Host
void* outputBuffer; // set by Host
double positionToProcessFrom; // set by Host
double numFramesToProcess; // set by Host
double maxFramesToWrite; // set by plug-in
// other data access
void* extraBuffer; // set by plug-in
VstInt32 value; // set by Host or plug-in
VstInt32 index; // set by Host or plug-in
// file attributes
double numFramesInSourceFile; // set by Host
double sourceSampleRate; // set by Host or plug-in
double destinationSampleRate; // set by Host or plug-in
VstInt32 numSourceChannels; // set by Host or plug-in
VstInt32 numDestinationChannels; // set by Host or plug-in
VstInt32 sourceFormat; // set by Host
VstInt32 destinationFormat; // set by plug-in
char outputText[512]; // set by plug-in or Host
// progress notification
double progress; // set by plug-in
VstInt32 progressMode; // Reserved for future use
char progressText[100]; // set by plug-in
VstInt32 flags; // set by Host and plug-in, @see #VstOfflineTaskFlags
VstInt32 returnValue; // Reserved for future use
void* hostOwned; // set by Host
void* plugOwned; // set by plug-in
char future[1024]; // Reserved for future use
};
VstOfflineTaskFlags constants:
enum VstOfflineTaskFlags
{
kVstOfflineUnvalidParameter = 1 << 0, // set by Host
kVstOfflineNewFile = 1 << 1, // set by Host
kVstOfflinePlugError = 1 << 10, // set by plug-in
kVstOfflineInterleavedAudio = 1 << 11, // set by plug-in
kVstOfflineTempOutputFile = 1 << 12, // set by plug-in
kVstOfflineFloatOutputFile = 1 << 13, // set by plug-in
kVstOfflineRandomWrite = 1 << 14, // set by plug-in
kVstOfflineStretch = 1 << 15, // set by plug-in
kVstOfflineNoThread = 1 << 16 // set by plug-in
};