diff --git a/extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.cpp b/extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.cpp index 15b1d77c33..14a2ff610a 100644 --- a/extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.cpp +++ b/extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.cpp @@ -352,14 +352,14 @@ public: firstResize = true; hasShutdown = false; channels = 0; + numInChans = JucePlugin_MaxNumInputChannels; + numOutChans = JucePlugin_MaxNumOutputChannels; #if JUCE_MAC || JUCE_LINUX hostWindow = 0; #endif - filter->setPlayConfigDetails (JucePlugin_MaxNumInputChannels, - JucePlugin_MaxNumOutputChannels, - 0, 0); + filter->setPlayConfigDetails (numInChans, numOutChans, 0, 0); filter_->setPlayHead (this); filter_->addListener (this); @@ -373,8 +373,8 @@ public: wantEvents(); #endif - setNumInputs (filter->getNumInputChannels()); - setNumOutputs (filter->getNumOutputChannels()); + setNumInputs (numInChans); + setNumOutputs (numOutChans); canProcessReplacing (true); @@ -573,8 +573,8 @@ public: void process (float** inputs, float** outputs, VstInt32 numSamples) { - const int numIn = filter->getNumInputChannels(); - const int numOut = filter->getNumOutputChannels(); + const int numIn = numInChans; + const int numOut = numOutChans; AudioSampleBuffer temp (numIn, numSamples); int i; @@ -608,8 +608,8 @@ public: { const ScopedLock sl (filter->getCallbackLock()); - const int numIn = filter->getNumInputChannels(); - const int numOut = filter->getNumOutputChannels(); + const int numIn = numInChans; + const int numOut = numOutChans; if (filter->isSuspended()) { @@ -716,6 +716,9 @@ public: } //============================================================================== + VstInt32 startProcess () { return 0; } + VstInt32 stopProcess () { return 0;} + void resume() { if (filter == 0) @@ -723,7 +726,7 @@ public: isProcessing = true; juce_free (channels); - channels = (float**) juce_calloc (sizeof (float*) * (filter->getNumInputChannels() + filter->getNumOutputChannels())); + channels = (float**) juce_calloc (sizeof (float*) * (numInChans + numOutChans)); double rate = getSampleRate(); jassert (rate > 0); @@ -733,8 +736,7 @@ public: const int blockSize = getBlockSize(); jassert (blockSize > 0); - filter->setPlayConfigDetails (JucePlugin_MaxNumInputChannels, - JucePlugin_MaxNumOutputChannels, + filter->setPlayConfigDetails (numInChans, numOutChans, rate, blockSize); deleteTempChannels(); @@ -976,10 +978,18 @@ public: return filter != 0 && filter->isParameterAutomatable ((int) index); } - bool setSpeakerArrangement (VstSpeakerArrangement* /*pluginInput*/, - VstSpeakerArrangement* /*pluginOutput*/) + bool setSpeakerArrangement (VstSpeakerArrangement* pluginInput, + VstSpeakerArrangement* pluginOutput) { // if this method isn't implemented, nuendo4 + cubase4 crash when you've got multiple channels.. + + numInChans = pluginInput->numChannels; + numOutChans = pluginOutput->numChannels; + + filter->setPlayConfigDetails (numInChans, numOutChans, + filter->getSampleRate(), + filter->getBlockSize()); + return true; } @@ -1358,6 +1368,7 @@ private: bool firstResize; bool hasShutdown; int diffW, diffH; + int numInChans, numOutChans; float** channels; VoidArray tempChannels; // see note in processReplacing() bool hasCreatedTempChannels; @@ -1491,9 +1502,7 @@ extern "C" __attribute__ ((visibility("default"))) AEffect* main_macho (audioMas // Linux startup code.. #elif JUCE_LINUX -extern "C" AEffect* main_plugin (audioMasterCallback audioMaster) asm ("main"); - -extern "C" AEffect* main_plugin (audioMasterCallback audioMaster) +extern "C" AEffect* VSTPluginMain (audioMasterCallback audioMaster) { initialiseJuce_GUI(); SharedMessageThread::getInstance(); @@ -1501,6 +1510,13 @@ extern "C" AEffect* main_plugin (audioMasterCallback audioMaster) return pluginEntryPoint (audioMaster); } +extern "C" AEffect* main_plugin (audioMasterCallback audioMaster) asm ("main"); + +extern "C" AEffect* main_plugin (audioMasterCallback audioMaster) +{ + return VSTPluginMain (audioMaster); +} + __attribute__((constructor)) void myPluginInit() { // don't put initialiseJuce_GUI here... it will crash !