Describe your issue here:
Apologies in advance if this is redundant/duplicate.
Working with my live session, I noticed a few situations where I need more control over the click and the track group for backing tracks. For example, the band can drift away from the tracks, or the vocalist might repeat a verse and I miss enabling the loop in time. In those moments, I want to solo the click and temporarily fade the tracks down, then bring the tracks back in cleanly at the next section.
Here is what I have set up in Canvas so far:
-
A “Toggle Solo Click” button using OSC: /mixer/click/solo toggle;
-
A custom slider for my track group (all tracks) with a script on change:
const vol = Math.max(0, Math.min(1, Number(value))); sendOsc("/mixer/track/volume", vol);
-
A “Fade In” button using OSC: /mixer/track/fadeTo 0.85 0.4;
What I would like to achieve:
-
When I press “Toggle Solo Click”, I also want to fade the tracks down (even though soloing the click already mutes the tracks), so that I can fade in the tracks when ready. I tried adding /mixer/track/fadeTo 0 0.1; to the same button.
-
When I am ready to bring the band back into the tracks, I press the “Fade In” button, which should both unsolo the click (via /mixer/click/solo false;) and then fade the tracks back in.
The problem:
-
The additional OSC commands I add to the “Solo Click” and “Fade In” buttons do not run.
-
It seems only the first OSC command on each button is executed, even though I separated commands with ; and made sure each command ends with ;.
-
I also tried adding sleep 1000, but that did not help.
Questions:
-
Is there an easier or recommended way to accomplish this workflow in Canvas?
-
If not, is there a way to make my current approach work so that a single button can reliably send multiple OSC commands in sequence?
Please fill out these values to make it easier to troubleshoot:
-
OS and Version: (macOS Tahoe 26.1)
-
Version of AbleSet: (3.0.0-beta.24)
-
Version of Ableton Live: (12.3)
To simplify, here is what I am currently doing to achieve the functionality:
What I would like instead is to trigger each of these workflows with a single button press, rather than needing two separate clicks every time.
Hey @pritamswain!
Here’s a Canvas button you can try for that purpose.
I’m attaching it below as a .js file, but I’ll also paste the code here in case anyone else finds it useful.
Solo Click & Fades.json (1.2 KB)
Basically, pressing it will solo the click and fade out the tracks, and pressing it again will unsolo the click and fade the tracks back in.
Canvas button → Script On Press
// Toggle state: true = "click only" (tracks faded out), false = "normal"
const clickOnly = shared("clickOnlyMode", false);
if (!clickOnly) {
// Enter "click only"
sendOsc("/mixer/click/solo", true);
sendOsc("/mixer/track/fadeTo", 0);
setShared("clickOnlyMode", true);
} else {
// Exit "click only" (back to tracks)
sendOsc("/mixer/click/solo", false);
sendOsc("/mixer/track/fadeTo", 0.85);
setShared("clickOnlyMode", false);
}
Button color (Canvas → Background Color)
Enable Dynamic, then paste this:
${ shared("clickOnlyMode", false) ? "emerald-500" : "emerald-900" }
(Adjust colors to taste.)
Give this a try and let me know if it works for your use case.
I’m looking forward to your reply!
Agus
Hey Agus,
You are a saviour.
This works like a charm.
I had almost finished a similar script and realized I had not changed to script on press. Noob mistakes.
Just a small edit to your response, for anyone who might be referring to this thread, ensure Dynamic in background color is Enabled.
Thanks again for all that you do Agus.
Regards,
Pritam
1 Like
Hey @pritamswain!
There’s an even simpler and more robust way to achieve this, by relying on AbleSet’s existing OSC state instead of a shared variable.
Using /mixer/click/soloed keeps the Canvas button always in sync with the actual mixer state.
Canvas button → Script On Press
if (!osc("/mixer/click/soloed")) {
sendOsc("/mixer/click/solo", true);
sendOsc("/mixer/track/fadeTo", 0);
} else {
sendOsc("/mixer/click/solo", false);
sendOsc("/mixer/track/fadeTo", 0.85);
}
Button color (Canvas → Background Color)
${ osc("/mixer/click/soloed") ? "emerald-500" : "emerald-900" }
Give this a try and let me know how it goes!
1 Like
Hey Agus,
Just tried this out, and it works perfectly.
Thanks for optimising it.
Cheers!
1 Like