Learning music with Strudel
525 points - 11/26/2025
SourceComments
It came out of the same team as Tidal Cycles, a Haskell live-coding music tool which was first released around 2009. https://tidalcycles.org/docs/around_tidal/tidal_history/
EDIT: fixed link to not have trailing semicolon.
Coding Trance Music from Scratch (Again) [video]: https://www.youtube.com/watch?v=iu5rnQkfO6M
It´s a well done programming and music performance
Here's the fork on GitHub: https://github.com/VibesDIY/strudel
Here's a preview of what it would look like when merged: https://strudel.use-vibes.com/
Here he is playing around with the preview: https://www.youtube.com/watch?v=0oJhnkWDafM
> How to Synthesize a House Loop[0]
[0]: https://loopmaster.xyz/tutorials/how-to-synthesize-a-house-l...
Step 1: https://strudel.cc/workshop/getting-started/ . Click play on coastline" @by eddyflux
Step 2: Listen for a while
Step 3: setcps(.75) -> setcps(1.5)
Step 4: Listen :)
That is the extent of my strudel knowledge, but damn this is cool.
Quite possibly one of the most interesting things is just how competent the REPL is. It does some things that no other programming environment does in a prompt, all centered around real-time processing:
- All code in the prompt is being constantly evaluated - What parts of expressions are currently in use are highlighted - Visualization widgets sit side-by-side with the code
That last one is playfully rendered as pseudo-TUI "graphics", but is also presented with no borders or chrome around it. That's in sharp contrast to notebooks like Jypyter or Mathematica. They use minimal screen real-estate which also minimizes scrolling. If you look at videos of using this live, the ability to navigate the REPL quickly is crucial for performances.
So it's a lot like a kind of step-wise debugger, only more minimalist and moving at the (slow) speed of the music.
Ever since seeing Strudel, I've wondered what various programming sandboxes would be like if they could visually demonstrate operations in slow-motion.
DJ_Dave live events are the best illustration for all of it. If you love electronic music, ever touched any generative art, and know basic coding this is for you.
Strudel docs leave something to be desired as well.
What I've found to be the most useful so far is to ask an LLM to make a line of whatever: a beat, a synth, etc., tweak it, then layer it.
It gives a really good sense of how to architect a song file, which is missing from the little snippets in the strudel docs
<pre> const SCALE = 'C#:minor' const CPM = 56 const SOUND = 'piano'
$: arrange( [4, n("<-7, 0>.25")], [4, n("<-8, -1>.25")],
[2, n("<-9, -2>*.5")],
[2, n("<-11, -4>*.5")],
[4, n("<-10, -3>*.5")],
[4, n("<0, -3, -7>*.25")],
[4, n("<-1#, -3, -8#>*.25")],
[2, n("<-2, -9>*.5")],
[2, n("<-6, -13>*.5")],
[4, n("<-3, -10>*.5")],
[4, n("<0, -7>*.25")],
).sound(SOUND)
.scale(SCALE)
.cpm(CPM);$: arrange( [8, n("4 7 9")],
[2, n("5 7 9")],
[2, n("5 8b 10")],
[1, n("4*.1 6# 10")],
[1, n("4 7 9")],
[1, n("4 7 8")],
[1, n("3 6# 8")],
[1, n("0 2 5")],
[2, n("2 7 9")],
[1, n("2 7 9, 11 - - 11")],
[1, n("2 8 10, 11 -")],
[2, n("2 8 10")],
[1, n("2 8 10, 11 - - 11")],
[1, n("2 7 9, 11 -")],
[1, n("2 7 9")],
[1, n("1 7 10, 12 - -")],
[1, n("1 7 10")],
[1, n("2 4 9, 11 - -")],
[1, n("2 4 9")],
[1, n("3 4 8, 10 - -")],
[1, n("3 4 8, 13 - -")],
[1, n("2 4 9, 9 -")],
[3, n("2 4 9")],
).sound(SOUND)
.scale(SCALE)
.cpm(CPM);</pre>
note("c4 e4 g4 c5").sound("triangle")
But this is way too taxing for my linux boxes that are ending stuttering quite badly sometimes. Are you all using macs or something?
https://strudel.cc/#CnNldGNwbSg3Mi8yKQoKbGV0IGJhc3MgPSBub3Rl...
That's not really a point against it, it's a great tool and it's a ton of fun, but I wish there was a way to use it that at least kind of sort of mapped back to traditional music notation, especially rhythm notation.
A nitpick: Isn't the below statement wrong? I thought "RolandTR909" was the name of the soundbank which is used for both bd and sd?
"bd is bass drum (also called kick-drums), sd is snare drum. RolandTR909 is the name of the sound."
This resource is very helpful