New Bindings System Available Now (build 4100)

It’s finally here!

I’ve just put up Cantabile build 4100 which includes the new bindings implementation. I started work on this almost a year ago thinking it would take a couple of weeks - turns out it was a much bigger job than anticipated (and there were some distractions along the way). In any case a first experimental build is now available!

So what’s changed?

New UI

The biggest difference you’ll notice is the UI has changed. Rather than bindings being edited in a single slot, with various popups for settings, everything is now nicely contained to a single popup window and there’s a big text area where you can enter notes and comments.

Back in the main window bindings table, the number of columns has been significantly reduced and some of the less frequently used settings have been removed:

The schedule and retrigger settings have moved to a single dialog accessed from the “Timing” button:

Once nice side effect of having binding settings in a separate window is you can switch away from the bindings tab to control other parts of Cantabile while having the selected binding visible/editable at the same time.

Conceptual Changes

The biggest conceptual change is the idea that a binding is comprised of three distinct objects, each with their own set of properties: the source, the target and a mapper. Previously these concepts existed but each object couldn’t maintain an arbitrary set of settings.

Practically this means that some previous bindings had to be separate (eg: Load bindings with Instant vs Delayed versions) but can now be combined to a single binding point with settings:

Other changes:

  • Rather than separate binding points for each MIDI port, there’s now a general “MIDI Ports” binding object under which you choose the port.
  • MIDI Ports on Plugins, Racks and Media Players are now binding points on those objects, rather than separate bindable objects.
  • All the PC Keyboard binding points (both listening for key events and sending key events) have now been combined into a single “PC Keyboard” bindable object.
  • Various other tweaks and consistency fixes to binding point names.

(TL;DR: everything from before is still there, but it might have moved and/or changed name)

Functionality Changes

The functionality of the new bindings is basically on-par with the old system. There’s a couple of new binding points - but they’re mostly for testing. (eg: write log target and the manual invoke source, improved functionality on the “Test” button etc…)

Internal Changes

Internally, the binding framework has been completely rewritten. Currently the functionality is on-par with the previous version, but the ground work is there for improvements to bindings in the future.

For example, previously (and currently) only MIDI to MIDI bindings ran on the audio thread, but the framework now supports any binding point running on the audio thread. This opens the possibility for real-time bindings to audio mixer settings and plugin parameters.


When you load a song or rack file from an older build, Cantabile will automatically upgrade and convert all existing bindings to the new system. Your old song and rack files should continue to work in the new build as before.

IMPORTANT: Any song or rack files saved by this build, either by explicitly saving or automatic saving of racks will not load in previous builds. Before using this build, please back up your current song and rack files.

If you need to go back to an earlier build, you’ll need your old song and rack files.

(Actually, Cantabile will automatically save a backup copy of any song/rack before it overwrites it with a .pre4100 extension appended… but don’t rely on this and it’s better to be safe than sorry).


This update is available now to anyone with a update current subscription. It’s being released as build 4100 to reflect such a big update and to leave room for updates to earlier builds if necessary.

Get it here:

Note: it’s not currently in the release notes feed as I want to limit availability to this community for the moment.

Very Experimental

This build should be considered very experimental and definitely don’t use it live.

Build 4100

  • Initial release of new bindings

Build 4101

  • Fix an object reference exception loading background rack

Build 4102

  • Fixed - crash/hang/stack overflow on some binding mapping modes
  • Fixed - rackHost.gain binding point not upgrading correrctly
  • Improved binding logging (quotes to delimit binding point names, include rack name, include binding unique id)
  • Show binding unique logging id in Binding Editor.

Build 4103

  • Fixed - crash when deleting routes

Build 4104

  • Fixed - mapper properties not upgraded when converting binding points to rack host.

Build 4105

  • Improved - better handling of multiple mappers - explicit automatic mode, smarter selection of which mapper to use
  • Improved - better formatting of mapper settings in table view
  • Improved - improved switch/condition to command modes, including always, on true/false edge, if true/false, while true/false repeat.
  • Fixed - MIDI source binding point crash on second manual invoke
  • Fixed - various upgrades of old bindings
  • Note - recommend re-upgrading song files from pre-4100 to incorporate fixes to binding upgrades.

Build 4106

  • Fixed - unable to choose “mapped” for program number in MIDI target binding point for program change events.

Build 4107

  • Fixes to default ranges to use “(max)” instead of “+30dB”
  • Bindable Object and Binding Point drop down pickers are now sorted
  • Fixed missing spaces in “OutputGain” and “InputGain”
  • Fixed bindings with exported state not updated and/or causing crash
  • Improvements to load error handling (sometimes causing app to be left in an unresponsive state)

