Sharing my latest little project here - maybe interesting to some to inspire some Cantabile configuration madness and maybe also an inspiration for future development of Cantabile?
The Problem:
I am super-happy with Cantabile’s capabilities when it comes to creating song-specific configurations of multiple input and output sources - there’s really nothing you can’t create when you really put your mind to it. Any splitting, layering, routing configuration to play all kinds of tone generators through oodles of effects is possible - BUT: that all takes a bit of careful thinking and preparation.
What I was missing was a way to QUICKLY select and combine a couple of sounds in a rehearsal situation (or spontaneous jam session): “I’ll need a Rhodes on my main keys, plus a split of bass and hammond on my upper keys”. Typically, I get through rehearsals with my set of “Piano + X”, “Rhodes + X”, “Wurlie + X” etc. standard songs, with song states defining the “X” for the upper keyboards. But that’s rather limited - and I don’t want to start creating new Cantabile songs on the fly in a rehearsal situatiion. So I was looking at different scenarios how to be more flexible and have more sounds and configurations on call QUICKLY.
The Concept
First thing was to decide HOW flexible I need to be, based on my typical way of playing. Being a pianist first and multi-keyboardist second, my typical setup is having a piano-type (Grand, Wurly, Rhodes, …) sound all across my (weighted) lower keyboard, possibly layered with a string or organ layer. I don’t typically use my lower keyboard in multiple zones, unless that is required by a specific song (but for these, I would build dedicated Cantabile songs anyhow).
My upper keyboard is mostly for lead sounds - mainly Hammond-type or my favorite fake sax (SWAM), but also analog synth type sounds. Typically, that sound is across the whole upper keyboard, but I may also split the upper to do left-hand comping while soloing with my right.
Beyond this, I want the ability to select from a broad range of workstation-type synth presets, both for the lower and for the upper keyboard, in order to fill all kinds of sonic requirements.
To have all of this available quickly and accessibly on a touch screen, I designed and programmed an overlay for Cantabile that allows me to make these kinds of selections very quickly and flexibly without having to design new Cantabile songs.
The Overlay
This is what this overlay looks like:
- each of my keyboards (upper and lower) can be assigned to some pre-defined instrument slots (targetting a separate instrument rack in Cantabile), each of which has presets that can be selected by tapping the currently selected preset (e.g. “TE Live Piano”):
So when I select Piano 1 for my main keyboard, I control a rack using Addictive Keys, Piano 2 uses a Pianoteq rack, Wurly has UVI Workstation using VTines etc).
The lower keyboard can also act as the lower organ keyboard for an Organ Rack using IK Multimedia’s Hammond, so I can play a 2 manual organ between upper and lower keyboard
The upper keyboard has fewer slots - mainly the Hammond rack (IK), the SWAM Sax, an analog Synth rack using Surge XT, and a workstation synth (Triton Extreme) for all other bread-and-butter sounds
I chose Triton Extreme as my bread-and-butter workstation sound generator, and I use three instances of the same rack in this Cantabile song.
The upper keyboard can easily be re-configured to split and layer configuration, and the split config allows to quickly pick a split point from a couple of useful pre-configured settings:
Now there is a new slot for upper left that has fewer options, but enough for me:
- it can play the destination of the lower keyboard - makes it easier to have both hands on the upper keyboard, left hand comping with my main piano sound, while the right does lead stuff
- it can act as the lower manual of a Hammond organ, so I can play two-manual parts on the upper keyboard alone
- for anything else, there is the workstation synth - the third Triton Extreme instance
Every instrument slot has its own octave switch so I can quickly tap in the right octave (or reset it by tapping the middle). Then there is the overall transpose button on the bottom that controls Cantabile’s Transpose setting and lights up red when transposition is active:
To help picking sound quickly, there are sound categories that help navigating, which is especially useful with the huge amount of workstation sounds, and favorites (which get listed first):
A complete configuration of this can be saved/loaded as a preset (the green box at the bottom) and stored / recalled using the six quick-access “radio buttons”.
With this, I have a complete “super-workstation” on my screen that allows me to create configurations on-the-fly using a touch screen - faster than I could even on a hardware workstation or arranger keyboard.
Connecting this with Cantabile
All this overlay does is create program change commands that get sent to Cantabile via a virtual MIDI port. All the real magic happens in Cantabile: changing the routing of the MIDI events coming from the physical keyboards to instrument racks, routing layers and splits and controlling the octaves. No live MIDI events are routed through the overlay, so no delay or latency - everything is in Cantabile and would keep working even if the overlay crashed.
Program changes are used to (a) load presets in the individual slots and (b) select instrument slots for the individual keyboard zones. Since there are only 16 MIDI channels, I had to resort to control changes for octaves, transpose and split point, but the mechanism is the same.
Implementing in Cantabile
The corresponding Cantabile song is quite a beast: it hosts all the instrument racks and effects and has a host of routing racks to ensure that MIDI notes get sent to the correct instrument rack depending on the overlay configuration:
Plus, there is a number of Binding groups that take care of preset loading, managing the active racks per slot, mode switching, transposing etc.
There is even a set of Bindings that automatically launches the overlay (or un-minimizes it) when loading this song and minimizes it when leaving, using an AutoIt Script:
Performance and Usability
Given the complexity of this beast and the number of concurrent plugins, I expected this to stretch the limits of CPU performance, but once I created the bindings to only activate the currently selected racks and turn the rest off, performance on my live cubes has been pretty decent with no hiccups so far.
So far, this has been working flawlessly, and it is so much fun to be able to quickly knock together a sound configuration for exploring a song. I have built the interface using big finger-friendly blocks and sizes, and this makes it very pleasant to work with on my 10’’ touch screen. I even built my own on-screen keyboard for entering preset names …
Of course, once a song has been explored in rehearsal, I’ll still build a custom Cantabile song - no need to have dozens of instruments loaded pulling on the CPU, and I’ll want to customize the assignment and custom song states beyond what is possible in this “universal” config. This is mainly a “rehearsal / jamming” tool, not intended for live performance of rehearsed songs.
What do you think?
Cheers,
Torsten