time to let it be properly documented by the white boxers/engineers then, don’t you think? ![]()
Thanks anyway. There doesnt need to be a diagram, but at least some detailed description of the intended MIDI flow design?
My own
My primary goal is to badge audio application developers ![]()
No, I once wrote a guidance about realtime converting MIDI to VST Automation and vice versa:
I got a request from a user, who asked me to produce a video explaining it visually and I wanted to do just that so I prepared some stuff to record a video, which was, when I encountered the “MIDI routing” issue:
Control VST Parameter Automation Using MIDI CC / MIDI part/event editing capabilities
I’m coming from a Sound Design perspective: Imagine, I have a VSTi Instrument track #19. I use a filter VSTfx insert in slot #3 of this track. BOTH VST plugins “form” the desired sound. The VSTi is played by MIDI notes. The filter cutoff is “played” by Automation only, as the VSTfx doesn’t have MIDI input, for example.
In this case, with Cubase, I’d usually have a MIDI track for playing back the VSTi, and an automation subtrack, controlling the filter cutoff of the VSTfx.
This, too me, always “feels” weird. Automation subtracks in Cubase are rather meant for mixing/mastering tasks, in a “timeline manner”, not in a musical or “sound designing manner”. In the mentioned case, due to the filter cutoff “belonging” to the “sound” of a single note, I don’t want to edit MIDI notes and filter cutoff automation separately on different tracks/editors, in “different contexts”, I rather want to be able to edit the “sound” of a single note (which includes the filter cutoff) in ONE place, “in a musical context”.
The best way to achieve this is the Piano Roll editor. This is where I “draw” notes and where I can draw (Note Expression) MIDI CC data to achieve the “sound” for a single note. As said, the filter VSTfx in this theoretical case is not controllable by MIDI CC, so I need a way to control the filter cutoff by MIDI CC data.
I use a virtual MIDI Loopback Port and a Generic Remote, to “convert” MIDI CC data to VST Automation Parameters and vice versa: I send MIDI CC data to the virtual MIDI Loopback Port, a Generic Remote receives this MIDI CC data and “maps/converts” it to - remote controls VST Automation Parameters.
The Generic Remote adressed parameters however are always “absolute”: I may create a Generic Remote which receives CC#0 values from the virtual MIDI Loopback Port and remote controls the “filter cutoff” parameter of the VSTi Instruments Track #19 (the Track # where the VSTi is slotted in) Insert Slot #3 (where the filter VSTfx is slotted in on this track). But when I insert a track before track #19, or move the VSTfx from Insert Slot#3 to slot #5, this mapping is “broken”, as the Generic Remote allways adresses VST Automation Parameters in an “asbolute kind of way”, ie, after altering the track/insert order, the Generic Remote still controls a Parameter # of Insert Slot#3 of Track #19, even though the VSTfx isn’t there anymore…
To overcome this, I created a generic Project Template. THE FIRST 16 TRACKS in every project of mine are 16 unused MIDI dummy tracks #1 - #16. The mentioned Generic Remote receives MIDI CC#0 - CC#127 on Channel #16 from the virtual MIDI Loopback Port. These control the Quick Control Slots 1-8 of track#1 with MIDI CC#0-7, the QC Slots 1-8 of track#2 with MIDI CC#8-15 and so on…
Thus, I have a virtual MIDI Loopback port, I can send MIDI CC#0 - CC#127 on Channel #16 out of this virtual MIDI port from anywhere within Cubase, the Generic Remote receives from this virtual MIDI Loopback Port and “remote controls” the first 128 Quick Control Slots in every project. I can then assign these first 128 Quick Control Slots to any VST Automation Parameter in the project. I assign for example Quick Control Slot #1 of Track #1 to the filter cutoff parameter of the VSTi Instrument Track #19s filter VSTfx in Insert Slot#3.
When I alter the order of tracks after these first 16 dummy MIDI tracks in the project or when I alter the order of Inserts, the Quick Control assignment “follows”. When I for example drag the filter VSTfx in Insert Slot #3 to the Insert Slot #5, the Quick Control assignment stays intact and then still adresses the filter cutoff parameter of this VSTfx then in Insert Slot #5, because the Quick Controls, other than the absolute Generic Remote adressing is RELATIVE and follows changes to the track/insert order!
So, I have a MIDI track routed to the VSTi, I have a MIDI part on this track, I open the Piano Roll for this part and draw a single note. I doubleklick this note, enter the VST Note Expression Editor and draw the filter cutoff curve for this note using MIDI CC#0.
With a MIDI send on this track, I send the MIDI data out to the virtual MIDI loopback port, Channel #16. The Generic Remote receives the VST Note Expression MIDI CC#0 values on Channel #16 and controls Quick Control #1 of track #1, which is assigned to the filter cutoff of the VSTfx…
I edit the "sound"s parameters for this note in ONE place: In the Piano Roll / Note Expression Editor
Without further adjustments, the MIDI CC#0 data from Note Expression is routed to both the VSTi AND to the virtual MIDI loopback port via a MIDI send!
If the VSTi itself reacted on MIDI CC#0 (and for example changes presets on MIDI CC#0 bank change), this would be undesired behaviour, as MIDI CC#0 is meant for the VSTfx, not for the VSTi, although belonging to the same “sound”. So I need a way to filter out MIDI CC#0 for the VSTi, and, preferably, filter out anything but MIDI CC#0 data for the Send to the virtual MIDI loopback port.
This is why I
-
setup a MIDI Insert fx Transformer, which deletes MIDI CC#0 events (so the VSTi wont receive MIDI CC#0 anymore), and
-
switch the MIDI send to “Pre-Insert”, use a Transformer, which deletes anything but MIDI CC#0 and outs to the virtual MIDI Loopback port on MIDI channel #16, having the Generic Remote effectively only receiving MIDI CC#0 data from this MIDI part.
However, I noticed that the Transfomer Insert in 1) is NOT being processed, ie the VSTi still receives MIDI CC#0 data!
Which caused some black box testers surprise and iniated this thread ![]()
In summary:
Note Expression is the perfect way to control a single notes sound parameters in one unique place and in a musical context, no matter of how many plugins actually “form” the sound.
I need a way to
-
edit a “sounds” parameters (which consists of any number of plugins in the "sound"s audio chain) in a musical context, ie, in ONE place, and this currently is only possible and preferable with the Piano Roll / Note Expression
-
distribute Note Expression MIDI CC data for a single note to other targets (MIDI ports/channels) than the MIDI note data itself, as the sound for this note may be formed by any number of plugins)
In order to accomplish this, I first need to know exactly how MIDI from multiple sources to/within a track and to different sinks in a track is meant to flow though the track. I need insights to the black box ![]()
You could as well short term develop a way to include any VST Automation Parameters in the Note Expression editor, if you prefer ![]()