just to clarify: my “virtualization” approach is more about abstracting input devices from their physical ports and properties, not about using instruments. I’ll come to that later.
Now about using racks in songs: my approach, developed over a couple of years now, is to wrap individual instruments in racks and then combine them in songs as needed. This way, only the actual devices I really need in a song consume CPU cycles.
A typical instrument rack contains just the VST instrument plus an EQ (I use EQs in most of my racks as a way to shape presets), plus bindings to initialize the instrument for any song opened. Here is a typical instrument rack:
I usually just send the notes to the instrument and assign the controllers explicitly in bindings - avoids nasty side effects when unwanted controllers are sent to the instrument. Here is the bindings page with the “control” section open:
You’ll see that some controllers are just routed through, others are converted through the bindings.
Also, there is usually an “Init” bindings section to make sure the rack is a defined state when a new song is loaded, so whatever on-the-fly control changes you made in a previous song, you always get what you expect:
My racks then have a number of rack states, kind of like patches for a physical synth. Then I bring them into a song, select the rack “preset” I want for the song (or create a new one if I need one) and build my song out of these individual “lego bricks”
Now a typical song for me looks like this - actually, this is one I use as a template when setting up a new song, since a lot of elements are in place:
This is one of my typical “rehearsal” songs (when we spontaneously try a new song that I haven’t prepared a dedicated setup for): it contains a piano with additional organ and string layers that can be faded in (via controllers) when I need them, plus three solo instruments (Hammond B3-X, a SWAM sax, plus Surge for a synth sound). I play the piano and its layers on my lower 88 key keyboard and the solo instruments on the 61 key upper board. I switch between the solo instruments via drum pads on my upper keyboard that select one of the four song states. This switching is done by activating / de-activating pre-configured routes from the upper keyboard to the instruments.
The “Main Piano Rack”, “StringLayerRack” and “HammondRack” are all routed to the “_MainVolume” rack (with some parallel routes to the “MainReverb” rack which in turn routes to _MainVolume as well). This way, I can control the overall volume of the main layered sound with a fader on my controller.
The “Organ Solo IK”, “Alto Sax” and “Surge Solo” racks all route to _SoloVolume, same as for the main layer.
Both volume control racks then feed into the “master rack”, which contains a master limiter, plus gives an additional master volume control, which is also not song-controlled, so I can adjust my master level statically on-stage.
Now to the input side of things: I don’t use the input ports directly - I have my “abstracted” input racks at the top for that. In these racks, I convert and split the input from Cantabile’s input ports to separate outputs, so it can be routed easily. Here’s the routing from the main keyboard:
You see that I have separate outputs for notes only, plus for pitch bend, modulation and aftertouch, so I can control exactly which instrument receives only notes, which one gets pitch or mod commands, etc.
Here’s the upper keyboard assignment:
You see the active routes to the organ, plus the de-activated ones to the sax and the synth. Plus, you see that the organ doesn’t get aftertouch (doesn’t need it) but the other two instruments get it.
Then I have a separate rack just for the pedals:
Even though my pedals are physically hooked up to the lower keyboard, I assign them freely to where they make most sense: e.g. the expression pedal controls the organ that I play on my upper keyboard, the sustenuto pedal switches the leslie speed.
All very transparent and easy to “wire” - and easy to debug if something doesn’t quite like as I intended it to.
Last, I have a “drumpads” rack. Even though the drumpads are a physical part of the upper keyboard, I separate them out to their own rack to make things more structured. In this song, the drumpads rack isn’t connected to an instrument, only to some bindings that I use for state switching:
When building a new setup, I usually load one of my template songs like the one above and start removing or switching out instruments (“Use different rack…”) where I need to for the specific song. E.g. I’ll replace the Alto Sax rack with an Xpand rack for some “rompler” sounds or bring in Hive for some alternative synth flavors.
Once I have all the instruments in place that I’ll need for the song, I build my song states - mostly that is changing the routing to play different instruments, and setting different levels for the racks to customize the mix of the instruments.
Hope this helps!
BTW: there is even one more layer of abstraction / virtualization in my setup between Cantabile’s input ports and my “virtualization racks”, but I’ve outlined that in a different thread - and it’s really not necessary to get into that to understand the fundamentals of my song setup, so we’ll ignore it for today…