Is it possible to customize parts of the VST3 bindings?

Hi all!

First and foremost, thank you all for creating such a wonderful framework.

Couple months ago, I released my first synth plugin. It is based on VST3 and VSTGUI, windows-only. Shortly after that, I was contacted by someone from Surge Synth Team, asking if it would be possible to add Linux support. After a while it became clear that VSTGUI isn’t really ready for Linux ATM. So, i decided to switch the plugin’s UI to JUCE. That’s been a very rewarding experience so far. Clean API, clean docs, no unwanted surprises. Loving the customizable look-and-feel.

Now, because I already had a working implementation of VST3’s API (processor/controller/editor), I decided to just re-use those, and was hoping to swap VSTGUI for JUCE’s UI classes without touching the plugin<->host bindings.

And because the project started out less then 2 years ago, I never had a chance to do a VST2 version (legal and all). That had the unfortunate side-effect of my plugin becoming over-reliant on VST3 features, in particular sample-accurate automation. I just never ever wrote the smoothing/interpolation code that I imagine is present on plugins that have been around for a while. I also read it’s not on the agenda for JUCE in a couple forum posts over here.

So now I’m wondering, is there any way to have the best of both worlds? I already have my custom implementations of Steinberg::Vst::AudioEffect, Steinberg::Vst::EditController and Steinberg::Vst::EditorView. Works great on Windows. Not so much on Linux. In particular I suspect VST3’s Linux runloop stuff is causing me issues here, which I know you have already worked together with Surge to get fixed.

What I’m really hoping for, here, is to be able to use juce::JuceVST3Editor while still being able to use my own versions of Vst::EditController (JuceVST3EditController) and Vst::IAudioProcessor (JuceVST3Component). I wouldn’t mind copying and altering the JUCE source code either, but processor-controller-editor just seem so intertwined that I wouldn’t know where to start.

Any thoughts/pointers greatly appreciated.

-cheers, Sjoerd