AbleSet Icon

AbleSet

Controlling AbleSet via OSC

AbleSet listens to OSC commands on port 39051, so you can remote-control it from any other app that supports OSC.

Here's a list of all available commands:

Global

  • /global/play starts playback
  • /global/pause pauses playback
  • /global/stop stops playback
  • /global/startPlaying starts playback from the last cursor position
  • /global/continuePlaying continues playing from the current playhead position
  • /global/playPause toggles playback between play and pause
  • /global/playStop toggles playback between play and stop
  • /global/startRecording starts recording, and starts playback when Live isn't already playing
  • /global/stopRecording stops recording, but doesn't stop playback
  • /global/toggleRecording starts recording and playing, or stops recording
  • /global/quantization [quantization] sets the global quantization of your project
    • Allowed values: 8, 4, 2, 1, 1/2, 1/2T, 1/4, 1/4T, 1/8, 1/8T, 1/16, 1/16T, 1/32, none
  • /global/syncToRemoteTick syncs this computer to the playhead of connected AbleNet instances

Loop

  • /loop/enable enables Live's loop bracket
  • /loop/escape disables Live's loop bracket
    • if the current loop was enabled using the +LOOP flag, this will also jump to the next section
  • /loop/toggle toggles Live's loop bracket

Setlist

  • /setlist/jumpToTime [time] jumps to the given time, in beats
  • /setlist/jumpToSong [number, name, or RANDOM] jumps to the song at the given position in the setlist
    • /setlist/jumpToSong 2 jumps to the 2nd song
    • /setlist/jumpToSong -2 jumps to the 2nd-last song
    • /setlist/jumpToSong SongTitle jumps to the first song named "SongTitle"
    • /setlist/jumpToSong RANDOM jumps to a random song
  • /setlist/jumpBySongs [steps] jumps by given number of songs
    • /setlist/jumpBySongs 1 jumps to the next song, /setlist/jumpBySongs -1 jumps to the previous one or to the beginning of the current song when the playhead isn't at the start of the song
    • Adding a force=true parameter when jumping back a song (e.g. /setlist/jumpBySongs -1 force=true) ignores the playhead's current position inside the song and always jumps to the previous song
  • /setlist/jumpToSection [number or name] jumps to the section at the given position in the current song
    • /setlist/jumpToSection 2 jumps to the 2nd section
    • /setlist/jumpToSection -2 jumps to the 2nd-last section
    • /setlist/jumpToSection Chorus jumps to the first section named "Chorus"
    • /setlist/jumpToSection Chorus true jumps to the first section whose name includes the word "Chorus"
  • /setlist/jumpBySections [steps] jumps by a given number of sections
    • /setlist/jumpBySections 1 jumps to the next section in the current song
    • Adding a force=true parameter when jumping back a section (e.g. /setlist/jumpBySongs -1 force=true) ignores the playhead's current position inside the section and always jumps to the previous one
  • /setlist/jumpToNextSection [name] jumps to the next section in the current song that matches the given name
    • /setlist/jumpToNextSection Chorus jumps to the next section named "Chorus"
  • /setlist/jumpToPrevSection [name] jumps to the previous section in the current song that matches the given name
    • /setlist/jumpToPrevSection Chorus jumps to the previous section named "Chorus"
  • /setlist/jumpByBeats [number] [boolean] jumps forward or backward by a given number of beats
    • By default, AbleSet prevents you from jumping beyond the bounds of the current song. To override this, set the 2nd argument to true.
  • /setlist/jumpByBars [number] [boolean] jumps forward or backward by a given number of bars
    • By default, AbleSet prevents you from jumping beyond the bounds of the current song. To override this, set the 2nd argument to true.
  • /setlist/jumpByMeasures [number] [boolean] jumps forward or backward by a given number of measures, always snapping to the beginning of the measure
    • By default, AbleSet prevents you from jumping beyond the bounds of the current song. To override this, set the 2nd argument to true.
    • When jumping back one measure while the playhead isn't at the beginning of a measure, AbleSet jumps to the beginning of the current measure first. To override this, add a force=true argument.
  • /setlist/jumpToQueued [boolean] jumps to the queued song or section
    • if the first argument is true, AbleSet jumps instantly, without respecting Live's global quantization
  • /setlist/playCuedSong plays the next song after the current song has finished
    • if autoplay is disabled, this will jump to the next song first, and start playback when it's called again
  • /setlist/go is a command that does different things based on the current state of your set:
    • When stopped at the end of a song, jumps to the next song
    • When stopped at the beginning of a song, starts playback
    • When playing in a loop, escapes the loop
    • When playing while a song or section is queued, instantly jumps to it
  • /setlist/setLocatorsFromClips places a locator at each section clip
  • /setlist/removeClipLocators removes automatically placed locators at section clips

