[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)