Welcome

Welcome to the Strudel documentation pages! You’ve come to the right place if you want to learn how to make music with code.

What is Strudel?

With Strudel, you can expressively write dynamic music pieces.
It is an official port of the Tidal Cycles pattern language to JavaScript.
You don’t need to know JavaScript or Tidal Cycles to make music with Strudel. This interactive tutorial will guide you through the basics of Strudel.
The best place to actually make music with Strudel is the Strudel REPL

What can you do with Strudel?

  • live code music: make music with code in real time
  • algorithmic composition: compose music using tidal’s unique approach to pattern manipulation
  • teaching: focussing on a low barrier of entry, Strudel is a good fit for teaching music and code at the same time.
  • integrate into your existing music setup: either via MIDI or OSC, you can use Strudel as a really flexible sequencer

Example

Here is an example of how strudel can sound:

stack(
  // drums
  s("bd,[~ <sd!3 sd(3,4,2)>],hh*8")
  .speed(perlin.range(.8,.9)), // random sample speed variation
  // bassline
  "<a1 b1*2 a1(3,8) e2>" 
  .off(1/8,x=>x.add(12).degradeBy(.5)) // random octave jumps
  .add(perlin.range(0,.5)) // random pitch variation
  .superimpose(add(.05)) // add second, slightly detuned voice
  .note() // wrap in "note"
  .decay(.15).sustain(0) // make each note of equal length
  .s('sawtooth') // waveform
  .gain(.4) // turn down
  .cutoff(sine.slow(7).range(300,5000)), // automate cutoff
  // chords
  "<Am7!3 <Em7 E7b13 Em7 Ebm7b5>>".voicings('lefthand') 
  .superimpose(x=>x.add(.04)) // add second, slightly detuned voice
  .add(perlin.range(0,.5)) // random pitch variation
  .note() // wrap in "note"
  .s('sawtooth') // waveform
  .gain(.16) // turn down
  .cutoff(500) // fixed cutoff
  .attack(1) // slowly fade in
)
.slow(3/2)

To hear more, go to the Strudel REPL and press shuffle to hear a random example pattern.

Getting Started

The best way to start learning Strudel is the workshop. If you’re ready to dive in, let’s start with your first sounds