Cantabile Song Change via NRPN


My Main Key Arranger is a Korg PA4x with an internal Songbook.
This is very useful for me and my intention is to switch my Songs in Cantabile
with the Midi command from the Pa4x.

The problem ist that the Korg Key sends on a control Channel the following Commands
(This is the signal that the SongbookNr. is following)
Now Controller 6 and 38 as SongbookNr.

6=10 38=2 it means Song 1002
6=00 38=45 it means Song 45
6=2 38=3 it means Song 203

is there any way to work with this commands to call the same song in Cantabile?


Hi Juergen,

There are bindings for this that can call up songs using MIDI Banked program messages. If I understand correctly your keyboard is sending a NRPN Fine resolution message using the cc99(MSB) and cc98(LSB) that has a parameter value of cc6(MSB) and 38(LSB) and the value of the MSB and LSB.This is what Cantabile should see on the MIDI port when you send the 98,99 message. In Cantabile the songs are ordered and numbered in banks of 0 to127 so I don’t know how that relates to the song numbering in Songbook. Could you elaborate on the numbering scheme in Songbook? Is it 0 to 100? For instance your 6=2 and 38=3 equates to a midi value of 259 not 203 so a little more info is required to help but you can do what you want to do you just need to know how to remap your song numbers in Cantabile to match up with your songs in Songbook. You can try experimenting with a binding like this example

It will map your cc 6 and 38 values to banked MIDI program change messages you can use to pick songs in Cantabile. You could then number your songs in your set lists to match these numbers. Let us know more if you can.



Thanks Dave but this is not the point

here some Pictures for better understanding my ‘Projekt’ :grinning:

Why i would do this ? …because I have this 12 Knobs directly in Front of my Fingers and it is the best Workflow (for me) to use the Knobs…

So i can chose a List directly on my Keyboard…

And here is the way the PA-Arrangers work…

Songbook-Nr. in Pa-Series Arranger are available from 1 to 9999
and so Korg is splitting the Number in two Parts

maybe there is a plugin ore something else to handle this problem…
or Brad has an Idea witch way solves this problem.

maybe brad can implement a function that do the same thing than the other Lyric-Software

…maybe i can put the Numbers with a filter to MSB/LSB and sort the Cantabile Songnumbers also? 9999 is then MSB/LSB/Prog = 000.099.099

…but this looks not so nice


Hi Juergen,

Thanks for posting that great explanation, I think I had a clue but now it is very clear, I will think on it some but like you, so far I am thinking of a filter of some sort. Sorry I have no immediate solution.




Thank’s for your help Dave but I think this is a Job for the big Masterchief of Cantabile …the god of Midimapping himself :wink:

…for Mr. Brad the Incredible Robinson :+1:t2::+1:t2:

The Input Routing/Filter to CC6/CC38 works perfekt only the figure looks curious.
9999 = 0.99.99
2505 = 0.25.5 << here with Zero it would look better !

i hope you know what I mean…

For those who think this workaround makes no sense here is the primary reason to work tis way >>> perfektly Timing to the Arrangers Midiclock-Events switch is everytime exactly on beat 1

Maybe Brad can add a new Item for this case to Options/General/Formatting/ProgramBanks


I guess Bidule could do this midi dispatching.
I’ll check It later…

kind regards, Alexander


Hi Alexander …thanks but it works good with the cantabile Input Filter
it is only a Problem to display the Numbers in a nice Format…


Hi @Juergen,

Just to clarify… you’re saying the MIDI mapping is working correctly now it’s just that the number format used by Cantabile isn’t to your liking?

I suppose I could add an option for zero padded program numbers, but then it’d look like this:

000.099.099 or 000.025.005

because program/bank numbers can have three digits. Or, do you want “00.25.05”?



Hi @Brad,

This is the system of Korg PA Arranger Songbook…
with a Filter I am routing:
DataEnt MSB to LSB
DataEnt LSB to ProgramChange

in this case the best Solution would be the last 00.00.00
So the digits would be all at the right place.
MSB Numbering is not requiried so the best optical Solution would be
LSB.Prog = 00.00
Because smallest Number is 0000 and highes number 9999
The Ultimate-Perfect-Optical-Format would be to Supress the Point between the Four Numbers (…If this is not to complicated)
LSB(NoPoint)Prog = 1234 << Perfect😄

kind regards, Jürgen


Sounds like the best bet here might be a place where you can type in a format string so you can configure anything you like. Seems very niche though… let me think about it.



Thanks @Brad,

that would be great…

But one problem is conceivable…
Example : what happens when the Last Number is 3399 and I will add a new Song to the List? …then Cantabile automaticaly would Go to Programchange 100 and Shows only the Last two digits…
that makes the Problem somewhat more difficult.

Hopefull Jürgen


Yes, that’d be a problem which is why its best to have separators between each component.


But ‘meanwhile in space’ i had thought it is not necessary to complicate it…

Numbers with 2 digits would be enough 00.00.00 because there is only 1 Mastersetlist that must have same Numbers than the Korg Songbook

…so it is necessary to Type the Numbers per Hand ,and not automaticaly


Question about Msb.Lsb.Prog numbering:

Would it be a solution to integrate the option of
formatting the digits with zero’s?

001 instead of 1
066 instead of 66

it would be better for my eyes :grin:


Logged it.