assemble a song from TAPE.


The purpose of waver is to give Norns the capability of a basic DAW, inspired by the OP-1’s tape and powered by softcut. There are four mono tracks which can be panned individually. The tape has a length of 5 minutes. There are two views: song and track. In song view, all four tracks are visible and audible. This view is for previewing, navigating and planning. In track view, a preselected track and a “scratch work” track are visible and audible, allowing you to stage changes to the given track. More about track and song view in the documentation below.

I’m very grateful to @tyleretters, @license, @zebra, @jaseknighter, @infinitedigits and the rest of the Norns study group for beta-testing, rubber-ducking, proofreading and encouragement. Also thanks to @tyleretters for the graphics library and @zebra for encouraging my small contribution to softcut.


norns 210927 or newer


In waver’s song and track views, a small ‘minimap’ appears at the top of the screen, showing the portion of the tape currently in the window, the loop markers, and the playhead. Below this are barline markers, which are numbered, and (provided sufficient zoom), beats, which are unnumbered. These are only a visual aid: waver currently has no warping or repitching, so changing the tempo in PARAMS will not affect the position or pitch of audio currently on the tape. Below this are the relevant tracks for the mode, in song view, all four tracks are visible. In track view only the currently active track and the “scratch work” track are visible. Depending on your settings, this part of the screen will contain one or more of the loop markers and possibly the playhead.

The following apply to both song and track views.


  • E1 scrolls the portion of the window in view.
  • E2 zooms in and out
  • E3 chooses the active track


  • K1 + E1 moves the playhead
  • K1 + E2 moves the loop start marker
  • K1 + E3 moves the loop end marker
  • K2 toggles playback
  • K3 toggles looping

Song View

  • long K1 saves track
  • K1 + K3 enters track view
  • K1 + K2 is “undo”: it returns to track view of the last active track with the last set of changes offloaded to the “scratch work” track. NB: there is only one level of undo, no undo history, and entering track view with K1 + K3 will destroy it.

Track View

  • long K1 loads sample into scratch track
  • long K2 cuts loaded sample between the loop markers, discarding the rest
  • long K3 pastes what was cut earlier at the playhead
  • K2 + E2 adjusts the level of the currently selected track (use E3 to switch between the tape’s track and the “scratch work” track)
  • K2 + E3 adjusts the panning of both tracks
  • K1 + K3 commits the current changes, mixing the “scratch work” track together with the tape’s track and exits to song view.
  • K1 + K2 discards the current changes and exits to song view
  • K1 + K2 + K3 (release K3 first) arms recording. The “TRACK” display will turn to “REC” while recording is armed.


Currently: catch bugs and solicit feedback. Improve video demo?

  • live input
  • break out params
  • improve softcut handling to avoid audio glitches

known bug: under some circumstances, scrolling the playhead while playback is stopped will be ignored; the playhead appears to “jump” back to where it was when playback is resumed.


v0.2.5 – Install with

;install https://github.com/ryleelyman/waver

GitHub link


This is absolutely bananas. I was grinning the whole video. :clap:


This looks incredible! Can’t wait to check it out.

1 Like

i saw something on discord abt this

super inspirational how you’ve built this idea into reality


awesome concept, so excited to try it!


20 characters of So cool :sunglasses:

1 Like

:raised_hands: :raised_hands: :raised_hands:

this is great! wowee, thank you for bringing it to life <3


WHAT. lol all these options…making my head spin, I’m bookmarking them so I can check them out when I have enough time to dig into them - probably in 30 years when I’m retired!


Thank you very much for creating this script <3 The OP-1 4-track changed my music life and is so good to have something akin now in Norns. Can´t wait to explore it and start composing.

There´s a mute function?


there isn’t a “mute-this-track” feature… maybe there should be. To “mute” a track currently you’d turn its volume all the way to zero by navigating to its track view, and then using K2 + E2 turn its volume all the way down, then exit back to song view using K1+E2.

I’m thinking of exposing mute, volume and pan as params, with the only catch being that after you adjust them, the track has to be “recompiled” by reading in files from disk, so if you do that while the track is playing, you end up getting a second or two of wonky sounds (unless I’m smarter about managing softcut… now there’s a possibility…)


a point of clarification

does waver only work with tape files? i know there are other apps but is there live input/overdub?

i could really see myself finishing songs on norns if that’s the case


Thanks a lot, @alanza ! Indeed, the way that you did the Track/Volume/Pan lower bar is very elegant and functional!

If it´s technically possible to do a mute would be great for more performance oriented tricks (like the ones in the OP-1) but isn´t essential.

I´ve found some ocasional sound glitches (sometimes with a panning) when I move the playhead and start the sound again (even if the sound is stopped). This glitch can be in the track start (more ocasional) and/or end.

The Song Mode/Track mode is inconstant here: sometimes I can´t enter into track mode and sometimes I get stuck in the Track. When I´m stuck sometimes I can´t play the track too - and when I play, the playhead animation isn´t moving.

I´m testing with only one track, in a Norns OG unit. I reinstalled waver and those bugs are persistant. I will try it in a Norns Shield. If you want, I can record my use too.


ahha these are those glitches we were hunting… (@alanza i’m sorry i haven’t actually got around to attempting a debug session with the waver code itself.)

i did push a couple fixes for the behavior of softcut when the playhead is moved while stopped and then restarted. they barely did not make it into 2.6.0 update. but you could try pulling and building main if you are interested.

relevant changes:


currently it only works with tape files. I’ll add live input to the roadmap!


Thank you!! This is amazing.


Wonderful thank you!


a huge congratulations on your first script! this is beautiful work.


Version 0.2

I broke out params for track level, pan and mute. Please note: adjusting these params requires a “recompile” of the track. For this reason, there is some latency (about one full second) between when you adjust the param and when you hear the adjustment take effect. Muting should take effect a little faster, but still not super quickly.

Also added a loading screen. While loading is active, waver will not respond to buttons or key presses (except K1 to go to menu, of course). Fortunately loading is pretty quick.

Otherwise mostly some behind-the-scenes work to wrangle softcut a little bit more gracefully. Expect further improvements to come, but first, live input is up next.


Version 0.2.5: LIVE INPUT

waver now supports live input. To record, go to track view for the track you’d like to record into. Press K1 + K2 + K3 (release K3 first) to arm recording (think pressing the record button on a tape recorder—it’ll take effect immediately if playback is enabled, otherwise it will wait until you enable playback). While recording is armed, the “TRACK” indicator in the lower left will instead read “REC”. A waveform will not be displayed until you exit playback. The recorded audio can be post-processed with long K2 and long K3 like any other audio in the scratch track.

Ping @glia


i almost felt guilty asking so…accept my heartfelt gratitude for this update!

so impressed by your ingenuity and skill

off to test this out