Control DAW parameters from plugin

How can DAW track or transport parameters be controlled via the VST3 plugin?
For example, track Volume, Mute, Solo, Pan, Sends, etc.
There are some plugins out there which can do that, so I’m wondering which kind of interface can be used to communicate with the DAW?

There are two different questions here:

  1. How do you access Transport Information
  2. How do you access the Host’s mixer state on tracks (mute, solo, pan, volume)

You can get transport information from the Processor side of VST3, e.g.,

if ( (data.processContext->state & Steinberg::Vst::ProcessContext::kPlaying) == 0 )
{
  // we're playing!
}

Check out the ProcessContext’s enum StatesAndFlags for more information.

Tempo is also provided through ProcessContext, but you’ll also see that it’s “optional”. The DAWs I’ve used have reliably provided it, however.

You’ll want to package whatever information you want the Controller side of VST3 to have and then notify the Controller using the Processor’s notify function.

In terms of getting the host’s mixer state, that’s not part of the VST3 specifications (as far as I’m aware). Some DAWs may allow you access to their APIs in order to get that info, but it’s not portable to other DAWs and it’s not part of the VST3 standard.

Hope that helps.

1 Like

Thanks for your answer, that partly answers it (how to get transport).

To get the mixer state, I figured out that some DAWs implement the Steinberg Plug-in Extensions, which have been added to Juce (for example found in the juce_audio_processors_headless/format_types/pslextensions/ipslcontextinfo.h).

I somehow got this to partially work, but not getting live updates via notifyContextInfoChange in some DAWs.
In Ardour, the code works and producing changes, for Ableton I see the changes only when I manually poll for the new values, but in Luna I don’t get any values, although I see the interface is available after queryInterface .

Does anyone have a working example on how to properly implement this extension?