I envision it like a million knobs on a giant control board. The host sets the values, the plugins figure out what to do with those settings from there. Things like Bidule allow us to drop in bidules to convert those knob values into MIDI events and back again.
Well, to be accurate… Bidule is currently not available as a VST3 plugin. its only available as VST2. That means hosts such as Dorico and Cubase actually do pass a direct midi buffer full of midi events into Bidule…it doesn’t have to convert anything. That is how VST2 fundamentally works.
Its really only VST3 instruments where this translation happens…and really its only much applicable to VST3 plugins that actually need to subhost other VST2 plugins or process traditional midi events in some way. For example, BlueCatAudio Plug N Script… That is a scripter plugin, and it comes in a VST3 format. It is designed to function in the VST2 paradigm, even though its a VST3 plugin. So PlugNScript converts all the VST3 parameters, as best as it can, back into a traditional midi buffer stream, so that the “script” can look at midi events the old school way without knowing or caring anything about VST3 abstractions. And that is a good thing, it keeps scripting simple and consistent with the rest of the world. And believe me the rest of the world is still using the old midi buffer VST2 approach.
That particular Scripter plugin, by the way, also can’t see the Program Change messages coming from Dorico, but can from Cubase, when using the VST3 version of the scripter.
Someone did bring up that everything is working in Cubase. Cubase fully implements the NoteExpression protocols, and has all kinds of options for converting things MIDI to VST/NE on the fly and back again.
Well also, that is not really why its working in cubase. NoteExpressions have two different levels of thinking about them. NoteExpressions are a feature they built into cubase, with a GUI where you can define midi events to happen as an expression attached to notes. all of that is in the DAW host domain…it has not passed the VST3 barrier yet. The VST3 api easily facilities NoteExpression data structures, etc…
But anyway, at some point, with or without that GUI facility, the VST3 api is used to host plugins and pass data to them for processing. With the VST2 way of doing it, Cubase has to pass an old school midi buffer. I would assume, but have not tested, that in the case of cubase, if you are using the NoteExpression GUI in some way, Cubase itself would have to translate that note expression back to just a simple midi event buffer before calling into the VST2 plugin with the simple midi buffer, as expressed by that NoteExpression in cubase.
But with VST3 plugins…Cubase doesn’t do that translation, it just passes that NoteExpression abstraction directly into the VST3 plugin. For the couple of plugins in the world that know about NoteExpressions, that’s great. For everything else, it would be useless. that’s why for the most part nobody is using NoteExpressions in their plugins, because Cubase would be the only host actually using them. Well anyway, that whole tension about VST2 vs VST3 is another thing…but bottom line…that is not why in this case PC messages are making it into VST3 plugins in Cubase. That might be why Dorico 3.5 isn’t working though! If Dorico assumed it could pass PC as note expressions to VST3 plugins, then it would fundamentally break pretty much all non-steinberg VST3 plugins that haven’t been paying attention to NoteExpressions. Cubase on the other hand may be wise enough to specially NOT try to use NoteExpression internal objects for calling into VST3 plugins.
See what I mean?
Just speculating now. The Dorico team knows what they changed.
The CC lanes in Dorico do seem to behave more like the VST lanes in Cubase (as opposed to the method of specifically using CC lanes in a MIDI or Instrument track using one of the MIDI editors). I.E. In a MIDI track in Cuebase, one can jump instantly from a CC value of 0, to 127. In the VST lane, it has to ramp or curve up, as if twisting the knob (or one has to go to a lot of extra trouble to put end points on the lane, and snip out the lines/curves).
In my view that is probably just a GUI design decision in Dorico.