States and bindings

I am new to Cantabile, so this is probably a question that has been answered before, but I am still stuck in this problem. I have a song with 3 different racks, which are basically different synths. I want to play 1 rack at a time and have defined states that I want to control via different buttons in a midi button pad. So, for example pressing button 1 results in selection of a state that runs rack1, etc. I have tried that but all racks still play at the same time when I play the keyboard. I can’t find that how to do that in the youtube videos on bindings and states. Is there an easy way to do that?

Thanks, Wim

Hi @firefly and welcome to the forum!

Since you are mentioning states, I assume you have the Performer version of Cantabile. In Cantabile, there is often more than one way to obtain the same behaviour. In your case, this is what I would do (I will call your racks: Rack1, Rack2, Rack3)

  1. in “Input Ports” create three routes connecting your controller (for instance “Main Keyboard”) to Rack1, Rack2, Rack3 respectively

  2. use the enable/disable button of the routes and set them such that one the route going to Rack1 is active (disable the others).

  3. in the left toolbar, select the “State” tab and then “New State”. Call the state “Rack1”

  4. now disable the route going to Rack1 and enable the route going to Rack2

  5. create a new state and call it “Rack2”

  6. disable the route for Rack2, enable the route for Rack3, create a new state called…“Rack3”

Now test the states you have created. When you click the circle to the left of the State name, the State is selected. Selecting state Rack1, only Rack1 should receive MIDI data and play. The same should happen for Rack2 when you select the Rack2 state, etc.

Now that you have created the states, you must set the bindings to recall them via MIDI button pad, but first let me know how the first part goes.

BTW, at the beginning I used to corrupt my states because on any change the state was automatically updated, even when I did not intend to update it. Now I systematically lock all of my states, so that I have to update them explicitly (Ctrl+U). Sometimes I forget to do it and I loose my changes, but usually I find this way of working with states more predictable.

Hope this helps,
Gabriel

5 Likes

Thank you, It’s working now. I used the wrong target object and point in te bindings.

Wim

1 Like

I’ve done this in Song States.
Very fast switching, which is what we need when changing sounds on the fly

Set the main routing page view to graphic/diagram view.
You will have the connections from your mother keyboard connecting to each of your racks

Go to the (song) states tab then disable the connections to racks 2 &3 and add a new state with an appropriate name. For simplicity here saved as Rack 1.

Disable the connection to Rack 1, enable rack 2, add State as rack 2.

Disable the connection to Rack 2, enable rack 3. Add State as rack 3.

You should now have 3 song states:
rack 1
rack 2
rack 3

Clicking on these states will fast switch your mother keyboards connections to the relevant rack.

To bind these to a button on your kit, you need to know what the button is sending out.
My mother keyboards’ buttons can be programmed to send a range of commands and I set them to send different midi program change controls on channel 1
Button 1 pgm 1
Button 2 pgm 2
Button 3 pgm 3.

Alternately you can simply monitor what your devices’ buttons sent out by enabling the midi monitor on the connection from your device to the racks and see what it tells you.

Mine defaults to midi cc or Continuous controllers
I used these in another song and they work just as well but be wary of modifying these in you mother keyboard as lots of midi cc values are reserved for things like volume, modulation wheel etc and you could reassign a value that will stop a function such as mod wheel from working.
There are lots of free unassigned cc’s to use but your mother keyboard may have assiged these to control the stock instruments it was shipped with, so it’s best to avoid using midi cc or at the very least, avoid reassigning midi cc’s in your mother keyboard until you know what it’s presets are doing.

Once you can recognise each of your mother keyboards buttons unique output, you can create a binding to link your button to your states.

To do this, left click on the state you want to bind a bitton to;
About 3/4 way down, there’s a Create Binding option, select this and a dialogue comes up.

Source event waiting… press the button on your mother keyboard that you wish to bind to your state. For this example, button 1 sending midi program change1.

The panel on the left of this dialogue will populate.

Select the incoming info from your keyboard. There will be a few things come but in this example we’re looking for that program change on ch 1.
Double click that in the list and and another dialogue comes up…

Your source info is already populated, you just need to select the target info to the right…

Object: Song
Point: Load State with Index
If you look at your list of song states we created on the far left: Aside from the names we gave them, they’re also numbered. That’s the index number you use to bind that state to this button.

Repeat the above for the remaining states, using the different state index values to bind them to your chosen button and you’re all done.

… A thing to watch when creating bindings within the same song: If you have already mapped an incoming command from your source device, e.g. pgm change 1 on ch1, Cantabile won’t allow you to map that to your new target. i.e. the Load State with index does not give you the option to seiect State index number, the option is just not there. Took me a while to understand why that option was missing.

Just seen this. Great minds :smiling_face:

1 Like