Stop button resetting Ableton to song start, but not Ableset displays

When stopping playback with a Play / Stop button (or spacebar with Stop by default instead of pausing set), Ableton returns to the Song Start as desired - but all the Ableset displays stay frozen at the point you stopped, only updating to the song start point when you next press Play. I have a TV show MD that likes to play the count-in bars to the band during Advertisement Breaks to get the tempo of the next song in their head, then he hits stop to reset the song to the start for the actual performance. It worries him that the Ableset display he’s seeing (a Canvas, or the normal Performance view) doesn’t show that he’s back at the start. Pressing the ‘Go to Song Start’ button does refresh the Ableset displays, but I’d have to give him that button as well on his hardware controller - and then it’s two button presses for him to Stop and Reset. Not sure if this is a new thing or I haven’t noticed it before. Is there any workaround?

cheers,

nick

  • Mac OS 15.7.5.3)
  • Version of AbleSet: 3.1.4
  • Version of Ableton Live: 12.4.3 Suite

Hey @njrsound,

AbleSet’s displays follow the playhead position it receives from Live, and stopping doesn’t push an updated position, so the views hold the last one until something moves the playhead explicitly (starting playback again, or a jump command). That’s why “Go to Song Start” refreshes everything, since that’s an actual jump.

You can combine both actions into a single Play/Stop button using a Script button, so one press stops and resets the displays to the top of the song.

Canvas Play/Stop & Go to Song Start button

Add a Button to your Canvas, set Button Type to “Script”, and put this in Script on Press:

// Read the state first, so the decision isn't affected by the stop below
const isPlaying = osc("/global/isPlaying");

if (isPlaying) {
  sendOsc("/global/stop");
  // Forces a jump to the start of the current song, wherever the playhead is
  sendOsc("/setlist/jumpBySongs", int(0), "force=true");
} else {
  sendOsc("/global/play");
}

The force=true argument is the key part. Without it, jumpBySongs 0 would behave differently depending on where the playhead sits. With it, it always lands on the beginning of the current song.

For the label, just type this template straight into the Label field:

${osc("/global/isPlaying") ? "Stop" : "Play"}

And for the color, switch Background Color to “Dynamic” and use:

${osc("/global/isPlaying") ? "green-800" : "green-950"}

Same thing on his hardware controller

In Settings → MIDI Mapping, OSC & Scripting → Edit MIDI Mapping, map the footswitch to Custom Script and paste the exact same code. That keeps it a single press on the controller too.

If you’d rather not use a script there, a Custom OSC mapping with this also works for a stop-only button:

/global/stop; /setlist/jumpBySongs 0 force=true

Would that work for your use case?

Hi Agustin, Thanks for the quick reply. The simple Custom OSC mapping for the hardware Stop Button works perfectly for me.