Switching Instruments in a Multi-Rack Device in Kontakt, Ableton Live
Historically I always wanted to use more than just a couple of synth sounds in my live looping setup in Ableton Live, but there were never many graceful options. The biggest problem was being able to switch between many synths on a single track, with an external controller. Instrument racks will allow you to do it with some trickery, but it was never particularly reliable for more than two sounds.
I decided to give Kontakt a whirl since I had it on hand anyways, and knew it already supported multi-racks, it was just a question of figuring out how to control the switch in between the tracks.
Enter problem number one: Kontakt uses Program Change MIDI messages to switch between multi-rack instruments. This wouldn't be much of an issue, except it seems you can only send Program Change messages in Live via clips. This wouldn't work for my aim of using a controller to switch the instruments (in my case a Korg Nanokontrol), so I had to look in another direction.
and then, there's always problem number two: when using Ableton with a number of external MIDI controllers, you of course want to limit the inputs on MIDI tracks to only certain devices, lest you get random notes/messages playing on tracks you don't want.
You could get around this by using different MIDI channels for each device, and then specifically make each track only listen on that particular channel. Since I had to have this single MIDI track listening to both my keyboard controller and nanoKontrol, I could have likely just put them both on the same channel and listened there. In most situations this would actually work pretty well as a solution, except for those Program Change messages. The padKontrol does not send Program Change messages.
So, enter Bome's Midi Translator. It allows you to take MIDI messages and convert them to other message(s), a keystroke, etc. I use it pretty heavily on my live set for a number of reasons, many of which involve MIDI-controller-ifying keystrokes I use quite a bit in my live performances. In this case it's perfect for taking those CC messages, swallowing them, and instead sending them to Ableton as Program Changes for Kontakt.
Now I could just put it on the same channel as my keyboard and call it a day, but since I've got so many things going on in my set, I like to keep the guesswork out and always use explicit MIDI input assignments. I also use the padKontrol for a lot of other things, so I didn't necessarily want the whole controller on a specific MIDI channel. So here's what I did: capture only the CC messages for the buttons I wanted to make into Program Changes, convert them to the Program Changes, and send them to a virtual Bome's output (#3 in this case). Then I took my keyboard controller, had Bome's swallow all of the note messages coming from that, and then have them routed to Bome's virtual output #3 as well.
So now I've got my keyboard controller and the ten buttons on my padKontrol all routed to this same output, that shows up as "Bome's Midi Translator 3" in Ableton. Once I select this as the MIDI from on Ableton, all of a sudden I've got my multi-track Program Change controller working, right alongside my keyboard controller. No latency.
There are tons of other cool things you can do with the program that I will go into at a later date, but thought I'd share this for now since it's something that drove me crazy till I figured out a way around it.
Bome's Midi Translator is $99. MIDI Yoke may be able to do some of these things as well, but I haven't tried it in this context, since I already had Bome's on hand for other reasons. You might want to try it first before plunging into the $99 option.