diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp index 1d96f370df..5c2d360eb6 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp @@ -3037,6 +3037,15 @@ void VSTPluginFormat::setExtraFunctions (AudioPluginInstance* plugin, ExtraFunct vst->extraFunctions = f; } +AudioPluginInstance* VSTPluginFormat::getPluginInstanceFromVstEffectInterface (void* aEffect) +{ + if (VstEffectInterface* vstAEffect = reinterpret_cast (aEffect)) + if (VSTPluginInstance* instanceVST = reinterpret_cast (vstAEffect->hostSpace2)) + return dynamic_cast (instanceVST); + + return nullptr; +} + pointer_sized_int JUCE_CALLTYPE VSTPluginFormat::dispatcher (AudioPluginInstance* plugin, int32 opcode, int32 index, pointer_sized_int value, void* ptr, float opt) { if (VSTPluginInstance* vst = dynamic_cast (plugin)) diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h index 5bfa58c682..d3b7d9fa82 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h @@ -85,6 +85,11 @@ public: /** This simply calls directly to the VST's AEffect::dispatcher() function. */ static pointer_sized_int JUCE_CALLTYPE dispatcher (AudioPluginInstance*, int32, int32, pointer_sized_int, void*, float); + /** Given a VstEffectInterface* (aka vst::AEffect*), this will return the juce AudioPluginInstance + that is being used to wrap it + */ + static AudioPluginInstance* getPluginInstanceFromVstEffectInterface (void* aEffect); + //============================================================================== String getName() const override { return "VST"; } void findAllTypesForFile (OwnedArray&, const String& fileOrIdentifier) override;