The SooperLooper engine is controlled via OSC. An incomplete specification for the API is described below.
Arguments are prefixed with a letter: where s = string, i = integer, f = float PING the engine /ping s:return_url s:return_path If engine is there, it will respond with to the given URL and PATH with an OSC message with arguments: s:hosturl s:version i:loopcount Loop commands and parameter gets/sets paths are all prefixed with: /sl/#/ where # is the loop index starting from 0. Specifying -1 will apply the command or operation to all loops. Specifying -3 will apply the command or operation to the selected loop. COMMANDS: /sl/#/down s:cmdname command press /sl/#/up s:cmdname command release /sl/#/forceup s:cmdname forced release to do SUS-like actions /sl/#/hit s:cmdname A single hit only, no press-release action Where cmdname is one of the following: record overdub multiply insert replace reverse mute undo redo oneshot trigger substitute undo_all redo_all mute_on mute_off solo pause solo_next solo_prev record_solo record_solo_next record_solo_prev set_sync_pos reset_sync_pos SET PARAMETER VALUES /sl/#/set s:control f:value To set a parameter for a loop. where control is one of: rec_thresh :: expected range is 0 -> 1 feedback :: range 0 -> 1 dry :: range 0 -> 1 wet :: range 0 -> 1 input_gain :: range 0 -> 1 rate :: range 0.25 -> 4.0 scratch_pos :: 0 -> 1 delay_trigger :: any changes quantize :: 0 = off, 1 = cycle, 2 = 8th, 3 = loop round :: 0 = off, not 0 = on redo_is_tap :: 0 = off, not 0 = on sync :: 0 = off, not 0 = on playback_sync :: 0 = off, not 0 = on use_rate :: 0 = off, not 0 = on fade_samples :: 0 -> ... use_feedback_play :: 0 = off, not 0 = on use_common_ins :: 0 = off, not 0 = on use_common_outs :: 0 = off, not 0 = on relative_sync :: 0 = off, not 0 = on use_safety_feedback :: 0 = off, not 0 = on pan_1 :: range 0 -> 1 pan_2 :: range 0 -> 1 pan_3 :: range 0 -> 1 pan_4 :: range 0 -> 1 input_latency :: range 0 -> ... output_latency :: range 0 -> ... trigger_latency :: range 0 -> ... autoset_latency :: 0 = off, not 0 = on mute_quantized :: 0 = off, not 0 = on overdub_quantized :: 0 == off, not 0 = on discrete_prefader :: 0 == off, not 0 = on GET PARAMETER VALUES /sl/#/get s:control s:return_url s: return_path Which returns an OSC message to the given return url and path with the arguments: i:loop_index s:control f:value Where control is one of the above or: state :: -1 = unknown, 0 = Off 1 = WaitStart 2 = Recording 3 = WaitStop 4 = Playing 5 = Overdubbing 6 = Multiplying 7 = Inserting 8 = Replacing 9 = Delay 10 = Muted 11 = Scratching 12 = OneShot 13 = Substitute 14 = Paused next_state :: same as state loop_len :: in seconds loop_pos :: in seconds cycle_len :: in seconds free_time :: in seconds total_time :: in seconds rate_output in_peak_meter :: absolute float sample value 0.0 -> 1.0 (or higher) out_peak_meter :: absolute float sample value 0.0 -> 1.0 (or higher) is_soloed :: 1 if soloed, 0 if not GET/SET loop instance string Properties /sl/#/get_prop s:prop_name s:return_url s:return_path /sl/#/set_prop s:prop_name s:prop_value The only string property right now is: name SAVE/LOAD /sl/#/load_loop s:filename s:return_url s:error_path loads a given filename into loop, may return error to error_path /sl/#/save_loop s:filename s:format s:endian s:return_url s:error_path saves current loop to given filename, may return error to error_path format and endian currently ignored, always uses 32 bit IEEE float WAV /save_session s:filename s:return_url s:error_path saves current session description to filename. /load_session s:filename s:return_url s:error_path loads and replaces the current session from filename. GLOBAL PARAMETERS /set s:param f:value /get s:param s:return_url s:retpath where param is one of: tempo :: bpm eighth_per_cycle dry :: range 0 -> 1 affects common input passthru wet :: range 0 -> 1 affects common output level input_gain :: range 0 -> 1 affects common input gain sync_source :: -3 = internal, -2 = midi, -1 = jack, 0 = none, # > 0 = loop number (1 indexed) tap_tempo :: any changes save_loop :: any change triggers quick save, be careful auto_disable_latency :: when 1, disables compensation when monitoring main inputs select_next_loop :: any changes select_prev_loop :: any changes select_all_loops :: any changes selected_loop_num :: -1 = all, 0->N selects loop instances (first loop is 0, etc) LOOP ADD/REMOVE /loop_add i:#channels f:min_length_seconds adds a new loop with # channels and a minimum loop memory /loop_del i:loopindex a value of -1 for loopindex removes last loop, and is the only value currently recommended. SHUTDOWN /quit shutdown engine REGISTER FOR CONTROL CHANGES The following messages register and unregister from update events which will be sent the returl and retpath specified. The update OSC message has the following parameters: i:loop# s:ctrl f:control_value /sl/#/register_update s:ctrl s:returl s:retpath /sl/#/unregister_update s:ctrl s:returl s:retpath registers/unregisters to receive updates for a given input control when any other client changes it. /sl/#/register_auto_update s:ctrl i:ms_interval s:returl s:retpath /sl/#/unregister_auto_update s:ctrl s:returl s:retpath registers/unregisters for automatic repeated updates at the given interval (currently ignored, and always at 100ms intervals). This is handy for receiving updates for output controls such as state and position. The message is only sent if the control has changed since the last send. /register_update s:ctrl s:returl s:retpath /unregister_update s:ctrl s:returl s:retpath /register_auto_update s:ctrl i:ms_interval s:returl s:retpath /unregister_auto_update s:ctrl s:returl s:retpath These are the global control equivalents to the above. Finally, there is the command to register for any changes in loop count: /register s:returl s:retpath When the loop count changes it will send the same message that the /ping response does. MIDI BINDING CONTROL More details forthcoming...... /get_all_midi_bindings s:returl s:retpath /remove_midi_binding s:binding_serialization s:options /add_midi_binding s:binding_serialization s:options /clear_midi_bindings /load_midi_bindings s:binding_filename s:options /save_midi_bindings s:binding_filename s:options /learn_midi_binding s:binding_serialization s:options s:returl s:retpath /get_next_midi_event s:returl s:retpath return next midi event in a binding serialization /cancel_midi_learn s:returl s:retpath cancel learn or get next midi event in a binding serialization /cancel_get_next_midi s:returl s:retpath