r/strudel•
0rtsaZ

I'm finding it pretty fun for more traditional genres

I'm a sucker for a good waltz.

code for the song:

setcpm(180/3)

let prog = `<
  Em Em Em Am
  Em Em Em Am
  Fm Fm Fm B7
>`;

let waltz = chord(prog).ply(3).anchor("<E4@24 E6@12>")
  .voicing()
  .gain("0.75 0.25 0.35")
  .room(0.5)
  .s('piano')
  .duckorbit(2).duckdepth(0.25)
  // .color("blue");

let basso = chord(prog).ply(3).anchor("<E2@24 E3@12>")
  .voicing()
  .clip("1 0.5 0.5")
  .gain("0.5 0.5 0.85")
  .s('gm_bassoon')
  // .color("navy");

let arp_d = chord(prog).anchor("E6").ply(6)
  .voicing().arp("0 1 2 3 5 7").rev()
  .gain("0.5")
  .room(0.25)
  .s('piano')
  // .color("red orange yellow");

let strng = chord(prog)
  .voicing()
  .gain(0.25)
  .s('gm_string_ensemble_1')
  .orbit(2)
  // .color("green");

let flute = chord(prog)
  .voicing()
  .arp("12,18,24")
  .rel(0.25)
  .gain(sine.range(0.75, 1.25).slow(4))
  .pan(sine.range(0.25, 0.75).slow(24))
  .s('gm_piccolo')
  // .color("cyan");

let clari = chord(prog).anchor("E5").ply(6)
  .voicing().arp("0 1 2 3 5 7".add("[12 |0|0]*6"))
  .gain("0.5")
  .room(0.25)
  .s('gm_clarinet')
  // .color("chartreuse");

const slow_death = (x, freq = 0.75) => x
  .sometimesBy(freq, x => x.clip("0.5|0.75"))
  .sometimesBy(freq, x => x.ply("3|6"));

arrange(
  [ 4, stack(n("-"), basso.gain(0.25).room(1))],
  [ 4, stack(n("-"), basso.room(1))],
  [12, stack(n("-"), basso, strng.att(0.15).rel(0.25).gain(0.25)).room(1)],
  [12, stack(n("-"), basso.room(1), strng.room(1), slow_death(waltz.degradeBy(0.15)).decay(0.75))],
  [12, stack(n("-"), basso.room(1), strng.room(1), slow_death(waltz.degradeBy(0.15), 0.25).decay(0.75), slow_death(arp_d).gain(0.95))],
  [12, stack(n("-"), slow_death(arp_d).crush("<16@4 8@4 6@2 4@2>").gain("<0.75@4 0.85@4 0.95@2 1.5@2>"))],
  [ 1, n("-")],
  [12, stack(n("-"), waltz.gain(1.15), clari, arp_d).room(0.6)],
  [12, stack(n("-"), basso.room(1).trans(24).sound('gm_pizzicato_strings'), strng, waltz, flute.gain(0.5), clari, arp_d.sound('gm_pizzicato_strings')).room(1)],
  [12, stack(n("-"), basso, basso.trans(24).sound('gm_pizzicato_strings'), strng, waltz, flute.gain(0.5), clari,arp_d, arp_d.sound('gm_pizzicato_strings')).trans(3).room(1)],
  [12, stack(n("~"), strng, waltz, flute.gain(0.25), clari, arp_d).trans(3).room(1)],
  [ 8, stack(n("~"), waltz.arp("0,4"), clari, slow_death(arp_d, 0.25)).trans(3).room(1)],
  [ 4, stack(n("~"), waltz.arp("0,4").trans(27), slow_death(arp_d).trans(3)).room(1)],
  [ 4, stack(n("-"), waltz.arp("0")).trans(27).room(1.5)],
  [ 8, n("-")],
);

^(no fancy visuals, sorry)

also: there's no way to "reset" a cycle, is there?

one of the things that keeps biting me in the ass is that i can't just plop, say, a "2 measure" pattern into an arrangement without making sure it's offset by some multiple of the other patterns.

Posted Jan 25, 2026, 4:23 AM UTC

33
Loading comments…