Select different racks for different configurations?


I have a couple Cantabile configurations for different rigs (different keyboards). What i tried to do was to create two versions of racks for a particular sound that could be called up depending on the configuration loaded. What i hoped to do was have two versions of each rack, in two folders on my hard drive. For example, i might have a rack named “Electric Piano” which sends program change 43 for one keyboard, but a bunch of SysEx for another keyboard. My hope was that i could set the File Locations / Rack Files option to point to the folder containing the rack files for that configuration. But it looks like the File Locations option only sets the default folder for saving a rack — the actual rack file location is embedded in the CantabileSong file for each song.

So is there an easy way to accomplish what i am trying to do? I suppose i could do something like create multiple rack states for every sound and then do some binding in each song to select the state according to which configuration i’m running. But i’m hopeful there’s a simple solution to what would seem to be a not uncommon situation.


  • Jimbo


Good question. I hope there is a better solution than having to maintain two separate versions of each song.

Following with interest.



Hmm, sounds like a tough one. My idea would be to stay with one version of your song files and racks, and simply send MIDI data for both keyboards, but to different virtual MIDI ports:

Use two virtual MIDI ports “keyboard 1” and “keyboard 2” and simply have your songs send both MIDI commands (program change 43 to keyboard 1 and SysEx to keyboard 2. Then use two different Cantabile configurations:

  • Configuration 1: MIDI port keyboard 1 mapped to your MIDI interface; MIDI port keyboard 2 mapped to nothing
  • Configuration 2: MIDI port keyboard 1 mapped to nothing, MIDI port keyboard 2 mapped to your interface

Your songs will always send both MIDI messages, but only one set of messages will go out through your interface, the other will simply be ignored.



(sorry, first version of the post was a bit confusing; renamed the MIDI ports to make things clearer…)


BTW: the other option is of course to go completely “in-the-box” and use VST instruments exclusively. Then both keyboards become simple “dumb” controllers, easily exchangeable, and all intelligence sits within your laptop.




I haven’t totally understand what you are trying to do. But maybe you can work with loopback ports in combination with different background-racks. You could create one background-rack for each configuration and load the one that is needed at a time.


At last, a use for loopback ports I can actually sink my teeth into!



Thanks to all the replies so far. Seems like the suggestions so far would mean each song loads both versions of the rack (for example, Keyboard1_Electric_Piano and Keyboard2_Electric_Piano). Each rack would output MIDI to a virtual MIDI port, either Keyboard1_MIDI or Keyboard2_MIDI. Then i could use either MIDI port configurations or loopback port bindings in the Background rack to route whichever port to the actual MIDI output.

Alternatively, i was thinking of using a batch file to copy the contents of either the Keyboard1_racks or Keyboard2_racks folder to the Cantabile/Racks folder (or just rename the appropriate folder). Or a batch file to map the desired rack folder to a drive R:, and have all the songs reference the rack on the R: drive.

Still hoping for a simpler solution. I guess i was assuming i could do something like what i’m used to as an embedded software developer, where a building the code for a different target uses a configuration which selects the appropriate folders for header files, library files, etc. But i see Cantabile doesn’t work that way.

I also had the idea that i might be able to do something with variables, but haven’t figured out how to make that work. Maybe @Brad has some ideas ?


For many kinds of crazy shit that cantabile didn’n support you can also use autohotkey.
This is the easyest way to built your own -----.exe files and start it with Cantabile bindings.

All my important exe’s are in the Cantabile folder… so its easy to work with… maybe this helps to config different situations outside of cantabile.


OK, i’ve found the answer in the Windows command line mklink command.

So all my racks for keyboard 1 are in a kbd1_racks directory, and the racks for keyboard 2 are in the kbd2_racks directory. And all song files reference racks in a directory named kbd_racks.

Then i have a batch file called use_kbd1.bat which aliases kbd1_racks to the name kbd_racks:

if exist kbd_racks rmdir kbd_racks
mklink /j kbd_racks kbd1_racks

And another batch file use_kbd2.bat:

if exist kbd_racks rmdir kbd_racks
mklink /j kbd_racks kbd2_racks

So i just run whichever batch file before opening Cantabile, and Cantabile finds the appropriate rack files for whichever keyboard i’m using.

– Jimbo