Build 4108

  • Removed some excessive debug logging

Build 4109

  • Fixed control curves
  • Fixed options dialog initial size
  • Fixed Song On Load binding not firing

Build 4110

  • Fixed a couple of rack binding points not upgrading correctly

Build 4111

  • Fixed plugin.suspend binding point not upgrading
  • Fixed bindings shown as missing when containing rack is unloaded
  • Fixed jump prevention incorrect set on some upgraded bindings
  • A number of improvements to audio engine event dispatching and route manager integration.

Build 4112

  • Fixed MIDI port names not correctly reversed (in <-> out) for bidi bindings
  • Fixed empty binding point selector for some rack instances

Build 4113

  • Fixed crash unloading plugins
  • Fixed some rack MIDI source/target bindings not upgraded correctly

Build 4114

  • Fixed an issue with some delayed bindings hanging

Build 4115

  • Fixed crash closing Banked Program Change selector dialog
  • Added Unload patch file button to Banked Program Change selector dialog
  • Show banked program names from patch file in binding list
  • Fixed internal assertion error when firing on load bindings

Build 4116

  • Fixed - incorrectly allowing selecting wildcard CC number in MIDI source binding point
  • Fixed - blank program numbers not working in set list and state list
  • Fixed - Upgraded MMC bindings not using wildcard device number
  • Fixed - toggle and relative bindings for MIDI CC targets now working.
  • Reverted - put binding schedule/delay button and indicator back in main binding table list

Build 4117

  • Fixed stack overflow cancelling pending actions when engine stopped
  • Better error message when renaming a set list song with invalid characters
  • Fix metronome bindable crash when scale value out of range
  • Fixed various language translation issues
  • Removed exception when translated variable not found
  • Fixed crash when using Learn Binding when learn dialog already shown
  • Fixed blank song name in “Create Binding In” drop down
  • Fix for enumerating modified collection

Build 4118

  • Fixed delayed block state unload bindings not triggering
  • Fixed right click on Enable route button crashing
  • Fixed missing language translation strings

Build 4119

  • Fixed - performance hit when playing media file and timeline open
  • Fixed - main menu bar not rendered correctly when OpenGL enabled

Build 4120

  • Fixed crash when selecting “Adjust Transpose” binding point
  • Fixed Learn button not updating all source binding point fields

Build 4121

  • Fixed bindings not enabling/disabling correctly when parent group enabled/disabled by states
  • Fixed network API endpoint for invoking UI command not working

Build 4122

  • Fixed missing channel 16 in channel selector field

Feedback, Bugs and Suggestions

As always, I’m keen for any feedback on your experience including suggestions and bugs. Please let me know of anything that doesn’t work as before - either because the binding didn’t upgrade correctly or simply if the binding is working differently to before.

I’ve done extensive testing including testing every single one of the hundreds of source and target binding points as well as all the mapping modes, but something is sure to have slipped through the cracks - so let me know.



Looks very good indeed! Will do some first testing on a copy of my live rig - will let you know when I come across any funky business…

1 Like

When I was doing my energy software business, I had a similar instance with a major piece of the development work, so I can totally relate. And I can also offer you a hardy congratulations for pushing through!

1 Like

Looks fantastic, Brad. Great work.

But as I have my first gig in six years in two weeks time, I think I will wait until after that until giving it a spin :slight_smile:

I am still in a sweat as to whether or not I will be ready with what I do have! But luckily it will be an improv gig of original ideas, so nobody will be able to accuse me of playing it wrong! I can assert with confidence that any jazz notes were deliberate dissonances! :wink:


Definitely a great and fantastic update! Thanks a lot @brad

1 Like

Much more elegant interface. Thank you!

1 Like

Thanks Brad!

Now that that’s out of the way how is Christine doing?

1 Like

ah yeah, definitely don’t go to 4100 atm.

Ugh, that’s been one of the distractions over the last couple of weeks. So called “upholsterer” butchered a headliner and a bunch of vinyl sections. Brought her home and spent two days cleaning up his contact adhesive inspired mess.

1 Like

Great work @brad!

1 Like

I already like that the configuration window for the binding stays open and that there is a test button in it. I can’t count how many times I wished I could see the effect of a binding in real time and with focus on a different tab than the bindings tab. Way better for testing! :+1:


OK, now I have my first piece of funky business: When loading most of my live songs, Cantabile pretty much freezes audio operations, some with a max time load in the thousands% - Profiler then also stops recording. But Cantabile still allows me to open the profiler:

Other songs don’t get the same high audio load, but get stuck at a high number of page faults and again the profiler stops recording, so looks like the audio engine freezes up.

In all these cases, attempts to cycle the audio engine result in a complete freeze, requiring me to kill the process. Looks like the audio engine somehow locks up.

