stereo varispeed looper / delay / timeline-smoosher
this version of cranes builds on the “one buffer, two voices” approach of its predecessor in pursuit of a more flexible on-the-fly-sampling instrument. though the paper crane (initial record) allows original behavior, the pair of birds (overwrite) allows the artist to specify a buffer – in combination with the 1/10th second adjustable loop points, this brings new performative options to the table.
(128 vari-bright grid optional, but v fun)
- plug a stereo signal or two mono signals into the inputs on norns.
- head over to the params page.
- nb: when the buffer is completely cleared (at startup and after KEY 3 + KEY 1 are held), cranes will record incoming audio at 1x speed into both buffers and will immediately play back at the rates specified in the params page.
- nb: left input will write to voice 1, right input will write to voice 2.
- for the most immediate fun, I suggest setting
speed voice 1to
speed voice 2to
- head back to the performance interface.
- tap KEY 2 to record into the buffers. also, make some sounds!
- to loop, tap KEY 2 again. this sets the loop points (
s2/e2) to the length of the recording. you should hear your material played at half-speed on the left and reversed on the right. you should see the
one / twocounters counting in the same direction and at the same speed as your audio.
- hold KEY 1 until you see
e2. this switches which buffer you want to control with the buttons and encoders.
- use ENC 2 and ENC 3 to adjust the start and end points of the selected buffer’s loop, with 1/10th second resolution. you should see the counter for the buffer lock to the new
- tap KEY 2 to toggle overdub / overwrite for the selected buffer. you will see some friendly birds flying alongside your loop when overdub / overwrite is engaged.
- nb: to retain continuous audio, overdub / overwrite write to the selected buffer at the rate specified in the params page.
- adjust ENC 1 to crawl the spectrum of overdub / overwrite.
over: 0is full overdub, adding incoming audio to the pre-existing audio in the selected buffer.
over: 1is full overwrite, replacing pre-existing audio in the selected buffer with incoming audio.
- fun thing to try: adjust
end points past the existing audio and write into a new section of the selected buffer, then slowly re-introduce the prior section.
- tap KEY 3 to perform a speed bump on voice 1. hold KEY 3 to produce a more dramatic change. KEY 3’s influence is selectable in the params, under
~~is a small pitch deviation,
0.5is half-speed, etc.
- hold KEY3 + KEY 1 to completely erase all buffers. if you hit KEY 2 again after this, you’ll get back to the paper crane.
- plug in a grid and re-boot cranes
- use the following legend:
- speed + direction: -4x to 4x, 0 in the middle (unlit) functions as ‘pause’
- sync playhead to other: sync the voice’s playhead to the location of the other’s
- re-size loop to other: dynamically adjusts the voice’s current loop points to the other’s
- reset playhead to start: trigger voice to playback from currently defined start point
create snapshot: collect speed + direction, playhead position, start and end points and assign it to a button on the far left (similar to
erase all: erase all of the voice’s snapshots (similar to
- snapshot recall: recall a saved snapshot’s parameters
- start point adjustment + end point adjustment: add or subtract time from the voice’s start and end points, in 0.01 second or 0.1 second increments
- window adjustment: adjust voice’s loop window by 0.01 second increments or by the distance between the start and end points
- exposed param for input levels (good call, @mlogger!). there’s L and R values for both voices.
- created param to switch which buffer voice 2 references (buffer 1 or buffer 2). default (2) is “new cranes”, where both buffers are only written simultaneously during paper crane. switch this param (2 -> 1) to unlock “old cranes”, where voice 2 references buffer 1 for pitched delays and all kind of cool things. (thx for idea and testing, @Olivier + @yobink!)
- KEY 3 can do momentary reverse, independent of speed (great call @Ithacus!)
- generic code optimization