MoxSonic Workshop
Strudel Live Coding Environment
Well-known options for live coding
Here is a chart which compares some basic elements
Live-Coding Environment | Collaborative | Easy to Setup | Easy to Learn | Easy to Access Reference | Visual Feedback Highlighting Code | Fully Featured |
---|---|---|---|---|---|---|
SuperCollider | ⚠️ Not natively. | ❌and✅ SuperCollider is relatively easy to install, but you won't be live coding right out of the gate | ❌ (Steep learning curve, SuperCollider specific language and not singularly focused on live coding) | ⚠️ (Extensive but complex) | ❌ No visual feedback unless you code it yourself | Best |
TidalCycles | ❌ No | ❌ (Requires a good bit of work also requires SuperCollider and the SuperDirt quark) | ⚠️ (Moderate learning curve, Uses the Haskell language, which can be difficult) | ⚠️ (Good documentation, but you need to set things up for yourself by adding files to your editor.) | ❌ No visual feedback as far as I know | Best |
Estuary | ✅ Yes | ✅ (Web-based) | ✅ (Beginner-friendly, allows miniTidal which is a reduced subset of tidal) | ✅ (Built-in docs) | ❌ No visual feedback | Good |
Gibber | ✅ Yes (with gabber) | ✅ (Web-based) | ✅ (Beginner-friendly. Uses javascript. Not as streamlined as Strudel) | ✅ (Clear documentation) | ✅ Visual feedback with highlighting of code and more! | ✅ Good+. The library of possibilities is not quite a full as other programs. |
Strudel | ❌ No | ✅ (Web-based) | ✅ (Beginner-friendly. Uses javascript as an alternative to Haskell. Really simple) | ✅ (Clear documentation) | ✅ Visual feedback with highlighting of code and more! | Better (especially when paired with SuperDirt) |
Flok | ✅ Yes | ✅ (Web-based) | ✅ (Beginner-friendly. Can use Strudel within this collaborative environment) | ❌ (You have to know what you are doing. You won't get help from the interface) | ✅ Visual feedback with highlighting of code | Good |
Tempo and Rhythm in Strudel - Thinking in Cycles (Basic)
-- Image from strudel.cc
To begin, we need to provide two things: a function and a pattern. Below a function named "sound" is used. The function requires a pattern. Patterns are expressed in quotation marks or backticks (useful for writing patterns across multiple lines).
This indicates that the sound called bd should be called once a cycle, at the beginning of the cycle. Let's add another item to the pattern.
Now the cycle is split in two and the elements of the pattern bd and sd are played at those divisions. Let's experiment a bit with making rhythms with only this much information.
CLick the Strudel REPL Spiral below. Try chaining the "bank" function to end of sound .bank("RolandTR808"). See the side panel under sounds and then drum-machines.
We eventually find that we need to group elements together to create subdivisions of the cycle. Also, we see the syntax for a rest (either - or ~)
Notation | Function |
---|---|
[ ] |
Divides the cycle or subdivisions when nested
|
. |
Divides the cycle but cannot be nested
|
Let's take some time to try our hand at a few rhythmic exercises.
Answer
Answer
Tempo and Rhythm in Strudel - Thinking in Cycles (Intermediate)
Notation | Function |
---|---|
! |
Replicate a pattern or part of a pattern
|
@ |
Elongates a pattern or part of a pattern
|
< > |
Alternates cycles
|
{ } |
Indicates polymeter
|
Answer
Answer
Answer
Tempo and Rhythm in Strudel - Thinking in Cycles (Advanced)
Notation | Function |
---|---|
* |
Speed up a pattern or part of a pattern
|
/ |
Slow down a pattern or part of a pattern
|
Euclidian Rhythms
This link contains not only an explanation of how it works, but also examples of common euclydian patterns http://cgm.cs.mcgill.ca/~godfried/publications/banff.pdf
To put it briefly, the Euclidean rhythms take number of events to distribute across a number of pulses. Additionally, an offset parameter to say where in the pattern to begin doing this.
3 events across 8 pulses with an offset of 0 would result in the following:
X - - X - - X -
With an offset of 1, the pattern would look like this:
- X - - X - - X
Nested Tuplets
The following notation is taken from John Fielder's blog post on nested tuplets. (http://klangnewmusic.weebly.com/direct-sound/lets-talk-rhythm-part-2-nested-tuplets)
Patterning notes and chords
Notation | Function |
---|---|
note |
Play a note by name or MIDI note number
|
, |
Stack patterns together
|
scale |
Use a musical scale
|
Try to create a pattern that represents this measure of Chopin's Prelude Op. 28, No. 7.

Answer
Again from John Fielder's blog, this time with melody. This is much gnarlier in Strudel due to the shifting meter.

Working with longer samples
Notation | Function |
---|---|
fit |
fit a sample into a single cycle
|
/ |
Slow down a pattern or part of a pattern
|
This break beat, which is indicated to be at a tempo of 125 is in 4/4. The above cpm adds an extra beat to the cycle. We can make the break beat slow down to meet this tempo
We can make the break beat slow down to fit within x number of cycles
Let's slice the break into eight parts and play them back in order. This allows us to fit the breakbeat into the cycle without pitch shifting
Let's change the order in which the slices are played back
We can also use the splice function. This changes the playback speed of each slice according to its duration
The striate function allows us to lace together patterns. It cuts samples into x number of parts and then plays back portions in sequence.
Here we use the loop function in conjunction with loopBegin and loopEnd