Lyrics

  • /lyrics/jumpByLines [string] [integer] jumps by the given number of lines
    • The first parameter is the slug of the lyrics track, the second defines the number of lines AbleSet should jump by.
    • /lyrics/jumpByLines leo 2 jumps ahead two lyrics lines in the lyrics track called "Leo +LYRICS"
    • /lyrics/jumpByLines backing-vox -2 jumps back two lyrics lines in the lyrics track called "Backing Vox +LYRICS"

Click Tracks

  • /click/mute [boolean or toggle] mute or unmute all click tracks
  • /click/solo [boolean or toggle] solos or unsolos all click tracks

Audio Interfaces

  • /audioInterfaces/setScene [1, 2, A, or B] sets the active scene on the connected audio interfaces
    • /audioInterfaces/setScene 1 sets the active scene to scene A
    • /audioInterfaces/setScene B sets the active scene to scene B
  • /audioInterfaces/toggleScene toggles the active scene between A and B on the connected audio interfaces

Floating Setlist Window

  • /floatingWindow [show|hide|toggle] shows, hides, or toggles the floating setlist window

Settings

Boolean values can be an actual boolean or 0 / 1. You can also set them to toggle to toggle the setting.

  • /settings/ableNet [boolean] enables or disables AbleNet
  • /settings/ableNetDriftCorrection [boolean] enables or disables automatic drift correction
  • /settings/autoplay [boolean] sets the autoplay option
  • /settings/alwaysStopOnSongEnd [boolean] sets whether AbleSet should stop playback at the end of all songs
  • /settings/autoJumpToNextSong [boolean] sets whether AbleSet should automatically jump to the next song at the end of a song
  • /settings/autoLoopCurrentSection [boolean] sets whether AbleSet should automatically move the loop bracket to be around the current section
  • /settings/countIn [boolean] enables or disables the Count-In feature
  • /settings/countInSoloClick [boolean] sets whether the click track should be soloed during count-in
  • /settings/countInDuration [1, 2, or 4] sets the count-in duration in bars
  • /settings/jumpMode [quantized, end-of-section, end-of-song, or manual] sets the jump mode
  • /settings/safeMode [boolean] enables or disables the Safe Mode feature

AbleNet

To enable or disable AbleNet or the automatic drift correction, see settings OSC commands.

  • /ableNet/syncToRemote brings this machine back in sync with others on the network if it's paused, see AbleNet docs

Device Control

You can use these OSC commands to control the AbleSet web app in the browser. If you'd like a command to run on all devices, pass all as the first parameter. Otherwise, set the first parameter to either the IP address or host name of the device you'd like to control. The host name is case-insensitive. Multiple devices can be passed separated by commas.

  • /devices/showPage [devices] [page] navigates to the given page
    • The page parameter corresponds to the path you see in the browser's URL bar
    • /devices/showPage all performance navigates to the performance page on all connected devices
    • /devices/showPage leos-ipad lyrics/leo opens the lyrics page for the lyrics track called Leo on the device called leos-ipad
    • /devices/showPage 192.168.1.10 setlist opens the setlist page on the device with the IP address 192.168.1.10
  • /devices/setSetting [devices] [setting] [value] sets a device-specific setting
    • Settings can be viewed by going to Settings -> Debug -> Device Settings
    • /devices/setSetting all performance.showSectionProgress true enables the section progress bar on all devices
  • /devices/lock [devices] locks the given device
  • /devices/unlock [devices] unlocks the given device
  • /devices/toggleLock [devices] toggles the lock on the given device

