Banked Program Numbers for Load Song By Program

It would be convenient (for me, at least) to be able to enter Values for a SetList –> Load Song by Program binding using the Bank.Program notation.

Banked program numbers seem to be required when assigning program numbers to songs in a set list. However, I have to manually convert the “1.12” shown in my set list into (128+12) = 140 and use that number as the Value field for my binding. Obfuscating and Error-prone.

I could use Load song with Program, but does not work well for me. It uses the Action field rather than the Value field. The Action field in the pulldown list is Banked (nice!) but only shows (and only allows me to select) songs in my current set list. I need to map an entire pad of 16 buttons to program numbers, since I’m doing this in a background rack across all set lists.

Had to add 96 bindings to cover all the song triggers I needed, and it quickly became clear it was too laborious and error-prone. However …

It was straightforward to write a script (perl, in my case) to generate the needed JSON text for the new bindings. First time editing a .cantabileRack file, but it was a snap. Had to take care to generate a uniqueID entry. Worked first time (!).

So here’s a nudge for anyone needed lots of new bindings … if you’re handy with some scripting language (anyone remember SNOBOL? Lisp? AWK? … OK, more likely PHP or Python or Perl or Python or C or Java) or even swift with a text editor (EMACS? TECO macros?) … take the plunge (with appropriate backups) and you may save significant time …

1 Like

Hi Clint,
Would you mind sharing the script (or a sample code snippet)?
Thank you,

  • David
1 Like

Well, it’s not really in any shape to be shared … I just hacked it together and it likely refers to a bunch of the libraries I have on my machine - not really worth packaging for distribution. (and also I use a back-revved version of Perl).

So basically, look inside the .JSON file (AFTER backing it up). Look at the 50-line block (on my system, at least it was exactly 50 lines) that represented a binding. After copying the block, there were three lines that needed alteration - you can see which ones by comparing two 50-line blocks. One of the lines is a sequence number that has to be unique (across what realm, I’m not sure, but I made it definitely unique across the whole file). The other two lines are the obvious parameters to the binding.

I just templated that block and pasted it repeatedly, with variables in the three places to replace the needed parameters and the unique ID.

You can even do this in a text editor if you are careful.

Hope that helps!