Skip to content

Instantly share code, notes, and snippets.

@kasbah
Created November 28, 2011 22:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kasbah/1402419 to your computer and use it in GitHub Desktop.
Save kasbah/1402419 to your computer and use it in GitHub Desktop.
Scripts and lists to generate midi command reference for sooperlooper
[cmd] insert
It inserts new input in place, but always one "cycle" length... QuantizeMode and RoundMode have effects similar to Multiply.
**
*Ending with a RECORD press it ends the operation immediately and resets the cycle length to the whole loop.
***
****
[cmd] multiply
This similar to overdub, except the original loop is repeated underneath you "multiplying" the loop length until you stop it. Thus it can turn a 1 measure loop into a 2,3, etc measure loop. QuantizeMode and RoundMode affect how the overdubbing starts and stops. QuantizeMode affects when the operation begins, and RoundMode affects if the new audio continues to be added throughthe end of the current cycle after hitting the final record.<p> Keep in mind that the original loop length is a "cycle" and the loop length will be a multiple of that. You can actually make an already multiplied loop have fewer cycles when using Multiply on loops that have already been multiplied.
**
*If you end a MULTIPLY with a RECORD press it ends the loop immediately and resets the cycle length to the whole loop.
*The MultiIncrease function is implemented which allows you to increment the cycle count ahead of time, without needing to wait until the exact time to finish the multiply. Basically, press Multiply as if you were finishing it, then before the current cycle plays out, press Multiply again repeatedly to add cycles. The multiply will resume and automatically go into playback after the specified number of cycles.
***
****
[cmd] mute
Press to mute loop output. Dry passthough audio will be unaffected. To continue playing the loop in time press MUTE again. To continue playing the loop from the top press TRIG. To play back the loop once and return to mute, press ONCE.
****
[cmd] mute_off
****
[cmd] mute_on
****
[cmd] mute_trigger
****
[cmd] oneshot
(called "once" on GUI and in the <a href="doc_commands.html">GUI Command Reference</a>) this immediately restarts the loop playing back from the beginning, and goes into MUTE mode at the end of the loop.
****
[cmd] overdub
This keeps playing the loop and adds whatever you play on top until you stop overdubbing. Very useful.... this is the main tool. The Feedback controls the amount of the original loop that is used every pass. In actuality, when Feedback is set to 100%, it uses a slightly less amount to help prevent clipping on output.
****
[cmd] pause
Press to pause loop playback. Dry passthough audio will be unaffected. To continue playing the loop from the paused time press PAUSE again. To continue playing the loop from the top press TRIG. To play back the loop once and return to mute, press ONCE.
****
[cmd] pause_off
****
[cmd] pause_on
****
[cmd] record
Start here. If the record threshold is all the way down, pressing it once will start recording and pressing again will end the recording. <p> If the Threshold is set higher the loop recording doesn't start until the audio data is greater than the threshold. When finishing the loop, the threshold value is ignored. See the tips in the EDP manual, it works best if you stop and start recording the moment you hit the downbeat, not before. Trust them.
**
*If you end a RECORD with another function (OVERDUB, MULTIPLY, REPLACE, SUBSTITUTE, INSERT, ONCE) it will finish the loop immediately (threshold ignored) and start doing the new function.
*Ending with REVERSE stops recording and plays the loop backwards once then goes into MUTE mode.
***
****
[cmd] record_exclusive
****
[cmd] record_exclusive_next
****
[cmd] record_exclusive_prev
****
[cmd] record_or_overdub
****
[cmd] record_or_overdub_excl
****
[cmd] record_or_overdub_excl_next
****
[cmd] record_or_overdub_excl_prev
****
[cmd] record_or_overdub_solo
****
[cmd] record_or_overdub_solo_next
****
[cmd] record_or_overdub_solo_prev
****
[cmd] record_or_overdub_solo_trig
****
[cmd] record_overdub_end_solo
****
[cmd] record_overdub_end_solo_trig
****
[cmd] record_solo
****
[cmd] record_solo_next
****
[cmd] record_solo_prev
****
[cmd] redo
Redoes the loop if it can (if you haven't done a new operation since your last undo). Taken together UNDO and REDO allow you to do some neat things: record a verse part, then hit record to do a chorus part. To get back to the verse, press UNDO... to get to the chorus press REDO.
****
[cmd] redo_all
****
[cmd] replace
Replaces the audio in the loop for the duration of the command. The existing loop audio is not heard during the operation.<p> When Quantize mode is set, this operation will be quantized on start and finish with the current sync and quantize parameters.
****
[cmd] reset_sync_pos
****
[cmd] reverse
Reverses playback direction. Can be used in play mode, and even during an OVERDUB, which makes for some pretty interesting stuff. Can also be used in DELAY mode. If Quantize is on, the reversal doesn't happen until the next sync boundary, thus keeping the loop in time.
****
[cmd] scratch
("SCRATCH MODE" in the <a href="doc_commands.html">GUI Command Reference</a>) By default the Scratch Rate Active is toggled off which means it ignores the Scratch Rate parameter. Changes in the Scratch Position parameter over time define the rate of playback (position unit is ratio of current loop length). The implementation is still pretty rough sounding.<p> I've personally used a theremin (the PAIA Theremax) with CV output through my MIDI pedal, although the scratching code needs some work.
****
[cmd] set_sync_pos
****
[cmd] solo
Pressing SOLO will mute all other looper instances. Pressing it again will revert to the previous state before solo was pressed (eg, loops that were muted before the first press will stay muted). Pressing solo for a different loop will cause that loop to be the new soloed loop, only one loop may be soloed currently.
****
[cmd] solo_next
****
[cmd] solo_prev
****
[cmd] substitute
Is like Replace except you still hear the current underlying loop audio as it records new audio into the loop. On the next time around, only the newly recorded audio will be heard. This helps maintain the groove when recording a replacement section, because you can play with what was there.<p> When Quantize mode is set, this operation will be quantized on start and finish.
****
[cmd] redo_all
****
[cmd] trigger
this immediately restarts the loop playing back from the beginning.
****
[cmd] undo
Restores the playing loop to the state before the last operation. It maintains the current time position if the current loop was based on the previous loop (eg, not newly recorded). You can go all the way back to the first one still intact within the loop memory. As more operations are done, more of the available loop memory is used, and it will eventually start reclaiming the oldest versions.<p> Note that to undo all existing state, do a long-press of Undo.<p> Pressing Undo when an operation is waiting for sync or quantization will cancel the pending operation.
****
[cmd] undo_all
****
[ctrl] autoset_latency
****
[ctrl] delay_trigger
("Delay" on the GUI "DELAY MODE" in the <a href="doc_commands.html">GUI Command Reference</a>) Pressing the Delay control triggers Delay Mode. The time between the most recent two presses is the new delay time. While in DELAY mode, you can toggle Hold Mode (by pressing Replace), or Reverse at any time for a cool effect. To get out of delay mode press any other function or UNDO. You will probably want to adjust Feedback down from 1 before you enter delay mode or you'll build up a nice cacophony fast.
****
[ctrl] dry
("in mon" and "main in mon" (if set to global) on GUI and in <a href="doc_commands.html">GUI Command Reference</a>) Sets the level of any incoming audio for passthrough monitoring to the common outputs.
****
[ctrl] eighth_per_cycle_loop
****
[ctrl] fade_samples
("xfade" on GUI and in the <a href="doc_commands.html">GUI Command Reference</a>) The xfade control sets the length in samples that is used to crossfade the audio on loop operations. Useful to prevent unwanted clicks caused by waveform discontinuities. However, if you want them set this value to 0. The control in the GUI affects all loops.
****
[ctrl] feedback
****
[ctrl] input_gain
The input gain control sets a gain attenuation of the incoming main input audio. This affect the input into the loops only, not the main passthrough monitoring.
****
[ctrl] input_latency
****
[ctrl] jack_timebase_master
****
[ctrl] mute_quantized
****
[ctrl] output_latency
****
[ctrl] overdub_quantized
****
[ctrl] pan_1
****
[ctrl] pan_2
****
[ctrl] pan_3
****
[ctrl] pan_4
****
[ctrl] pitch_shift
****
[ctrl] playback_sync
****
[ctrl] quantize
****
[ctrl] rate
("Rate Adjustement" in <a href="doc_commands.html">GUI Command Reference</a>) The rate can be adjusted anytime (even during Recording) and will affect both the underlying loop and any new incoming audio recorded onto the loop, reminiscent of tape delay systems. Altering the Rate during recording/overdubbing, etc can result in interesting recorded audio. The GUI has buttons for easy access to 1/2 speed, double speed, and normal (1x) speed. MIDI bindings can be created to act like these buttons by specifying the range min and max to equal the target rate.
****
[ctrl] rec_thresh
****
[ctrl] redo_is_tap
****
[ctrl] relative_sync
****
[ctrl] replace_quantized
****
[ctrl] round
****
[ctrl] round_integer_tempo
****
[ctrl] scratch_pos
****
[ctrl] stretch_ratio
****
[ctrl] sync
****
[ctrl] tempo_input
****
[ctrl] tempo_stretch
****
[ctrl] trigger_latency
****
[ctrl] use_common_ins
****
[ctrl] use_common_outs
****
[ctrl] use_feedback_play
****
[ctrl] use_rate
****
[ctrl] use_safety_feedback
****
[ctrl] wet
("main out" on the GUI and the <a href="doc_commands.html">GUI Command Reference</a>)
The main wet control sets master level of all loop audio being sent out the main output ports. It does not affect the passthrough level from the main inputs, use the main in mon control for that.
****
</div> <!--class="Content" -->
<div class="copyright">
&copy; 2005 Jesse Chappell <i>&lt;jesse at essej dot net&gt;</i>
</div>
<div id="Menu">
<a href="index.html" title="Home">Home</a><br>
<a href="features.html" title="Features">Features</a><br>
<a href="download.html" title="Download">Download</a><br>
<a href="docs.html" title="Documentation">Documentation</a><br>
<a href="doc_start.html" title="Getting Started" class="offset">Getting Started</a><br>
<a href="doc_commands.html" title="Command Reference" class="offset">Commands</a><br>
<a href="doc_sync.html" title="Sync/Tempo" class="offset">Sync/Tempo</a><br>
<a href="doc_midi.html" title="MIDI Bindings"
class="offset">MIDI Bindings</a><br>
<a href="doc_osc.html" title="OSC Interface"
class="offset">OSC Interface</a><br>
<a href="donate.html" title="Donate">Donate</a><br>
<a href="/slforum/" title="Forum">Forum</a><br>
<a href="https://lists.sourceforge.net/lists/listinfo/sooperlooper-users">Email List</a><br>
</div>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>SooperLooper - Documentation :: MIDI Commands</title>
<link rel="icon" href="favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="css/nn4.css" type="text/css" media="screen" />
<!--link before import prevents Flash Of Unstyled Content in ie6pc -->
<style type="text/css" media="screen">@import "css/jlc.css";</style>
</head>
<body>
<div id="Header">
<a href="index.html" border=0>
<img src="sl_web_logo_black.png" id="titleimage"></a>
<div id="headertitle">
<h4 id="titletext">Live Looping Sampler</h4>
</div>
<div id="pagetitle">
<h4 id="pagetitletext">Documentation ::: Midi Commands</h4>
</div>
</div>
<div id="Content">
[g.ctrl] auto_disable_latency
****
[g.ctrl] eighth_per_cycle
****
[g.ctrl] output_midi_clock
****
[g.ctrl] save_loop
****
[g.ctrl] select_all_loops
****
[g.ctrl] select_next_loop
****
[g.ctrl] select_prev_loop
****
[g.ctrl] selected_loop_num
****
[g.ctrl] send_midi_start_on_trigger
****
[g.ctrl] smart_eighths
****
[g.ctrl] sync_source
****
[g.ctrl] tap_tempo
****
[g.ctrl] tempo
****
[g.ctrl] use_midi_start
****
[g.ctrl] use_midi_stop
****
{
if (substr($0,1,1) ~ "\\[") # '[' denotes command title
{
print "<div class =\"commandbox_head\">\n <b>" ""$0"" "</b>\n</div>\n<div class=\"commandbox\">\n <p>"
}
else if(substr($0,1,1) ~ "\\*")
{
sub("^\\*\\*\\*\\*","</div> <!-- class=\"commandbox\" -->",$0); # **** denotes command seperation
sub("^\\*\\*\\*"," </ul>\n </div> <!-- class=\"ending_box\" -->",$0); # *** denotes end of special ending box
sub("^\\*\\*"," <div class=\"ending_box\">\n <b>Special Endings</b><br>\n <ul>",$0); # ** denotes start of special ending box
sub("*"," <li>",$0); # * denotes special ending bullet item
print ""$0""
}
else #treat like command description and just output
{
print ""$0""
}
}
#!/bin/bash
cat doc_midi_commands_start.html > sl_doc_html/doc_midi_commands.html
echo "<h4>[CMD]</h4>" >> sl_doc_html/doc_midi_commands.html
cat cmd.lst | awk -f script.awk >> sl_doc_html/doc_midi_commands.html
echo "<h4>[CTRL]</h4>" >> sl_doc_html/doc_midi_commands.html
cat ctrl.lst | awk -f script.awk >> sl_doc_html/doc_midi_commands.html
echo "<h4>[G.CTRL]</h4>" >> sl_doc_html/doc_midi_commands.html
cat gctrl.lst | awk -f script.awk >> sl_doc_html/doc_midi_commands.html
cat doc_midi_commands_end.html >> sl_doc_html/doc_midi_commands.html
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment