It looks like, starting with version 3.5 of Studio One, Presonus has introduced a new “low latency monitoring” feature in their DAW, which is causing severe problems to several plug-ins we’re developing, because of the way it is implemented (see below):
To reproduce, grab the latest version of Presonus Studio One (3.5.2 at the moment of writing) and (refer to the image below):
- Create a new empty project and add an audio track into it
- Insert your plug-in into the track
- Enable the input monitoring for said track
- Enable the “low latency monitoring” feature by clicking the “Z” at the bottom of the output fader
What happens when step 3 is performed is that Studio One creates a second instance (called “slave”) of your plug-in, that will do the processing from then on until the “low latency monitoring” is disabled.
The “master” instance (the one originally created when you inserted the plug-in) is not destroyed: on the contrary, it is kept very much alive, because the UI for your plug-in (the editor), is still connected to that one.
No editor is created for the slave instance which, in turn, by default is kept in sync with the “master” only by mean of automated parameters.
So, for example, suppose you turn a knob in the editor. The corresponding value in the master instance is updated and, in simple plug-ins, it is reasonable to assume that an automation value is also adjusted. That change in automation is caught by Studio One and replicated to the slave instance, which eventually updates the algorithm that’s actually used for processing.
It’s easy to see how this approach cannot work for more complex plug-ins, where several aspects of the processing algorithm are not easily captured by automation: customizable impulse responses, structure of rearrangeable internal sound chains, etc. all fall in this category.
An action in the editor that acts upon one of these aspect is going to be correctly propagated to the “master” instance, but because it does not affect automation, the “slave” instance is going to completely miss that, and the audio of “master” and “slave” will start to diverge.
For those cases, Presonus has released few days ago (end of September) a set of plug-in extensions for the formats they host (VST2, VST3, Audio Unit) which should be used by the “master” instance to keep slave instances in sync.
Obviously, implementing those extensions requires manipulating the JUCE code for wrappers.
Also, I expect this to become more of a common issue the more time passes and this “low latency” feature gets known to the public.
Only a couple of weeks have passed since its release and we’ve already received a support request about it.
Is there any chance something will be implemented in JUCE to cope with this?