toward the end of 2021, we published rude mechanicals | monome/docs with generous guidance and support from @sixolet, @Dewb, @infinitedigits and @zebra. it built off of our own enthusiasm for the wonderful introductory workshops (on synthesis and working with samples) Zack led on SuperCollider and norns earlier in the year – to see so many artists digging into SuperCollider was deeply inspiring. it also highlighted a gap in our own studies for norns-centric SuperCollider play.
rude mechanicals outlined starting points for engine development on norns, using SuperCollider, by walking artists through each step in the process of coding their own Juno-inspired synth voice called Moonshine. the study starts with simple code execution in SuperCollider, outlining how to build a SynthDef with an envelope, filter, and control over noise level. the study then migrates the SuperCollider code to norns using an engine boilerplate and a few useful concepts:
- using a SuperCollider
Dictionaryto hold parameters
- leveraging SuperCollider’s built-in functions like
.keysDoto establish norns-specific commands
- building a Lua file to bundle with your engine, to easily integrate it into another script
to reduce complexity at the start of the learning journey, the first study’s Moonshine synth polled our parameter values as a voice was triggered – this meant that changes to the level parameter, for example, wouldn’t be articulated on an already-playing voice, but would serve as the starting point for the next note event. and while the engine was technically polyphonic, this was more a virtue of not establishing any specific way to handle individual voices.
the skilled labor study iterates the Moonshine synth from rude mechanicals into 8 independent voices, each with their own parameters (where changes take audible effect in realtime), and new controls (eg. toggle on/off the filter envelope).
this second study aims to build on the artist-developer’s understanding of SuperCollider’s relationship to norns scripting by modeling how to:
- break SuperCollider files into separate class and CroneEngine files, so your SuperCollider code can run on a non-norns computer
- use Groups in SuperCollider to manage realtime parameter changes to a playing voice
- approach polyphony and voice distribution in SuperCollider
- structure a flexible template for populating Lua parameters
- glue it all together into a sequins-powered norns script
this thread is a welcome space for questions about this new branch of the norns studies, experiments with the code, extensions on the concepts, and collaboration on the exercises at the end of each study. we have a third study already in the works (focused on using Busses to build FX chains / aux sends), but please share what you’re curious about seeing covered next!