digital tape loops x 6.


i call this script “oooooo” because it is composed of six loops. they are like digital tape loops - you can level, pan, speed, slow, shorten, lengthen, dub, overdub any loop at any time.

i was inspired to make this after seeing tape loops circulating (pun sorta intended) all over the place. i like the idea of having multiple independent different loops, with different sizes, played on a different tape players with different eccentricities. i don’t have any cassette tapes but i have norns so i wrote this script to try to make digital tape loops.

future directions:

  • arc support (need help)
  • crow support (need help)
  • fix all the :bug::bug::bug:


  • audio input
  • norns
  • grid (optional)


  • E1 selects loops
  • E2 changes mode/parameter

in tape mode:

  • K2 stops
  • K2 again resets
  • K3 plays
  • K1+K2 clears
  • K1+K2 again resets
  • K1+K3 primes recording
  • K1+K3 again records

in other modes:

  • K2 or K3 activates or lfos
  • E3 adjusts parameter

all parameters are available via the global menu.


  • in tape mode, press K2 to stop/goto 0, and press K3 to start playing (once recorded).
  • in tape mode, press K1+K3 to prime recording. when primed, recording will automatically begin when incoming audio rises above a threshold. the recording threshold can be set by global parameter “recording -> rec thresh”.
  • in tape mode, you can force recording by hitting K1+K3 a second time.
  • recording stops after traversing the whole loop. you can stop it earlier with K2 or K3 (in tape mode) and that will shrink the loop to that point. you can set recording to continue to the next loop by setting the global parameter “recording -> rec thru loops” to yes.
  • by default, volume in “pinched” when starting/stopping recording to avoid pops from discontinuous signals. you can lower/raise the pinching by adjusting the global parameter “vol pinch”.
  • to record a loop over and over, infinitely, change recording -> stop rec after to its max value.

quick menu:

  • E2 changes mode/parameter on the quick menu
  • each parameter can be activated by K2 or K3 (activated lfo), and it can modified by E3
  • you can adjust the rate in continuous or discrete (±25%, ±50%, etc.) by changing the global parameter “continuous rate
  • the “warble” mode allows you to temporarily pitch up/down the current loop using E3

A loop:

  • “A” loop can control all loops. the tape mode works as before, but affects all loops.
  • the quick menu differs from loops but is also activated by K2 or K3, and modulated with E3


  • in startup menu you can load loops on startup, play loops on startup, start loops with random lfos and change the length of the starting loops (in beats). note: these settings persist next time you open oooooo!
  • in recording menu you can change pre/rec levels, recording threshold for primed recordings, the volume pinchoff, whether to record through loops, and how many times to loop over before stopping recording. note:_ these settings persist next time you open oooooo!
  • in all loops you can pause all lfos, set loop destruction (which slowly degrades loops), ramp volume up/down, randomize loops on reset, change the reset per loop
  • in loop X menu you can modify all lfos, and several other parameters of each loop.

oooooo ideas:

  • audibly ambient: record to each loop and then move them around the screen. video example
  • lucid looper: instead of overdubbing one loop, record six separate loops of the same size that have their own stereo field. change startup -> start length to 16 beats and startup -> start lfos random to yes. then change recording -> rec thru loops to yes and make sure recording -> stop rec after is 1. then reload oooooo, and record. video example
  • dangerous delay: tape delay with six tapes, that shapeshift. in recording menu set pre level and rec level to 0.5. set stop rec after to max. go to A loop. turn E2 to rand lfo and activate with K2. turn E2 to tape and press K1+K3 to record on all loops forever, making a stereo-field delay. (make it crazier by changing all loops -> randomize on reset to yes and all loops -> reset all every to X beats). video example

grid docs:

(thank you @tyleretters for this absolutely amazingly useful grid doc tool!)


from maiden type


From description this is so awesome!
Is it in maiden yet?
What is max length of the loop?

1 Like

i’ve sent a request to merge it into maiden. until then you probably need to get it using a terminal:

> ssh we@norns.local (or we@address norns says)
> cd dust/code
> git clone

the max length of the loop is ~80 seconds. however i haven’t programmed the ui to accomodate loops that big - they will go off screen but you can still use them :wink:


ooooooh wow. this is the coolest ui i’ve seen in a while.


WOW !!! just wow :wink: thanks for sharing :heart_eyes:
“prime” mode dont start the record but audio incoming. is there a peak for that signal or something i can adjust?

1 Like

the threshold for recording is hard coded atm but I’ll update it soon to make it adjustable.

1 Like

Oh wowowowow thank you so much for sharing this!

1 Like

cool name and a great design :raised_hands:
Beautiful work!


easy add! its in there now, just added into v0.2.

it is now!

if anyone else has ideas or finds :beetle::beetle::beetle: please don’t hesitate to hmu


nice thanks a lot! i ll try !

1 Like

suuuuuuuper! loving the UI and the idea behind the script. now to pry some free time from life to play around…


having a lot of fun with this! I was going to ask about adding a reverse function until I figured out that rate goes negative.

I could not figure out how to save audio/tapes between power cycles. is this possible within the script?

1 Like

zack!! you’re on a roll! this is fantastic, thank you for sharing your scripts and for bringing such a unique voice to the library :sparkles:


@Gexex here’s the konami code for saving:

turn E1 so that you see “A” in the top left.* then turn E2 and you should see “save”, “load” and “tempo 120”. turn E2 to “save”. then hold K1 and press K3 to save. loading is similar, just turn E2 to “load”.

there is currently only one “tape” that gets overwritten if you don’t back it up. will look into adding selectable tapes in the params menu.

*note: you can’t turn E1 to “A” if recording is primed/active.

@dan_derks i want to mirror gratitude to you for fostering this inspiring community! i’ve found so much art and inspiration from everyone. honestly, scripting on the norns is a joy. i feel like it is a near-frictionless path toward manifesting creative musical thoughts as i chase the inspiration.


Thanks! It was the “hold K1” part I was missing.

1 Like

great! gonna check this out soon. nice one!


This is fantastic! It’s the sort of thing I got a Norns for - so much fun and deeply involving.


updated to v0.3:

  • slightly better ui
  • there are multiple “tapes” for saving and loading.

also here’s another “oooooo” composition:


Just saw your post on Instagram. Can’t wait for the MIDI mapping!


is it possible to start/ stop the samples in sync for example the op-z? maybe the script can triggered by the transport buttons of the opz?

1 Like