I use separate conversion racks inside my background rack for that. I have an abstract MIDI port called “BG rack” that handles all my sliders, knobs, faders etc. No physical device is connected to this MIDI port directly; it is fed by the conversion racks inside my background rack.
Now the first thing I did was to create “standardized” controllers that feed into my songs from the BG rack, e.g. keys master volume, guitar master volume, main level volume, solo volume, main reverb level, solo reverb level, etc. Same with “standard buttons” like next state, previous state, next song, …
Now I have one rack per physical controller inside my background rack that has the job of converting the input from whatever a controller throws at it to these “standard” controls, so if on one keyboard a button I want to use for “next state” sends a Note command, I need a binding that converts that Note command to CC 1 on channel 1 and sends it to “Loopback - BG Rack”, so that my songs see the right command coming in.
These conversion racks in my background rack then take input from a specific port that my hardware is actually connected to, e.g. “Kurzweil 88” or “Studio Keyboard” and process its data, sending it back to the BG Rack input via Loopback.
Now when I buy a new controller, I just create a new conversion rack to take its input and “standardize” it to my expected commands - now all my songs and my racks can deal with these commands (since they’ve all been programmed to expect these standard commands).
BTW: my conversion racks do even more than just controller conversion - they also handle the routing of notes, pedals, drum pads etc to other “virtual input ports”, but that’s going too far for today…
Since I connect my keyboards via classic MIDI cables, there is no way for Cantabile to know which keyboard is connected, but it takes me just a couple of seconds to open my background rack, activate the correct conversion rack and switch off the others - this way only the correct conversion rack sends commands to the BG Rack port.
All a bit convoluted, but extremely powerful - and once it’s set up, it’s actually very simple to integrate new machinery.
Since you might not want to go all the way with controller standardization, you could try a reduced version of this to simply make your Axiom keyboard imitate your Mojo:
- create a new MIDI port to connect your Axiom to, keep the MIDI port for your Mojo - now you have two separate ports for your upper keyboard: “Axiom” and “Mojo”
- create a conversion rack in your background rack that takes its input from the Axiom midi port, converts the controllers via bindings and sends them out to the “Loopback - Mojo” port
- this will make them appear to your songs as if they had been sent from the Mojo - so no need to change anything in your songs. The songs don’t use the “Axiom” port at all - it is just needed to feed the conversion rack.
In this approach, your Mojo controller setup becomes the de-facto standard; any new hardware will need its controls to be converted via its own conversion rack to your “Mojo standard”…
The Loopback feature is pretty powerful once you figure it out.
Cheers,
Torsten