OK - thanks. Good to know that this is not a VST3 SDK issue but rather a host issue.
(I am just a beginner in coding VST plugins, maybe i have overlooked anything.)
So it was never thought of designing ârealâ midi VST3 plugins?
I recentley did this juce beginner tutorial: hxxps://docs.juce.com/master/tutorial_code_basic_plugin.html
(cant post links, so replace xx to tt)
VST2 version works fine upon setting plugin midi in and plugin midi out in projucer. While VST3 plugin simply doesnt work.
What is the solution to get the VST3 version working?
Also Why is it so bad to not allow 3 VST3 plugin versions? MIDI FX, Audio and Mixed aka Synth Plugin?
There is a post above that answers your question:
In other words, Steinberg, Presonus, Ableton donât want you to create your own MIDI plugins. They want you to use their great (cough) MIDI effects instead. Now that VST2 has been deprecated, if you want to create your own MIDI effects, you have to get a Mac, code them as MIDI effect Audio Units and use them in Logic or Reaper.
I have a similar issue - Iâm not trying to create a MIDI effect, just one that uses MIDI CCs for parameters (using IMidiMapping).
Steinbergâs LegacyMIDICCOutEvent workaround has caused ambiguity which actively breaks some use-cases. Hereâs a diagram I posted in another thread about how MIDI is passed through an effect chain:
Effects which used IMidiMapping used to all function like (3). WithLegacyMIDICCOutEvent, itâs now ambiguous whether they should act like (5).
Any effect could output legacy MIDI events - so if they donât, hosts have to guess whether theyâre MIDI input-only, or whether theyâre deliberately absorbing CCs.
For synths, CC1, CC74, pitchbend and channel aftertouch are essential performance modulation sources. So, there has to be event types at least for those.
You modulate via parameter changes and the host is free to use any source for modulation like MIDI CC and aftertouch. The host even can modulate single voices via note expression if it likes to support this.
@ESZ: You might be able to do what you want with LegacyMIDICCOutEvent
. Although the input takes nice sample-accurate automation, you can output MIDI events, including things like pitch-bend. You have to do the awkward conversion back yourself (even though the DAW converts input MIDI events to automation for you), and if your user connects the parameter to a different controller then youâll be outputting the wrong MIDI events, but I think thatâs all we can do for now.
IMO, the VST3 standard has made MIDI controller output very ambiguous, by half-supporting it with LegacyMIDICCOutEvent
. The simple solution would be to let you tag output parameters with IMidiMapping
as well, at which point you could use processData.outputParameterChanges
in the obvious way.
Itâs been several years since these MIDI-output issues were first raised though, and they havenât yet acknowledged that making users manually route MIDI or connect parameters up is awkward, so .
@Arne_Scheffler so what is the correct way for an host to send an âall notes offâ event to a plug-in ? Surely one is not supposed to allocate 16*128*number_of_midi_busses explicit VstEvent note off events ?
As a host you should know which noteOn events you have send to the plug-in without a noteOff event thus you send the corresponding noteOff events to the plug-in.
As a host you should know which noteOn events you have send to the plug-in without a noteOff
1/ yes, but storing those has a cost⌠needs dynamic allocations, etc⌠for no good reason.
2/ this wonât catch event that werenât generated from the host, e.g. clicking on a note in a virtual keyboard in a plug-in UI, plug-ins that get MIDI data from external sources such as custom reading of MIDI through OS API (unrelated, but, while mentioned here, this is definitely not a good solution as e.g. on Linux apps may have an exclusive access to MIDI devices, so if the host is using a MIDI controller keyboard for note input, the plug-in may not necessarily be able to go read the native MIDI CC events of said keyboard), OSC or whatever
If you want to have the equivalent of âall sounds offâ then deactivate and reactivate the plugin.
How come the whole community is asking for true MIDI 1.0 support and you just refuse to do so?
I think that a DAW is actually intended for the users. And not necessarily just for the programmers. And in my opinion you should simply stick to the current circumstances.
I would also have been very happy if MIDI 2.0 had become established 20 years ago. Unfortunately it hasnât to this day.
So weâll just have to live with it, O.K. As long as all DAWs donât suddenly only support 2.0 and no one has the right hardware for it.
I think itâs a shame that I still have to use VST2 versions (if they still exist) of plugins to make certain MIDI things work.