[HN Gopher] Learning music with Strudel
___________________________________________________________________
Learning music with Strudel
Author : terryds
Score : 352 points
Date : 2025-11-26 00:09 UTC (6 days ago)
(HTM) web link (terryds.notion.site)
(TXT) w3m dump (terryds.notion.site)
| faxmeyourcode wrote:
| I've run across more and more strudel musicians (developers?)
| doing a kind of live coding performance art and posting clips on
| tiktok and reels. It's really entertaining to watch. I've been
| meaning to dabble in it.
| xdc0 wrote:
| It's fun to watch and somehow more approachable to me than a
| big program with lots of menus and virtual knobs.
| grantmuller wrote:
| Another live-coding environment that is quite nice (Haskell-
| based) is TidalCycles: https://tidalcycles.org
|
| I wrote a whole album of material about 10 years ago with it,
| just remastered/re-released it. It's a fun way to write music
| while on an airplane!
| lomase wrote:
| Strudel is TidalCycles but in javascript.
| cpill wrote:
| yeah, but TidalCycles doesn't have the interactive code
| that shows you what is playing or have inline sliders :P
| ashwindharne wrote:
| I went to a basement party/rave recently where the DJ was live-
| coding strudel, was incredibly cool to see in person. people
| would watch them type out new lines in anticipation of a beat
| drop
|
| Pretty cool to see this post, I had no idea where to find more
| info about it!
| ge96 wrote:
| Would be curious licensing on music you produce with it eg. can
| you use it, record the session then put it on YT no copyright.
| DigitalDopamine wrote:
| Loved playing with it! https://strudel.cc/?qVv8Cr0OD6cc
| xrd wrote:
| This is so incredible, musically, visually and didactically.
| Absolutely amazing. Absolutely amazing.
| josittas wrote:
| Very cool! Thank you for sharing :)
| lioeters wrote:
| That was a lovely experience.
| rodrigodlu wrote:
| Wow, I started learning recently, I didn't know you can change
| the theme.
|
| Also this music brings really good vibes!
|
| I get more motivated when I can see it working directly and
| change some code here and there!
|
| Thanks for sharing.
| mazswojejzony wrote:
| This is great! I'm not really into electro, but I really like
| this one!
| l0c0b0x wrote:
| Great work! I'm saving this one (I have it in a loop rn on my
| big screen).
| chrislo wrote:
| Love this! Patterning the theme is such a great idea.
| smrq wrote:
| That's absolutely sick. I love seeing a full arrangement like
| this as opposed to destructive live coding--that's cool too,
| but I don't really vibe with it as a workflow. Definitely
| taking some inspiration from this.
| mettamage wrote:
| Well that song was my digital dopamine for the day. Couldn't
| stop bobbing my head while in a busy train
| alabhyajindal wrote:
| Amazing! Though I can't get the theme to stop changing while
| the music is playing. Is there a setting I'm missing?
| yayitswei wrote:
| Looks like the theme changes are part of the arrangement (see
| lines 135-149).
| DigitalDopamine wrote:
| Set colors to false on line 133
| ubidefeo wrote:
| love how you change the style as it plays. the custom font is a
| nice touch :)
| dallen33 wrote:
| This is absolutely insane.
| WhyOhWhyQ wrote:
| Fantastic!
| butlike wrote:
| You made an entire performance. Good, good job
| squarefoot wrote:
| I found that annoying on the editor, but if used on a 2nd
| screen to build graphics programmatically (fractals, etc), or
| via an external port to drive RGB LEDs arrays or matrices,
| results could be spectacular. Imagine fractals driven by
| music or a giant spectrum analyzer made of LED strips.
| abhinavmir wrote:
| I shed an actual tear. I dreamed of days like this. I got
| close, building a small language for generating generic music,
| but with decay, sawtooth and stuff? It's a functional DAW.
| simonw wrote:
| That demo is excellent. You can uncomment some lines at the
| bottom and hit alt+enter (or click the Update button) to add
| visualization effects too.
| oceansky wrote:
| Not recommended for people prone to seizures
| globalnode wrote:
| That made me smile, well done and thanks Lennard! (do recommend
| setting colors = False though)
| jamesfmilne wrote:
| Bravo!
| raphar wrote:
| I posted this link, some days ago:
|
| Coding Trance Music from Scratch (Again) [video]:
| https://www.youtube.com/watch?v=iu5rnQkfO6M
|
| It's a well done programming and music performance
| a1ff00 wrote:
| +1 Switch Angels performances
| Jarmsy wrote:
| Increase the duck attack!
| l0c0b0x wrote:
| Yeah, thanks for both posts. I love the narration with the live
| coding (like a conversation with voice and code). If I can get
| to that level, I'll die a happy man.
| danvoell wrote:
| this is awesome. The only code instruction video instructions
| that I have watched that doubled as a song. At first I thought
| it was the Euro dance hall lyrics and then I realized it was
| actually the code instructions.
| rudolph9 wrote:
| Is this real library/editor/programming-language ?? I don't see
| anything on how it's made?
| knowaveragejoe wrote:
| Yes, it's Strudel.
|
| https://strudel.cc/
| raphar wrote:
| It is!
|
| She is using https://strudel.cc/
| mbStavola wrote:
| Every time I watch one of her performances, I smile when she
| says "... with the scope."
| illwrks wrote:
| This is an excellent example. It also highlights how if I tried
| this it would sound terrible as I lack have vocabulary to
| describe what I want, and how that relates to the code.
| i_gumby wrote:
| There's also a neovim plugin for those who want to play around
| with this locally https://github.com/gruvw/strudel.nvim ; it
| essentially launches strudel in a browser but synchronizes the
| strudel and nvim editors.
|
| EDIT: fixed link to not have trailing semicolon.
| semi-extrinsic wrote:
| Link has a trailing semicolon and doesn't work - but awesome to
| have nvim + strudel!
| Y_Y wrote:
| https://github.com/gruvw/strudel.nvim
|
| Now with no added punctuation!
| timojaask wrote:
| Fixed URL: https://github.com/gruvw/strudel.nvim
| rodrigodlu wrote:
| Is there a way (like a CSS rule or something similar) that when
| you look at the main strudel window, it only shows the piano
| rolls, punch cards, sliders, etc - but not the code?
|
| Maybe with just the comments? This would be killer, since I
| have dual displays, and on one I can just focus on the code,
| the other one can have all the visual stuff.
|
| I'm using this plugin, but having the code twice distracts me a
| lot (but I prefer the original neovim instead the integrated
| vim mode inside strudel).
|
| Thanks in advance!
| i_gumby wrote:
| I've only just started playing around with it, so I don't
| know enough about it unfortunately. You could open an issue
| against the repo; the plugin owner might be able to answer
| your question.
| ebertucc wrote:
| I'm not using the plugin, but this hides the code in the
| browser:
|
| .cm-line span { outline: none !important; color: transparent;
| background: transparent !important; }
| mclau153 wrote:
| A really great source for this is DJ Dave
| iamwil wrote:
| DJ Dave: https://www.youtube.com/shorts/5OYiOGxHxTQ
|
| She's using a live computational notebook as an instrument.
| chickensong wrote:
| <3 DJ_Dave!
| zitterbewegung wrote:
| Strudel is a great tool and is helping me to make EDM from
| scratch. There are good tutorials and music that is easy to get
| started or to make something really interesting.
| mberning wrote:
| Is there a way to run it completely locally?
| thuuuomas wrote:
| Yeah, it's on codeberg https://codeberg.org/uzu/strudel
| macmac wrote:
| I love this approach to learning music.
|
| 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."
| mvkel wrote:
| I was excited to see this, but then realized only chapter 1 is
| done out of what ultimately will/should be a 25 chapter tome.
|
| 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
| jarth9 wrote:
| Strudel is my favorite music coding environment. I mostly play on
| acoustic instruments but coding music has been really helpful as
| I try to learn music theory. Being able to just play in the
| browser without setup helps me focus on the music and less on
| fiddling with the tool. And it supports vim key bindings!
| ubidefeo wrote:
| I have submitted a talk for FOSDEM26 on Live Coding Music and
| Hardware with Strudel and MicroPython. Hope to get in :)
| rob74 wrote:
| This clip from an 80s spy comedy is probably too obscure to
| become a meme, but it deserves to be:
| https://clip.cafe/gotcha-1985/what-this-strudel/
| WhyOhWhyQ wrote:
| Let me introduce you to a good time.
|
| 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.
| a_t48 wrote:
| Sadly doesn't even run at all on safari. "Importing a module
| script failed." :(
| WhyOhWhyQ wrote:
| NOOOOOO!!!
| artimaeis wrote:
| Running fine here on Safari 26.1 (Tahoe 26.1).
| Towaway69 wrote:
| Also worked find on my Safari 18.6
|
| uBlock/uMatrix perhaps? At least that was for me the issue on
| Firefox.
| WhyOhWhyQ wrote:
| I was trying to make it automatically randomly choose between
| the normal speed and twice speed after a long time. I think
| appending
|
| .fast(chooseCycles(1, 2).slow(128))
|
| at the very end does it. But I'm not actually sure. Would a
| strudel user mind informing me how this is done? Also, I was
| hoping to make it automatically shift the key, but I couldn't
| figure it out.
| ubidefeo wrote:
| if you need a 4/4 clicker metronome I crafted this one :)
| https://strudel.cc/hNV6sevsZERY
| dfltr wrote:
| Strudel is dope and a ton of fun, but every single piece of its
| interface seems determined to confuse people who already know
| music theory and composition.
|
| 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.
| pierrec wrote:
| It would be unergonomic, if not painful, to use a western
| classical approach to rhythm in a programming environment. Alex
| McLean, the main author of Tidal/Strudel, is very much into
| Indian classical, and this is reflected in the approach to
| rhythm. IMO this is an good choice, and people who know music
| theory and composition should feel right at home, assuming
| we're talking about the right theory.
|
| When it comes to pitch (and I guess we agree on this) Strudel
| is firmly on the western traditional side. It generally assumes
| 12-tone equal temperament, uses ABC notation, has built-in
| facilities to express chords using their classical names...
|
| Meanwhile I'm over here programming music where I express all
| frequencies as fractions or monzos. I find this better suited
| to a music programming environment, but this might be more
| personal.
| wouterjanl wrote:
| Allow me to use this post to give big kudos to the maintainers of
| Strudel for having put together a brilliant set of official docs.
| I found them incredibly well put together and hence really useful
| to learn. I have played around with Strudel many evenings and I
| am always amazed about how intuitive Strudel is to create beats
| and sounds, to the point that I prefer to create music in Strudel
| over the established DAW software. I would love for there to be a
| good bridge between producing sounds and beats with Strudel code
| and structurering and mastering an entire track. This is missing
| in Strudel since it's clearly build for a live coding
| environment. Any tips from users about ways or tools to make this
| bridge are always welcome!
| stuhlmueller wrote:
| Here's a Strudel fork that uses LLMs to turn instructions like
| "add a bass layer" into code:
| https://github.com/stuhlmueller/strudel-llm
| simonw wrote:
| I've been seeing a few links to Strudel recently so I went
| digging to see how old the project is - looks like it launched in
| April 2022 https://loophole-letters.vercel.app/strudel
|
| 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/
| Sammi wrote:
| Such a good example of why everything is becoming js. Because
| it's where the users are. Anything that isn't in js will just
| languish comparatively.
|
| Everything is becoming js because everything is becoming js.
| tormeh wrote:
| Have you taken a look at how to install the Haskell variant?
| It's a full-on recipe, or a docker container. I'd take a
| desktop application over a website any day, but that was not
| on the menu. It was an SPA vs a devops exercise. Of course
| the SPA wins.
| Sammi wrote:
| Yes. The web wins on deployment every time.
| nightski wrote:
| Steam wins for games imho.
| hamasho wrote:
| Does anyone know if it's possible to run Strudel code on VS Code
| (or NeoVim)? Tidle Cycles has add-ons where I can play/stop
| updated code or part of code with ctrl(cmd)-. and
| ctrl(cmd)-space. I mean, one of Strudel strong point is the
| browser based rich visualization, but I just want to edit JS code
| with my favorite editor.
| blatant wrote:
| VSCode:
| https://marketplace.visualstudio.com/items?itemName=cmillsde...
|
| NeoVim: https://github.com/gruvw/strudel.nvim
| badmonster wrote:
| Live-coding music environments like Strudel are powerful because
| they externalize the creative process. When your composition is
| visible code, you can iterate faster, debug musical ideas, and
| even collaborate in ways traditional DAWs don't support. Code-as-
| instrument is genuinely innovative.
| luqtas wrote:
| > Code-as-instrument is genuinely innovative.
|
| but DAWs plugins and instruments are just like code but with an
| GUI interface to mess with. don't get me wrong, PureData
| freedom is astonishing but one can also go quite far with
| esoteric sequencers or modulation in DAWs found out there
|
| [0] https://100r.co/site/orca.html [1] https://stochas.org/ [2]
| https://cardinal.kx.studio/
| dprophecyguy wrote:
| made this with opus 4.5 few days ago:
|
| https://strudel.cc/#CnNldGNwbSg3Mi8yKQoKbGV0IGJhc3MgPSBub3Rl...
| rfl890 wrote:
| Did anyone else think this article was gonna teach you how to
| play music using strudel (the food) somehow?
| toboramai wrote:
| Besides Strudel, there's also http://glicol.org/. It seems Glicol
| is more geared towards sound synthesis, while Strudel's sequencer
| is more powerful.
| FelipeCortez wrote:
| There's a Strudel-like system focused on lower-level sound
| synthesis: https://kabel.salat.dev/
| oceansky wrote:
| I've been trying to compose music with Strudel after some years
| attempting to play the guitar and the piano.
|
| This resource is very helpful
| bibimsz wrote:
| when AI takes over the world it will communicate with itself with
| a tonal language communicated in Strudel
| proc0 wrote:
| Love Strudel, trying to learn it but inevitably you also need
| some musical foundation. It's a fascinating blend of specialties.
| Also I found AI is complete garbage at generating Strudel. Here
| is my weak attempt at Beethoven:
|
| <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>
___________________________________________________________________
(page generated 2025-12-02 23:00 UTC)