Binding question


Hi all!

I’m trying to figure out if the following is possible using Cantabile only, without Bidule (or Max, PD or scripting in Lemur).

I have a source rack (let’s say Pianoteq) with two outputs, one to a ‘main out’ rack and the other to a ‘delay rack’.
In the ‘delay rack’ I have 2 delay plugins and I would like to be able to control them in the following ways:

  1. CC controller x -> Delay 1 on/off (or on/bypass)
  2. CC controller y -> Delay 2 on/off (or on/bypass)
  3. CC controllers x & y -> Delay 1+2 on/off (or on/bypass). In my setup Delay 1 output is routed to the input of Delay 2.

In other words I want to be able to use the two delays either independently or combined together when both are active.

However, I can’t find the right combination of bindings/routes/states to achieve that using only 2 CCs in my controller, as it seems there’s always an impossible combination. For example, if both delay plugins are bypassed, the source signal is duplicated as it passes also through the delay rack.

In Lemur I can add an ‘IF’ statement to control multiple CCs so that if both CCs values are 0 (that means that both delays are bypassed), it triggers a third CC’s value that mutes the delay rack’s output route. If any of the two CCs is equal to 1, then the third CC unmutes the delay rack output and so on.

I’m wondering if it’s possible to create bindings that are active only under certain conditions, or something similar. As I need this in my keyboard setup that so far doesn’t use the iPad (and doesn’t use Max or similar) it would be great to achieve this with Cantabile only.



How about this. Keep both delay plugins enabled at all times in the rack, and don’t worry about bypassing them. Then add these audio routes in the delay rack:

  1. One from rack audio in to delay 1
  2. One from rack audio in to delay 2
  3. One direct from rack audio in to rack audio out (for “no delay”)
  4. One from delay 1 output to delay 2 input
  5. One from delay 1 output to rack audio out
  6. One from delay 2 output to rack audio out

For each of these routes, select the top state behaviour in the list, that allows the route’s enabled state to be driven by rack states.

Then define rack states as follows:

  • Silence: All routes disabled (so the rack will have no output)
  • No delay: Enable route 3 only (so the rack will output what comes in on the input)
  • Delay 1: Enable route 1 and 5 only
  • Delay 2: Enable route 2 and 6 only
  • Delay 1&2 parallel: Enable routes 1, 2, 5, 6 only
  • Delay 1&2 series: Enable 1, 4, 6 only

Essentially you’re making all the connections to/from/between the delay plugins switchable by rack state, so you can completely rewire them on demand. The result is that you should be able to switch between these five rack states to choose the combination of delays you require, including using both delays in either series or parallel if you like.

You should also be able to control these from a single CC if you like, just mapping the CC values 0-5 to select the rack states, with a single binding to select the required rack state.

This approach is switching the inputs to each delay, but also having a separate route that completely bypasses the plugins. This works better than using bypass directly on each plugin, because it avoids mixing two bypassed signals together.

Hope this helps…or at least gives you inspiration for some similar solution! :slight_smile:



Thanks a lot @Neil_Durant for your answer!

I thought about a similar solution (that’s the plan for a future implementation of all my fx racks using iPads as controllers) and I realised that audio routes and states are probably the way to go. My problem is that I need to control the 2 delays using 2 buttons in my NanoKontrol2. The reason is that I need a visual feedback from the NanoKontrol while performing, as I play mostly improvised music.

With 2 buttons I could have:

  1. Button 1 on: Delay 1 route enabled,
  2. Button 1 off: all routes disabled,
  3. Button 2 on: Delay 2 route enabled,
  4. Button 2 off: all routes disabled,

Then I’d need something like:

  1. Button 1 & 2 on: Delay 1 & 2 series
    and here I’m stuck because I’d need to trigger this state only when the 2 buttons are on and I can’t think of a way to achieve this without an IF statement in a script.

In the current version of my setup I send my sources to the fx rack, and then I use bypasses and wet/dry levels to achieve what I want. It works, but I’d like to have separate outputs for the source and the effects, especially since I want to record them as separate tracks for further mixing in a DAW.



Aha, I see your dilemma now, I wasn’t aware of the constraints with your controller.

I think you could do it straightforwardly using bindings to the routes above on your two CCs, if running the two delays in parallel was acceptable. But if you need the “both” scenario to have them wired in series it gets very fiddly.

I think I would to try and find a way to select between your rack states by using the two CCs, with the routing I mention above, which simplifies the different routing configurations. Perhaps one CC could be used in a binding to enable/disable some other bindings that are triggered by your second CC, which then select specific rack states.

Certainly an interesting problem!



I guess this could be a useful scenario to use ReaJS (from the free ReaPlugs package):

  • create a simple script in ReaJS that converts any combination of your two buttons into a program change from 0 to 3 (simple binary coding: button 1 has a value of 1 when on, button 2 a value of 2, combining both gets you values from 0 to 3).
  • Then create a routing rack connecting your plugin’s output and the delays; to enable your serial combination, you’ll need not only your plugin’s output but also delay 1 output connected to your routing rack as input (to be able to connect it to delay 2 input).
  • to be able to create your serial state, you’ll also need a separate “delay 1” output port in your routing rack, otherwise you won’t be able to turn off delay 1 direct output in serial mode. So instead of connecting delay 1 output to your master output, connect it only to your routing rack and connect “delay 1 out” of your routing rack to master output
  • Now create four states within this routing rack corresponding to each of the button combinations: 0 (both buttons off): all routes disabled, 1/2: only the route from plugin input to the respective delay, 3: input to delay 1, delay 1 output routed internally to delay 2, delay 1 output port of routing rack muted
  • Set your ReaJS plugin to control the routing rack states via Program Change

This should do the trick - just a rough sketch, but with a bit of persistence, you should get it working.




Hi @Torsten and thanks for your answer and detailed instructions!

This sounds probably like the best solution at the moment (or a Bidule patch). I’ll investigate ReaJS as it would be an useful and simple enough project to start exploring JS MIDI programming.