Some - very similar - songs seem to load without problems (prima vista), but most of my live songs freeze up. It looks like the audio engine gets overwhelmed during the initialization phase (when loading up all the plugins creates a lot of load and page faults) and somehow gets corrupted.

Same Songs in 4.063 work without problems.

@brad: what will you need for diagnostics? Happy to send you a couple of song files, rack files and backup rack file for testing. Or I can run some deeper crash logs etc - whatever helps!

Currently, I’d caution against using this version in rehearsal or live situations…



1 Like

UPDATE: just found the new versions above (my tests were made using 4.101). With 4.104, this “overwhelming” of the audio engine seems to be fixed - songs now load without freezing. Phew!

Still will be a couple of days of testing before I allow this version on my live cubes…



Addendum: now with my songs loading, I’m getting crashes on manually triggering bindings (via the “play” icon). With these crashes, Cantabile does get to the crash report stage, so crash data should be with @brad

Thanks Torsten… I’ll check these out first thing Monday morning.

3 posts were split to a new topic: Hanging Notes in 4104

C4104 was loaded today on my practice laptop. My system has an Art X-11 foot pedal that sends program changes to Cantabile which then sends MIDI to an X32 mixer and a Kemper Profiler. As set of bass pedals are also connected to Cantabile to run some VSTs or be midi-filtered to send more MIDI to the X32 or Kemper. Some My comment are below.

  1. Backed up operating system and MyDocs (where all the C4 files are stored)

  2. Had to update license on this Laptop (it was running 4062 with a license?)

  3. Installed C4104 with no problem after License updated

  4. All VST2 seem to show in VST list (no JBridge or VST3 are used)

  5. WebServer for floor video monitor working

  6. First issue was background rack not sending program change signals to Kemper. Had to change Background rack from “load by program” to “load by index”. Swapping back to “program” stops all patch changes. Looking at the saved Background Rack from C4062 in Notepad, “targetBindingPointName”: “loadSongByProgramInstant”, so I can’t comment on why Index had to be used with C4104. But it appears to be working.

  7. Transport will not play from rack binding. When any note is received from Bass Pedals, the transport is supposed to start. I deleted and reentered the binding, but still no go. Complementary binding for note off is to stop transport does not work, either.

  8. Expression pedals are “flaky.” The smooth 1-127 CC14/15 are visible going into a footpedal rack, but only 127, 104, and 0 exit the rack. The way it used to work is CC14 (pedal 1) was input 0-127 and CC15 (pedal 2) was input 0-127. The CC14/15 are bound to the rack output gain (with jump prevention) then the output gain is bound to CC11 to send to the Kemper (CC11 on Kemper is Morph CC). Foot pedal behaves as such:

CC14/CC15 outputs 104-127 >>>>> C11 is 127 (multiple CC11=127 when moving)
When CC14/15 gets to 104 >>>>> C11 is 104 (single CC11 104)
CC14/15 moves to 0 >>>>> C11 finally single 0 at bottom of pedal stroke.

“Foot Pedal Rack” converts CC14/15 inputs to CC11 and outputs CC11 to Kemper.

Input from EXP1 (CC14) mapped to Rack Gain. Range is 6-121 because sometimes foot pedals don’t always make it to end stroke.

Input from EXP2 (CC15) mapped to Rack Gain.

Bass Pedals can input C11 for note on/off scenario with midi filters. Map to Rack Gain.

Convert Rack Gain to CC11 and output to Kemper.

The rack worked great in C4062 and it looks like it should work now. C4062 has a max Rack Gain of 14dB and C4104 has a max of 30dB (maybe related?)

1 Like

Hi Torsten,

Can you send song or rack that I can reproduce this with. I’ve been looking into it and it seems to be related to load state bindings, but I can’t reproduce it and I want to understand it properly instead of just patching it.


That’s odd, nothing in that area has changed since the previous build. Do you happen to have a backup of you settings folder from before upgrading? What build were you running before?

Again, nothing has changed with MIDI routing so surprised to hear this. How are you switching state - via GUI, via binding, via binding in background rack, something else?


Checked your license and this makes sense. 4062 was released in Feb, your subscription renewed in April, 4100 released in June. ie: your subscription elapsed between the two builds, but because 4062 was happy to run on old license it didn’t renew itself.

The other issues you’ve reported I’ll work through today. There’s definitely some issues with range mapping between some binding points. In case I need it, can you send me a copy of your foot pedal rack.


Yes, the licensing sequence makes sense. I just wasn’t expecting that. Other information is on the way. That C4104 update was for 45 song conversions and there were only two problems. Pretty good batting average. Thanks for looking.