The project works for VSTi’s from native instruments, but most other VSTis produce an access violation when calling their processReplacing methods in the project.
The initialization:
printf ("HOST> Init sequence...\n");
effect->dispatcher (effect, effOpen, 0, 0, 0, 0);
effect->dispatcher (effect, effSetSampleRate, 0, 0, 0, kSampleRate);
effect->dispatcher (effect, effSetBlockSize, 0, kBlockSize, 0, 0);
checkEffectProperties (effect);
checkEffectProcessing (effect);
checkEffectEditor (effect);
Inside checkEffectProcessing where the access violation happens on the call to processReplacing.
//-------------------------------------------------------------------------------------------------------
void checkEffectProcessing (AEffect* effect)
{
float** inputs = 0;
float** outputs = 0;
VstInt32 numInputs = effect->numInputs;
VstInt32 numOutputs = effect->numOutputs;
if (numInputs > 0)
{
inputs = new float*[numInputs];
for (VstInt32 i = 0; i < numInputs; i++)
{
inputs[i] = new float[kBlockSize];
memset (inputs[i], 0, kBlockSize * sizeof (float));
}
}
if (numOutputs > 0)
{
outputs = new float*[numOutputs];
for (VstInt32 i = 0; i < numOutputs; i++)
{
outputs[i] = new float[kBlockSize];
memset (outputs[i], 0, kBlockSize * sizeof (float));
}
}
printf ("HOST> Resume effect...\n");
effect->dispatcher (effect, effMainsChanged, 0, 1, 0, 0);
for (VstInt32 processCount = 0; processCount < kNumProcessCycles; processCount++)
{
printf ("HOST> Process Replacing...\n");
effect->processReplacing (effect, inputs, outputs, kBlockSize);
}
printf ("HOST> Suspend effect...\n");
effect->dispatcher (effect, effMainsChanged, 0, 0, 0, 0);
if (numInputs > 0)
{
for (VstInt32 i = 0; i < numInputs; i++)
delete [] inputs[i];
delete [] inputs;
}
if (numOutputs > 0)
{
for (VstInt32 i = 0; i < numOutputs; i++)
delete [] outputs[i];
delete [] outputs;
}
}
What do I have to initialize in order for the access violation to not occur.