Recursion Index — a recursive looper/delay

The Recursion Index begins on the very basic principle that alternating read/write loopers can act as a delay; if their output is fed back into their input and attenuated by a VCA, the difference between the two becomes rather blurry.

One example of that blurriness can be heard here:

If, however, you connect three of them sequentially, with individual pitch control and reverse options for each looping stage, the distinction becomes less blurry and more bizarre. Consider a single stage, were it fed back into itself. If it’s pitched up a semitone and reversed, on the subsequent “repeat,” it becomes pitched up another semitone (two from its original pitch) and the reverse audio, being reversed once more, switches direction and plays forward; at the same time, any new audio being recorded is reversed and pitched one semitone, and this process continues to repeat (reference: Pitch-shifting delays such as the Boss PS-3 or the Rainbow Machine). Recursion takes place, as the same process is applied over and over again, producing different, but related, outcomes.

As you add stages, more varieties of these permutations become possible, with pitches evolving and audio directions switching back and forth; instead of a delay, you get rhythmically and pitch-inverting layers of recursive sound.

So, the Recursion Index has three such stages. The first two stages always work as a pair; audio is fed into the first, and the output of the first stage then passes to the second. After the second stage is a feedback control that allows the audio to: pass to the third stage (where it is subsequently fed back into the first stage), bypass the third stage entirely and feed back into the first stage, or some mix of the two, both feeding back to the first stage and passing through to the third stage.

At either end of the signal path are some effects to add character to the sound. At the input is an aliaser, to downsample the audio and create some interesting harmonic and inharmonic distortion. After the wet/dry mix for the looper/delay section is a reverb lite (so, this affects that mixed output; using the reverb lite section will add reverb to your dry signal as well). I would like to do a variation of this patch sometime where the affected signal path is summed to mono, and that CPU is spent on some more feedback paths and some filtering (as pitch ascends it can be… unideal; as it descends it can get quite rumbly), but in my first go, I wanted to stick with a stereo audio path. (But TBH, as soon as you start messing with pitch/speed, a lot of stereo imagery gets smashed under the heel of time compression/expansion.)

The signal path is stereo throughout.

A special thanks to my patrons on Patreon for their support: Rob Flax, Stepan Grammatik, brockstar, Mats Unnerholm, D Sing, Will Scott, drew batchelor, Miguel, Steve Bragg, Joab Eastley, Tomi Kokki, Mitch Lantz, Ben Norland, Daniel Morris, Roman Jakobej, Mark Crosbie, Steve Codling, Timothy Cleary, Soren Made, Ken Luke, Mike Ryan, Vilis Klavins, Nick, Eric Peterson, Joseph August, Jonathan Carp, and Liam Britten!

If you would like to support my work on ZOIA, please visit



Left footswitch, momentary — tap tempo (also receives MIDI clock; if MIDI clock is present, it will override tap tempo); I originally included a clock divider, but in the interest of stability–CPU fluctuates quite a lot with 12 loopers–I removed it

A pixel will light in time with the tempo

Front page:

General patch controls:

Aliaser frequency — determines the frequency of the aliaser; if you do not want to use the effect, set to maximum (24k); does not effect dry signal

Mix — wet/dry mix for the dry/looped voices (pre-reverb mix)

Reverb decay — the decay for the reverb

Reverb mix — mix for the reverb; will affect dry signal

Feedback — sets the feedback for the looper stages; when set to 0, only the first looper voice will be heard; when set to 1, the loopers will loop continuously and overdub new signals, but gains gets out of hand pretty quickly with changing pitches; max feedback with caution

Stage-specific controls:

Pitch 1, 2, 3 — sets the speed/pitch for each stage; I really should stress “speed,” too as the effect of speeding the audio up and down is that various speeds will lop off part of the original input audio when that audio passes from stage to stage and is fed back–as audio passes through the patch, it tends to take a more pitched rhythmic quality than one which accurately reproduces the input

The pitch controls are unattenuated -1 to 1 value modules; as such, pitch must be input in terms of CV (for the time being; subsequent firmware will likely make it possible to toggle the -1 to 1 value module into quantized note outputs, but at the moment this is reserved for the 0 to 1 value module).

If you are not familiar with the CV to pitch relationships in ZOIA, a few I would recommend:
.042 — a fourth up (and -.042, a fourth down, e.g. for transposing down in pitch)
.058 — a fifth
.1 — an octave
.158 — an octave and a fifth up (e.g. for combining)

Other pitches are interesting, but as they propagate through the feedback network are more prone to… inharmonic iterations; subtle pitch changes (e.g. .001) add a detuning that becomes magnified with each cycle, giving a slightly ascending or descending quality, which can be cool

Reverse 1, 2, 3 (pushbuttons) — when on, that stage reversed the audio it records

There is one stage-specific control that only affects one stage, called “looper 2 fdbk” — it determines whether the output of the second stage is fed back into the first stage (0) or passes to the third stage (1) or its output is some mix of the two destinations; when at 0, the third stage will not be heard (as no audio is fed into it)

  • Platform:
  • Category: Effect
  • Revision: 1.0
  • License: Creative Commons Attribution Share Alike 4.0
  • Views: 731
  • Modified: 2 months ago
Chat about this patch on Discord! Download (219)
Appreciate 7
3 comments on “Recursion Index — a recursive looper/delay
  • tomikoo on said:

    This sounds really good, and an excellent explanation/breakdown once again. Thanks for that. :)

  • Leave a Reply