project name: rpls
project url: https://github.com/andr-ew/rpls/releases/download/latest/complete-source-code.zip
author: andrew
description: varispeed multitap echo
discussion url: https://llllllll.co/t/rpls/
documentation url: https://github.com/andr-ew/rpls
tags: delay looper


rpls screen animated gif. a triangle rotates on a black screen with dots represending tapeheads running across each edge of the triangle. the rpls main UI components surround the triangle, params: clk, vol1, vol2. blue background with random text around the sides

varispeed multitap echo. 3 taps (1 recording, 2 playing) cycle through 3 buffers. alter the rate of each playback tap independently from the record tap to create sliced rhythmic & harmonic counterpoint from the input signal in real-time, free from tape head collisions & audible clicks.

a spiritual successor to alliterate.




install from the maiden catalog


in the maiden REPL, type:

;install https://github.com/andr-ew/rpls/releases/download/latest/complete-source-code.zip

patch notes

watch the video

read the complete patch notes

norns UI


the triangle at the center of the rpls script. 3 dots on the edges are labelled 'rec head', 'play head 1', 'play head 2'. the rotating edges of the triangle are labelled 'buffers'. K2 & K3 are labelled

the rotating triangle in the center of the screen illustrates the tape process powering rpls. each side of the triangle represents a buffer. one side (dimly lit) is always having audio written to it by the record head. after writing to one side, the rec head cycles to the next one. at the same time, the two playheads are playing back the recorded material from the other two sides of the triangle, cycing behind the rec head.

since the play heads never cross over the record head in the same buffer, they can play back recently recorded material at any speed & pitch without causing clicks.

page C

page C of rpls, E1-3 are labelled

the clock mult param offers different windows into rpls depending on its use:

range use case
low values, < 1 pseudo-granular textures
mid values, 1 - 2 chopped delay
whole number values (1.0, 2.0…) syced rhythmic delay
large values, > 2 chopped tape loops

page R

page R of rpls, E1-3 are labelled

rates simultaneously set the tempo multiple, pitch transposition, & direction of playback for the tape heads’ repsective buffer slices. the actual playback rate of a playhead will always depend on the ratio between that play head & the record head.

assuming rate r = 1, the following rhythmic & harmonic relationships are available:

playback rate pitch transposition clock multiple/division
+- 1/2 -1 octave 0.5x
+- 1 unison 1x
+- 2 +1 octave 2x
+- 3 +1 octave + 5th 3x
+- 4 +2 octaves 4x
+- 5 +2 octaves + maj3rd 5x
+- 6 +2 octaves + 5th 6x

with rate > 1, many more relationships are available, including common just-intonnation harmonies & polyrhythms:

playback rate record rate pitch transposition polyrhythm
+- 3 2 + 5th 3:2
+- 4 3 + 4th 4:3
+- 2 3 - 4th 2:3
+- 5 4 + maj 3rd 5:4
+- 3 4 - 5th 3:4
+- 6 5 + min 3rd 6:5
+- 4 5 - min 3rd 4:5

((pls let me know if I got any of this wrong, music is hard))

note that the range of rate 1 on the negative side has been reduced to prevent collisions with the adjacent record head.

page >

page > of rpls, E1-3 are labelled

the rec > rec feedback path resembles the decay control of a typical delay. increase to add echo tails or overdubs. there’s also a ping-pong effect at play, mirroring the stereo field on each pass.

feedback paths involving the play heads lead to continuously transposed overdubs at the respective rate ratio. a rhythmic/harmonic shepard tone !

IMPORTANT: be careful with high values on multiple feedback paths - if all three feedback values add up to be greater than 1.0, volume will quickly grow out of control.

page F

page F of rpls, E1-3 are labelled

IMPORTANT: be careful with high resonnace values - the highpass filter feeds back into the record head, so the input filter can easily self-oscillate & create loud sounds

additional params

a few more params can be accessed exclusively in the params menu: