forked from essej/sooperlooper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
OSC
259 lines (185 loc) · 6.65 KB
/
OSC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
OSC interface to SooperLooper engine
Arguments are prefixed with type: where s=string, i=integer, f=float
PING 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
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
20 = OffMuted
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
waiting :: 1 if waiting, 0 if not
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
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)
output_midi_clock :: 0.0 = no, 1.0 = yes
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. The interval can be 10-100ms. Values will be rounded down
to the nearest 10ms.
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.
MIDI BINDING CONTROL
/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