analysis-driven live audio processing

Sway for monome norns is a single-channel version of the SuperCollider-based live processing system I use in live performance with my computer and a multi-channel audio interface. It is an interactive music system inspired by systems like George Lewis’s Voyager and Pauline Oliveros’s Expanded Instrument System. I was looking for a way to create a live processing system by only playing my instrument and not having to worry about the specifics of the processing within performance. Audio analysis controls the moment-to-moment parameters of each type of processing as well as which processing is currently happening. Processing types are assigned to a grid corresponding to density, pitch clarity, and amplitude. Play in different ways (noise/pitch, fast/slow, loud/soft) to get the system to change the processing.


audio input into left channel (1) of norns (mono input only)


E1: master volume
K2: switch between grid screen and analysis screen


  1. Plug an instrument or microphone into input 1 (L) on monome norns
  2. Plug in headphones or connect output 1, 2 or both to external speaker(s)
  3. Start Sway script


  1. The system responds based on three parameters, amplitude, density, and pitch clarity. Your current position in the processing grid is represented by the moving dot. If your density increases then your position on the y-axis will increase and vice versa. If you play highly pitched material (versus non-pitched sounds), the x-axis will increase and vice versa. If you stop playing then the dot will gradually return to the center.
  2. In order to change how the system responds based on your individual playing, you must adjust the thresholds for each analysis parameter. These can be found within the parameters menu.
  3. Press key 2 to bring up the analysis screen, this tells you what the current averaged analysis values are. Play in a certain way and see what values come up. You can then adjust the thresholds within the parameters menu to better reflect how you play and what your instrument does.


  1. To experiment with just the processing types, go to the parameters menu
  2. Turn analysis off
  3. Change the processing_type to hear the different options
  4. Turn polarity on and off and listen to how the different processing types respond differently


  • add additional processing types
  • document how individuals can add their own processing
  • rewrite the whole system so that more of the control side of the system runs on the lua end instead of the SuperCollider end


v1.0.0 - Download zip
Github - https://github.com/carltesta/sway
More Info - http://sway.carltesta.net

Installation Options


  • To install via SFTP, click the download link above, unzip the folder, change the name of the folder from “sway-master” to “sway”
  • follow this guide to SFTP into norns via cyberduck (or another program)
  • upload the “sway” folder to the dust/code folder
  • reset the audio system using the norns menu by going to SYSTEM -> RESET
  • navigate back to the SELECT menu and choose SWAY


  • To install using GIT first connect your norns to a wifi network with internet connectivity
  • make a note of the IP address of your norns by pressing button 2 on the Select screen i.e. or some variant
  • SSH into norns (on mac terminal type: ssh we@ and the login using the username: we and password:sleep
  • once logged in, type cd dust/code and press enter
  • then type git clone https://github.com/carltesta/sway and press enter
  • reset the audio system using the norns menu by going to SYSTEM -> RESET
  • navigate back to the SELECT menu and choose SWAY
  • when using git you can check for updates by following the same ssh procedure above and navigating to the dust/code/sway folder and typing git status. If there are changes you can type git pull to update and then reset the audio system before starting the script so that the changes take effect

Hi, this is really really cool. Does this code exist as just vanilla sc code somewhere? That is, as something (maybe finickly) usable for non-norns users?

Just curious! Certainly will be attempting to make it work for me if not.

This is just very inspiring, or like something I always wanted but never had the right set of ideas.

1 Like

Yes there is but not publicly available yet. I do plan on making a Mac standalone version that automatically runs the SuperCollider code. I need to work on the GUI for that. The norns lua stuff made that part easy :slight_smile:


Some examples of Sway in action…


Absolutely LOVING this script. It’s exactly the kind of sonic terrain I can put to full use in improvising. Thanks @carltesta

1 Like

So glad to hear that! I’d love to hear anything you make with it.

1 Like

Very cool, Carl! I have a Norns en route and look forward to messing with this!

1 Like

Thanks! I look forward to hearing what you make with it!

1 Like

@carltesta – this script is amazing. Cheers!



@CharlieGilb, thank you! This is truly beautiful. I was initially hesitant to share Sway because it was more like a personal musical composition than a general musical tool. But to hear these creations out in the world is very special. It’s almost like this script is inspiring music I want to hear. Thanks for sharing!


Releasing is definitely the right decision. Also if you have not yet read Jennie Gottschalk’s Experimental Music since 1970 there’s a section about instrument makers as composers. I feel this concept applies to things like Sway.


I’m expecting a crow next week and plan to integrate it into the Sway patch for norns. Do folks have any ideas on how it should be integrated? My initial thoughts include the following options:

  • CV outs for averaged analysis data (clarity, density, amplitude)
  • CV outs for x,y position on grid
  • CV trigger out when position moves into a new quadrant

anything else?


Let’s see, you get 4 outs so I’d probably go with something like:

  1. x position
  2. y position
  3. bonus thing, something special?
  4. Proximity to Center (as an absolute value)

I think if I had those I could wire up 4 different effects patches and crossfade them accordingly.

I also think your initial thoughts are great too.

These are great! I was thinking I could also put them in the parameters menu and then folks could choose what data goes to what output.


20 characters of brilliant solution. :slight_smile:

Also, kinda wanna map an Arc to those 4 parameters…


Could you explain that a bit more? You want to see the values of the parameters on the Arc’s leds? Or somehow control those parameters via Arc?

Personally, I will probably work on modifying the script to allow the Arc to actually override/change the parameters (mostlyjust X and Y axis values).

I understand that is probably counter to the original purpose of Sway, but for me, adding that level of control while still having the cycling fx on each axis could make for a compelling compositional tool.


Ah yes, of course. That makes a lot of sense. It’d be great if you could pull request your changes when you do as I don’t have an Arc and wouldn’t be able to test it out.

1 Like

Arcify makes adding Arc control over parameters super easy. It’s only a matter of a handful of lines of code.