Solved-How can I change plugins with MIDI program changes on one MIDI channel?

Tags: #<Tag:0x00007ff41bdcd6d0> #<Tag:0x00007ff41bdcd4c8> #<Tag:0x00007ff41bdccfa0> #<Tag:0x00007ff41bdccd48> #<Tag:0x00007ff41bdcc618>

I am still a relative newbie to Cantabile as I was just getting started using it as the lockdown happened. I am hoping there is a way to accomplish a task.

What I would like to do is use one MIDI channel with program changes to select and load a number of plugins.

Specifically, I want to modify my present setup that was using MIDI program changes on Channel 5 to load solo sounds on a Yamaha VL-1 for various songs, to using a number of Audio Modeling plugins instead. These plugins have pretty small memory footprints, but I don’t know if Cantabile can be set up to do such a thing. Or if there is another VST host that I could use within Cantabile to do this…send Program changes to load one of sixteen VSTs set to one MIDI channel.

Thanks for any and all insights.


Hi @Stark!

AFAIK, it is not possible to bind a program change to load a plugin. Moreover, it would be much slower than loading the plugin in advance and then enabling/disabling the plugin via program change.
What I suggest is to load all the plugins you need and then bind the program change messages either to the enabling/disabling button of the corresponding route or to the enabling/disabling button of the plugin itself. For instance, if you right-click on the green button (to the left of the plugin name) a “Create binding” option will appear. You can send a program change to C3 and bind it to toggle the plugin between running and suspended. You can do the same with the checkmark to the left of each route (the route assigns incoming midi messages to a given plugin). In this case you’ll have to give a name to the route before creating the binding (C3 will prompt you for a name).
In any case, @terrybritton has made a few great videos about this kind of things…maybe you’ll want to check them out (see Cantabile Webinar n.8 here: Cantabile Webinars - Video Replays and webinars n. 10,11,13 here Cantabile webinars 10 thru 20 video replays!).
Having said that, I am just a beginner as far as C3 is concerned…maybe some of the experts could add something else and correct me if I am wrong.


Though it likely has been a while since you posted this, as it takes days to plough through all my webinars (!), the above advice is very good and introduces you to using bindings, which I encourage you to get used to exploring and using.

Loading the plugins first as parts of a song and enabling/disabling their inputs is a great way to go. If you have Cantabile 3 Performer, you can also use States in that song to selectively enable/disable input routing to plugins AND change each plugin’s preset.

If you need more clarification, let me know! :smiley:


1 Like

Thanks so much for pointing me in the right direction! I’ll circle back when I have figured it all out and have it working.

As mentioned in the other posts: loading a plugin in live operation is not something you should do - that’s also why there is no mechanism in Cantabile to do that.

The recommended approach is to:

  • load all the plugins you will need in a song.
  • use Cantabile’s routing to direct your MIDI input to the plugin you want to play
  • use Song States to save different configurations of the routing from your MIDI input to the specific plugin you want to use (activate “state behavior” for the “target” property of the route from input to plugin)
  • if you get into CPU load issues, you can also automate the “on/off” (run & bypass) property of the plugin - I usually recommend to keep all plugins on all the time and simply work with routes, since switching plugins on and off may create glitches, but it may be that some plugins create significant CPU load even when not playing notes.
  • use bindings from incoming program changes to song states to switch between these pre-configured song states

Now you can use program changes to select which instrument you want to play with your MIDI controller.

If you have multiple song files that all use the same cluster of instruments, you may want to embed this whole mechanism in a linked rack:

  • create a new linked rack
  • load all your solo plugins into that rack
  • create different rack states with the respective routing from the Rack MIDI input to your selected plugins
  • create a binding within the rack that selects rack states based on received program changes on the Rack MIDI input

Now you can use this rack in multiple songs that may have different configs otherwise. This will make loading a song quicker, since that rack is already in memory from the previous one - and if you preload a setlist, this rack will only consume memory once.

A lot of this will only make sense once you’ve worked your way through @brad’s and @terrybritton’s tutorials, but once you get the hang of it, this would roughly be the way to go.




OK. I have found a solution. Thanks everyone.

I created a rack for all the solo instruments with all the plugins loaded and wired in parallel. I then went into the MIDI input settings for each plugin under program and set each plugin to only respond after it receives a designated program change. Works like a charm!

Thanks again! Until next time…

1 Like

Thanks for that MUCH CLEARER AND COMPLETE answer to his question! (Sometimes it takes a village to answer a question - or one Torsten!) :slight_smile:



Thanks @Torsten - you explained it better than I would have. :slight_smile:


I did end up setting up States to disable all the plugins not being used essentially soloing the desired plugin. Between the States and Bindings, I now see how powerful this software is for designing live playback environments. Way more power than I am likely to ever tap, but nice to get a better idea of where it can go.

1 Like