Notifications

These OSC commands display a notification on one or more devices. If you'd like the notification to be displayed on all devices, pass all as the first parameter. Otherwise, set the first parameter to either the IP address or host name of the device you'd like to control. The host name is case-insensitive. Multiple devices can be passed separated by commas.

  • /notify/toast [devices] [title] [description] [duration] displays a toast notification on all browsers
    • Description and duration are both optional parameters
    • The toast duration is specified in milliseconds
  • /notify/big [devices] [message] [duration] [color] displays a message that fills the entire screen on all browsers
    • Duration can be omitted and will default to 5000 ms
    • The message duration is specified in milliseconds, but users can also hide it by tapping on it
    • The color can be any of the supported colors in AbleSet
    • The message can contain simple markdown for bold, italic, and underlined text

AbleNet Parameters

If you're using OSC commands in a setup with multiple computers connected via AbleNet, AbleSet automatically forwards commands to all other connected computers. For additional redundancy, you should send the same command to all computers.

For this to work well, each command you send to AbleSet via OSC should have its own UUID. You can append it as a string parameter to any OSC command, for example uuid=1234abcd where "1234abcd" is a random string for each command.

When AbleSet receives multiple commands with the same UUID, it will only execute the first one and discard all others.

If you don't want AbleSet to forward OSC commands, you can add the string ableNet=false to any OSC command that you send to AbleSet. In that case, the UUID parameter isn't necessary.

Finding the AbleSet OSC Server on Your Network

AbleSet announces its OSC server on the network using Bonjour. Apps like TouchOSC can find it automatically using the "Browse" function so you don't have to enter the IP address and port manually.

If you're writing your own OSC client, you can use any Bonjour library to look for _osc._udp. on the network. AbleSet's OSC server has a TXT value of server=ableset, so in case there are other applications announcing their OSC servers on the network as well, you can look for that value to find AbleSet.

Receiving Updates from AbleSet

AbleSet can send updates on its current state to other OSC servers. This can be used to update the state of your control surfaces in real time.

To register your OSC server with AbleSet, send the /subscribe command with the IP address and port, and optionally a name – e.g.:

/subscribe 127.0.0.1 8000 TouchOSC

If you set the IP address to auto, AbleSet will use the IP address the request came from to register the OSC server, e.g.:

/subscribe auto 8000 TouchOSC

This is useful for setups where you don't always know your IP address, like using TouchOSC on a machine that gets a new IP every time it connects to the network.

To receive fine value updates, e.g. for the playhead position or song/section progress, add a fourth argument to the call:

/subscribe auto 8000 TouchOSC true

Please note that these fine updates are sent up to 30 times per second and might be taxing on low-end devices receiving them.

You'll see a notification that the device has been connected, and from this point on, AbleSet will send updates for all events to your server. You can register multiple servers with AbleSet if you want to connect multiple control surfaces. To unsubscribe from events, send /unsubscribe to AbleSet.

In addition to the events, AbleSet will send a /heartbeat every 2 seconds. You can use this to check if the connection is still up. If you'd like to trigger a heartbeat yourself, you can send a /getHeartbeat command to AbleSet.

To get the current state of all values, send /getValues to AbleSet after registering your server.

Here's a list of all values that get sent to registered servers:

Global

  • /global/isConnected [0|1] whether AbleSet is connected to Live
  • /global/isLoadingFile [0|1] whether Live is loading a new song file
  • /global/beatsPosition [float] the current position in beats, floored to whole numbers while Live is playing
  • /setlist/finePosition [float] the current position
    • Requires the fine flag to be set when subscribing to updates
  • /global/humanPosition [float] [float] the current position in bars and beats
  • /global/currentMeasure [string] [float] [float] the current measure from a measure track, if available, along with the current beat and the total number of beats in the current measure
  • /global/tempo [float] the current tempo
  • /global/isPlaying [0|1] whether Live is currently playing
  • /global/timeSignature [integer] [integer] the time signature
  • /global/quantization [quantization] the global quantization of your project
    • Possible values: 8, 4, 2, 1, 1/2, 1/2T, 1/4, 1/4T, 1/8, 1/8T, 1/16, 1/16T, 1/32, none

