Cantabile now supports Suppressing and Blocking MIDI Bindings to solve problems with two common binding scenarios:
- Using notes as the source for a binding and suppressing the note
- Sending a song or state change event followed by a series of configuration events.
Unlike Cantabile 2 where a MIDI Controller assignment was consumed once it matched a target, Cantabile 3 continues to route the event to it’s other normal targets.
For example suppose you had a CC mapped to load the next song in a set list, after matching that binding and invoking the song switch the MIDI event continues to be routed to other MIDI targets.
Often this is benign, or often desirable as it lets you create bindings from one controller to multiple targets.
In other cases it can be quite a problem. One common scenario is when you want to binding a MIDI note press event to perform some action. Not only is the action invoked, but the note continues on and can result in an instrument playing the note — not want you want.
Before you had to work around this by setting up MIDI Filters to explicitly suppress the events in question. Now you can simply mark the binding as a “suppressing” binding and once matched, routing on that event will be stopped. ie: the event is consumed by the binding.
Another issue with bindings is when you want to send an event to switch to another song or state and then send a bunch of CC events to configure the song (set gain levels for example).
Normally bindings invoke the target action and the audio engine continues to run — including continuing to dispatch additional incoming MIDI events. If a binding invokes a song or state switch, normally the new state won’t have been loaded by the time subsequent events are received.
One option would be for the sender of the events to wait until the target song or state is loaded however this can sometimes be very difficult to tell.
To help with this Cantabile now supports Blocking Bindings. A blocked binding causes the MIDI port on which it was received to queue all incoming MIDI events until the target of the binding has completely finished executing.
- blocking bindings only block the port on which the original event was received
- blocking bindings are also implicitly a suppressing binding.
Using Blocking and Suppressing Bindings
To configure a binding in either of these special modes, simply right click on the binding and choose the appropriate mode from the Routing Mode menu (as shown in the screen shot above).
More information about bindings in general can be found in the guides.
This feature is available in build 3119 and later.