Hi Arne,
This proposal addresses the use-case of communicating a music performance to an instrument plugin. i.e. notes and continuous controllers.
Why not the existing Steinberg note events?
These are fine, they do the job nicely and add note-expression support which is a great feature. But most plugin developers target multiple plugin standards, so the prospect of having to spend time and money supporting multiple competing note standards is a lost opportunity, especially now that MIDI 2.0 supports per-note controllers anyhow.
Secondly, MIDI provides a simpler and less burdensome mechanism for supporting continuous controllers (CCs).
There is nothing wrong with VSTs ability to have the host map CCs to parameters for the purpose of automating that parameter, it’s a great feature. But the need to create hundreds a ‘fake’ parameters for the purpose of supporting musical CCs like mod-wheel etc become a real pain-point. Esp. with MPE, and esp when a DAWs presents a confusing list of all those ‘accidental’ parameters to the user.
Why this particular implementation?
Since these musical performance events need to be timestamped and available to to process method, it seems that using the Steinberg Event list is a uncontroversial and straight-forward mechanism for this. I doubt that you yourself would choose any significantly different implementation?
What about MIDI-CI
MIDI capabilities is a good feature. But it is fundamentally different than a musical performance because it is a bi-directional protocol. And also because it is used to configure an instrument prior to the actual musical performance.
The problem with using the Steinberg event list for the purpose of MIDI-CI would be that any reply from the instrument to a MIDI-CI inquiry would be subject to the natural latency of the plugin. i.e. it would be impossible to configure the instrument before the first note-on event (potentially) arrived in the event-list. Therefore, this proposal is not a good ‘fit’ for that use-case.
That’s why this proposal does not deal with MIDI-CI. MIDI-CI, in my opinion requires a different mechanism. One that possible runs off the real time thread as part of the setup of the AudioProcessor (before the IAudioProcessor::setProcessing(true) is called).
Secondly, while MIDI-CI might be a great feature, it is in no way essential. We’ve been getting on fine without for a couple of decades.
I hope that explains my reasoning, I am open to any corrections or improvements.
Jeff