Setlist

  • /setlist/name [string] the setlist name
  • /setlist/songs [...string] a list of all song names in the setlist
  • /setlist/songColors [...string] a list of all songs' colors in the setlist
  • /setlist/songDurations [...float] a list of all songs' durations in the setlist in seconds
  • /setlist/sections [...string] a list of all sections of the current song
  • /setlist/sectionColors [...string] a list of all sections' colors of the current song
  • /setlist/activeSongName [string] the name of the current song
  • /setlist/activeSongDescription [string] the description of the current song
  • /setlist/activeSongIndex [string] can be referenced to the list of songs
  • /setlist/activeSongStart [float] the song's start position in beats
  • /setlist/activeSongEnd [float] the song's end position in beats
  • /setlist/activeSongDuration [float] the song's duration in seconds
  • /setlist/activeSongColor [string] [string] the color of the song, as a color name and as a hex string
  • /setlist/activeSongProgress [float] the song's progress from 0 to 1
    • Requires the fine flag to be set when subscribing to updates
  • /setlist/activeSectionName [string] the name of the current section
  • /setlist/activeSectionDescription [string] the description of the current section
  • /setlist/activeSectionIndex [float] the index of the current section in the current song
  • /setlist/activeSectionStart [float] the section's start position in beats
  • /setlist/activeSectionEnd [float] the section's end position in beats
  • /setlist/activeSectionColor [string] [string] the color of the section, as a color name and as a hex string
  • /setlist/activeSectionDuration [float] the section's duration in seconds
  • /setlist/activeSectionProgress [float] the section's progress from 0 to 1
    • Requires the fine flag to be set when subscribing to updates
  • /setlist/nextSectionName [string] the name of the next section
  • /setlist/nextSectionDescription [string] the description of the next section
  • /setlist/nextSectionIndex [float] the index of the next section in the current song
  • /setlist/nextSectionStart [float] the next section's start position in beats
  • /setlist/nextSectionEnd [float] the next section's end position in beats
  • /setlist/nextSectionColor [string] [string] the color of the next section, as a color name and as a hex string
  • /setlist/nextSectionDuration [float] the next section's duration in seconds
  • /setlist/queuedName [string] [string] the name of the queued song and section
  • /setlist/queuedIndex [float] [float] the index of the queued song and section
  • /setlist/nextSongName [string] the next song's name
  • /setlist/nextSongDescription [string] the next song's description
  • /setlist/nextSongIndex [float] the next song's index
  • /setlist/nextSongDuration [float] the next song's duration in seconds
  • /setlist/nextSongColor [string] [string] the color of the next song, as a color name and as a hex string
  • /setlist/loopEnabled [0|1] whether the loop bracket is enabled
  • /setlist/loopStart [float] the loop's start position in beats
  • /setlist/loopEnd [float] the loop's end position in beats
  • /setlist/isCountingIn [0|1] whether AbleSet is currently counting in
  • /setlist/remainingTimeInSong [float] remaining time in the current song, in seconds
  • /setlist/remainingTimeInSet [float] remaining time in the set, in seconds

Lyrics

  • /lyrics/[slug]/previous the previous lyrics line's text
  • /lyrics/[slug]/current the current lyrics line's text
  • /lyrics/[slug]/next the next lyrics line's text

Audio Interfaces

  • /audioInterfaces/connected [0|1] whether an audio interface is connected
  • /audioInterfaces/all/scene [1|2] the current scene – 1 for the main and 2 for the backup computer
  • /audioInterfaces/names [...string] the name of the connected audio interface
  • /audioInterfaces/scenes [...1|2] the interface's current scene – 1 for the main and 2 for the backup computer