pull down to refresh

You can play the song and code here on Strudel.cc
//////////////////////////////////////////////////////////////////////////////////////////
//
// Crystal Waters — Gypsy Woman
// @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
// @by Bitcoin Graffiti
// @date Aug, 18 2025
//
//////////////////////////////////////////////////////////////////////////////////////////
setcpm(30)

const instr = "gm_epiano1:10"
const beat = "1 ~ ~ ~ 1 ~ ~ 1 ~ ~ 1 ~ ~ 1 ~ ~"

const hh = s("hh").beat("4, 7, 8, 9, 12", 16).decay(.4).color("orange").gain(.4) //.sometimesBy(.2, x => x.ply( "2 | 4"))
const bd = s("bd:4!4").color("red").gain(.8)
const oh = s("[~ ~ oh ~]!4").decay(.5).color("yellow").gain(.25)
const cp = s("[~ cp]!2").color("yellow").gain(.15)
const bass = note("~:3 a:1 ~:2 a:1 g:1 c:2 a:1 g:1 e:2 d:1 c:1 g:3 a:1 ~:3 d:1 c:3 bb:1 a:2 g:1 a:1").slow(4)
  .s("gm_lead_8_bass_lead:5").distort(2).lpf(400).gain(.05)

//add the percussion by throwing them into stack(cp, bd, etc)
const drums = stack().swingBy(.07, 4)

const piano = {
  Em7: note("[e2, e, e4, g4, b4, d5] [eb, eb2, e4, g4, bb4, d5]@2").color("silver"),
  Am7: note("[a2, a, g, c4, e4] [bb2, bb, a, d4, f4]@2").color("cyan"),
  Dm9: note("[d2, d, f, a, c4, [e4 d4@2]]").color('indigo'),
  Gm7: note("[g1, g2, g, bb, d4, f4] [c2, c, g, bb, d4, e4]@2").color('pink')
};

for (let key in piano) {
    piano[key] = piano[key].struct(beat).s(instr).room(.5).release(.05).hpf(100);
} 

arrange(
        [1, stack(drums, piano['Am7'])],
        [1, stack(drums, piano['Em7'])],
        [2, stack(drums, piano['Dm9'])],
        [1, stack(drums, piano['Am7'])],
        [1, stack(drums, piano['Gm7'])],
        [2, stack(drums, piano['Dm9'])])
        .pianoroll({labels:1})
this territory is moderated
This is awesome. Great job.
reply
0 sats \ 1 reply \ @LNPLEB 8h
this is cool, strudel is interesting. how many songs have you made like this?
reply
Covers? Only a couple. Been coding music for a few weeks now.
reply
i couldn't hear any drum on this, only piano
reply
you have to add it to stack, the percussion is already defined
//add the percussion by throwing them into stack(cp, bd, etc) const drums = stack().swingBy(.07, 4)
reply