Program Change, MSB Bank and LSB Bank

Terry, the way I would do it in Cantabile would be for your controller keyboard to send bank/program changes to Cantabile to switch Cantabile song states (for different parts of songs), and these song states will store and recall the selected VSTi patches for you, to get the various sounds you require.

The other cool thing you can do with Cantabile 3 is to make a “rack” containing your VSTi, and store all the sounds you care about as separate rack states. Then, whenever you want to use that VSTi, just use the rack and select the sound you want from the drop-down (which will only list the sounds you ever care about actually using). These rack states can also be selected either remotely via MIDI from your controller keyboard, or recalled as song states. The great thing about this is that the complexity of the VSTi, and whatever random patch layout it has, can be hidden away in the rack.

However if you did want direct access to changing patches via program changes from the controller, you’ll be relying on whatever support the VSTi has for bank/program changes.

1 Like

That is an awesome approach! I’ll be fiddling with that and implementing it as a solution for sure. Totally cool that Cantabile has that ability! I clearly was thinking too “old school” to grasp that concept without some clarification! :smile:

Thanks, Neil!



Just to clarify, Dave’s explanation and screen shots above are for Cantabile 3.

I think you’re using the Cantabile 2 trial in which case everything is conceptually the same, just the screen shots won’t match exactly.

Regarding VSTi support for program and bank changes - it’s completely depends on the plugin in question.



I have for my Yamaha Montage banks a bank calculator.
The result is given as e.g.

MSB 063
PC 54

How I have to input that in the value field under bindings “program change bank”?

try 63.2.54 - depending on your formatting options, it may be displayed differently (8066.54) after you enter it:




@Torsten thanks!
I tried so far all combinations in the “Formatting” settings.
I get via bindings program changes, but always the wrong performances are loaded/opened in the Yamaha Montage.
Also, if I press in the bindings sections on the “triangle”/play button always other wrong performances loaded/opened in the Montage. The opened performances are various instead fixed.
The John Melas tools show the banks as e.g. 064/003:105.
In Performer I tried e.g. 064; 003; 105.
My settings actual in Performer under “Formatting”
Program Numbers: Zero Based
Program Banks: Zero Padded >>> here I tried so far all other settings…same result

My Bindings are made =
Source = Rack State
On Load
Event 0ms
Target = Output Port - Montage Out 1
Ch: 1
Program Change Banked >>> tried also Program Change
Value: e.g. 062; 005; 080

What is wrong in my settings?

Hi @Bladerunner

Try this:

  1. Go to Options -> Diagnostics and turn on Console Logger and Log MIDI Out Events. That’ll let you see exactly what Cantabile is sending.
  2. Setup a simple binding like what you’ve described.
  3. Press the “Play” button on the binding to send it.

Post back a screen shot of the binding and what the console logger shows and I’ll see if I can spot the problem.


The formatting is not the problem - it only affects how Cantabile displays the values after you have entered them. The issue is in how you entered the values: Do NOT use semicolons to separate msb, lsb and pc. You MUST use periods!

When you use semicolons, Cantabile will rotate through the three values as program changes, i.e. it will send the first value as PC on the first trigger, the second value the next time, then the third one, and then start over with the first.



1 Like

What are periods?
How is it look like?

A “period” aka full-stop is the character “.” (dot)

As I originally wrote, use the notation 63.2.54 - don’t use 63; 2; 54


Well spotted @Torsten.

A few people have been caught out by this now so I’ve updated the dialog to make it clearer:


1 Like

Good idea, @brad!

Just make sure that the dialog will respect the localization settings (decimal comma vs. decimal point; semicolon vs. comma) - I believe the current one does, right?



For these values, it’s hard coded to , for value separator and . for bank separator.

Thanks! Get it worked (@Torsten) :slight_smile:

I also get input from Brad to my topic.
After try and error: the settings for Yamaha Montage works are as following:

Under settings “Formatting”
Program Numbers = One Based
Program Banks = Bank and Program Combined
RPN Numbers = Zero Padded

Input in under bindings:
Action = Program Change Banked

Value >>> this was first confusing me, CAUSE
The input values for a Yamaha Montage Performance e.g. 063.001.110 (value input field),
causes directly after input and enter a different shown number in Performer!
It results in e.g. 1048580 shown in the value field.

BUT…main thing: it works in order to save/store and recall on that way the defined performances of the Montage :slight_smile:

This is because you have set your Formatting preferences to “Program Banks = Bank and Program Combined”. If you set it to "Program Banks = “MSB, LSB separate”, it will display as 63.1.110.

BTW: you don’t need to use leading zeroes when entering the values: 063.001.110 isn’t needed - Cantabile will understand 63.1.110 just as well, independent of formatting settings.



I don’t think so - look here:

Value separator is “;” on my system.

And this makes sense for floating point values; on a German system, commas are used for decimals:


So Cantabile is smarter than its creator thinks :rofl:



Wouldn’t be hard nor the first time. :slight_smile:

1 Like

Hello together, I hope your all fine in this strange times.

Sorry, that I come back with this very old topic.
Reasons: I switched very late to the current version of CP with the graphical routings after I had to build up my pc system completely new. I made a big mistake in backup the old PC by not saving the old settings of my last Cantabile version; I saved only the racks and songs :frowning: .
So I start now on some topics from the scratch with Cantabile. The good thing is: the most songs/racks, where only VSTi were included, needed only some new routings to use them further.

Where I struggle are the program changes for my Yamaha Montage. All songs/racks I made in the past don’t work. E.g. all in the past saved banked program numbers within bindings per rack state are empty now then loading in the “new” Cantabile version. I’m not sure, but I guess, that the routing concept of CP changed.

I tried so far many things/routings in build up new songs/racks in order to send program changes from CP to the Montage and I’m not successful. I tried already the changes in MSB/LSB settings, which were named here in the past and tried several combinations.
The first thing, what I recognized: in the bindings settings “target” I don’t find my Montage. I find only “Output Port - Rack: Midi Out”. In the CP settings for “Midi Ports” I have already all Montage Midi In and Out combinations (as in the past).

It would be great, If you/somebody could tell me, how to setup a rack/song with program changes for several performances sending to my Montage.

There are several threads referring to Montage. I found this one, and hopefully it will help you. Just type “montage” in the search engine, and many threads will be at your disposal.

I don’t have Montage, but hope this might help you.

1 Like

Hi @Corky,

thanks a lot for this solution. This is a complete different workflow.
Meanwhile I found a Arcronis fullback up file, where I could reload the Cantabile settings files.
I copied them into the new Windows 10 20H2 installation (different folder structures as before!) and it works :slight_smile:
I can change again the performances within my Montage via CP by the here discussed workflow very easy.