Begin/End gestures when the plugin UI is closed

Spent a couple days getting to the bottom of some differences between DAWs with regards to automation.

I’ve seen others mention that some DAWs ignore begin/end change gesture messages if they don’t arrive on the MM thread. It seems that at least one DAW (Bitwig) also ignores the value change messages if they come from threads other than the message thread.

Anyway, I’m searching for best practices here. My current system is to send parameter change messages (via sendValueChangedMessageToListeners) both synchronously (helper thread) and async at the same time. What could go wrong :wink:

I’m not sure which format you’re testing, I can only speak of VST3. You can take a look at this thread for some details. There are two paths for automation in VST3. One is through the EditController, and it’s message-thread only. The other is sample accurate automation, through the audio thread. The Juce wrapper uses the sample accurate path for calls to setValueNotifyingHost that come from any other than the message thread, but only passes them to the host once per block (so they’re not sample accurate). Beginning and ending gestures are EditController actions and then strictly message-thread: the wrapper already ignores any other calls, they don’t reach the host. Audio thread automation is not recorded by Cubase, so it seems to be intended for output-only parameters, like a meter, and not for parameters that the plugin is meant to read. So, the only safe way of recording automation from the plugin is through the message thread. If a host is ignoring message-thread parameter changes when the UI is closed, that seems like a bug (or a mistake) in the host.

2 Likes

Agreed!

I came upon that post a few days ago, which is a good part of why I wanted to test further. This is all VST3 (should have mentioned that).

Bitwig definitely ignores setValueNotifyingHost when it doesn’t come through the message thread (uggg), so currently it really seems like the best thing to do is put everything on the message thread. Someday we might have sample accurate automation … but clearly not today.

Automation that comes once per block is workable for me … but unfortunetaly I cant even get that (in Bitwig anyway). Reaper and Ableton seem to handle it all somewhat better.

We may, but Bitwig will probably still not record it, as Cubase doesn’t. The fact the Cubase doesn’t record it is a hint to how Steinberg intends it to be used. The thing with closing the UI though, that doesn’t happen in Cubase. It may come from thinking that, as these are UI thread actions, and the EditController “represents the UI”, we can ignore all that when there’s no UI. I would consider that a mistake, precisely because the controller is in charge of parameter changes.

Yeah, agree. I can undertstand that for “touch” mode, as the idea is that the users is touching the UI . For Write mode though, Reaper should certainly record automation even when the UI is closed. Its particularly strange that it keeps the red highlighting on the knob (so it clearly knows there is a gesture going on) and even changes the param value, but then doesn’t bother to record that change.