Hard to say, as I should know more details. Unfortunately I’m finishing this setup for an upcoming performance, so I won’t have time to help you until the end of next week. I can only explain how my system works. In any case, when you create a binding in Cantabile you will see what Cantabile is actually receiving. I suspect you are either sending the same Program Change value, or you haven’t chosen the right state binding option in Cantabile.
I have a ‘menu’ object in Lemur that sends program change values from 1 to 4 to Cantabile (see first picture in the upper-left corner). In Lemur I also added a little script that switches the tabs according to the selected menu item.
On the Cantabile side I simply created 4 bindings that load a specific song state when the program change value is received (see second picture). However, in Cantabile (if I’m not wrong) you can assign the Load State binding to any incoming MIDI message, not only program changes.