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)

Drumset Image -- 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.

Exercise 1

Answer

Exercise 2

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

Exercise 3

Answer

Exercise 4

Answer

Exercise 3

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)

John Fielder credit

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.

Chopin
Answer

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

John Fielder credit

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