New: Media Player Loop Ranges and Live Loop Control

Last week, I posted here about some network API improvements I’d started but after some planning over the weekend I’ve set that aside, changed tack and decided to focus on a few things more useful to the broader user base, and this the first of them…

Cantabile build 4179 introduces support for media player loop ranges and live loop control.

These are not to be confused with play ranges and play ranges loops that have been supported for a long time:

  • Play Ranges - (existing functionality ) these are for limiting the playback of a media file to a particular range. You can have multiple ranges but only one can be active at a time. A play range can be looped and this is primarily for practice sessions where you want to play a certain section over a number of times.
  • Loop Ranges - (new) these are specifically for looping sections of a file during performance. You can have multiple active at any one time, they’re independent of the active play range and there are controls that let you decide at performance time whether to loop again, or break out of the loop.

Here’s how to use the new functionality:

  1. Load a media player and using the play range handles select a region you’d like to loop.

  2. From the timeline panel menu, choose “Create Loop Range”

  3. Optionally enter a name, set a colour and set a loop count:

  4. Press OK, and notice the new loop range bar shown in the timeline “x2: Chorus”

  5. From the Range drop down choose “(All)” to clear the play range or if you just want to experiment, extend the play range so the loop range is entirely within it:

  6. Play the file and notice that the range loops and then continues. That the first big different between play ranges and loop ranges - play ranges stop once the loop has counted down where-as loop ranges loop a number of times and then continue on.

  7. Create more loop ranges if you want.

That’s the basics of loop ranges, but there’s one more important part - the loop mode. Notice the new button in the time line panel:

The loop mode lets you control the behaviour on the fly and has 3 modes:

“Automatic” - looping is controlled by the loop count setting

“Break” - breaks out of the current loop when the end is reached, regardless of the current loop count

“Loop” - loop at the end of the current loop range, regardless of the current loop count.

So the idea is you can setup loops and then decide on the fly whether to loop again or break out early.


  • There a bindings to control the loop mode of a media player, or the master transport (if the master transport is a media player).
  • Loop Ranges can’t overlap although they can touch end to end.
  • If a play range is also set, loop ranges are only effective if they’re entirely within the play range.
  • When a loop range is set inside a play range and the play range has a loop count the play range will play through N times and each loop range will loop each time through.
  • When a loop range is exited the loop mode is reset to auto. ie: you can break out of a loop early, but when the next loop range is reached, it’ll be back in auto mode so the loop count takes effect.
  • It’s perfectly valid to create a loop range with a loop count of 1 and then use the loop mode to decide whether to loop or not.

There’s still some work to be done in this area, but I wanted to get this out so I can get some feedback. Still to be done:

  • Update the StreamDeck plugin to support the loop mode actions
  • Update the Web UI to support loop mode actions
  • Add a “Loop Once” mode which makes the current loop repeat, but then revert to auto mode.

Keen for feedback and happy to answer questions.

Available now in build 4179.


Wow! If I was starting out my SpectralStreams set prep today, maybe I would not have needed to integrate MuLabs into Cantabile. :slight_smile:

One question. If you are looping in a Media player that is master to several media players, will they also loop under the control of the master?

Another question does it work with MIDI media players as well? I assume so?

They should… I’ve done some basic testing, but I’m still testing here and if it doesn’t then it’d be a bug.


1 Like

@brad thanks. Sounds like a great feature. I tend not to do much music this time of year when the weather means I can be outside, so not sure when I will get to try this, but I am definitely interested in this feature and will be seeing if for new songs I can use this feature as it would simplify things.

1 Like

Hi Brad,

Thanks so much for this, it will do away with one of my workarounds altogether! Looking forward to your next feature. :slight_smile:



Digging this @brad !

1 Like

Try this tomorow ! Thx a lot

Can’t tell you how happy I am to have this! That being said, please indulge me to vent a little.

Why in heavens name did this take soooooo long!

Believe me, I’m not complaining…I’m thrilled to have this! And, you are usually very responsive. This was just a long time coming.

Thank you so much for forgoing the web/network API project in favor of this. I think it will benefit a much larger part of the user base.

Good question! The problem was I’d bundled this in with a bunch of other transport related improvements which as a group turned into quite a big task - causing it to be constantly put it off.

Last weekend after some reflection and planning I decided to break down all those bigger tasks into smaller areas of work, and loop mode was the first thing that fell out of that… and now it’s done. I’m taking a similar approach to other long-standing ideas so hopefully some other interesting stuff should come from this new attitude.

Anyway, glad you like - sorry it took so long.

I’ve just put up build 4180 that makes some improvements:

  • There’s a new loop mode “Loop Once” which does exactly what it sounds like - causes the current loop range to loop once (and then switches automatically to Break mode)


  • The controller bar now supports a loop mode button that also shows the current loop count and loop iteration number (you might need to right click and elect to show this button).


  • The Web UI now has a loop mode control button:

  • New variables that report the loop state of the master transport:

    • $(LoopCount)
    • $(LoopIteration)
    • $(LoopInfo) (eg: “1 of 2”)
    • $(LoopMode)
  • The network API (transport endpoint) has support for loop mode, loop count, loop iteration and support for changing the current loop mode.


That makes sense and I understand. I worked in SW development for many years and totally get the importance of planning how and when to “open the hood”.

1 Like

Build 4181 adds:

  • Binding points on both Transport and Media Player for “Loop Count” and “Loop Iteration”. These can be used to reflect current loop info to external gear.

  • Stream Deck support for loop mode control (see here for how to update the plugin).

1 Like

Wow! Brad is on steroids!! So glad you prioritized this. This is perfect for letting the sax player take two solos to keep the people dancing!

Thanks, Brad… keep it coming.

1 Like

Oh, now that may push me into getting a steam deck…

1 Like

Hmmm, could it be that the loop feature has somehow broken marker labels?

Label text is gone…

Doesn’t seem to be song specific - happens in all my songs using marker labels

Thanks for reporting… I had to adjust the height calculations on that row and I bet there’s a rounding issue causing it to be too narrow and the text rendering thinks that text doesn’t fit vertically.

What scaling settings are you using for Windows and Cantabile?

Cantabile: 100%

Windows: 125%

Thanks @Torsten

Reproduced it at 125%… will get it fixed.


1 Like

Build 4183 should fix this.