Listen here in strudel
//////////////////////////////////////////////////////////////////////////////////////////
//
// Donut Plains — Koji Kondo
// @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
// @by Bitcoin Graffiti
// @date Nov 17, 2025
//
//////////////////////////////////////////////////////////////////////////////////////////
setcpm(130/8)
const donut = note(
`[ab, b, c#4]@2 [ab, b, c#4]@2 [ab, b, c#4]@2 ~ [a, c#4, e4]@2 [a, c#4, e4]@2 [a, c#4, e4] [a, c#4, e4]@2 [a, c#4, e4]@2
~!2 [ab, b, c#4]@2 [ab, b, c#4]@2 ~ [a, c#4, e4]@2 [a, c#4, e4]@2 [a, c#4, e4] [a, c#4, e4]@2 [f#, c#4, f#4]@2
~!2 [c#4, e4, ab4]@2 [a, c#4, e4]@2 ~ [b, d#4, f#4]@2 [b, d#4, f#4]@2 [b, d#4, f#4] [ab, b, c#4]@2 ~!2
~!2 [a, c#4, e4]@2 [a, c#4, e4]@2 ~ [a, c4, e4]@2 [a, c4, e4]@2 [a, c4, e4] [a, c4, e4]@2 [a, c4, e4]@2
[ab, b, c#4]@2 [ab, b, c#4]@2 [ab, b, c#4]@2 ~ [a, c#4, e4]@2 [a, c#4, e4]@2 [a, c#4, e4] [a, c#4, e4]@2 [a, c#4, e4]@2
~!2 [ab, b, c#4]@2 [ab, b, c#4]@2 ~ [a, c#4, e4]@2 [a, c#4, e4]@2 [a, c#4, e4] [a, c#4, e4]@2 [a, c#4, f#4]@2
~!2 [b, e4, g#4]@2 [b, e4, g#4]@2 ~ [bb, e4, g#4]@2 [bb, e4, g#4]@2 [bb, e4, g#4] [bb, e4, g#4]@2 [bb, e4, g#4]@2
~!2 [b, e4, g#4]@2 [b, e4, g#4]@2 ~ [bb, e4, g#4]@2 [bb, e4, g#4]@2 [bb, e4, g#4] [bb, e4, g#4]@2 [bb, e4, g#4]@2
[d, d4, f#4]@3 [d, d4, f#4] [d, d4, f#4]@2 ~ [d, d4, f#4]@2 [d, d4, f#4]@2 [d, d4, f#4] [d, d4, f#4]@2 [d, d4, f#4]@2
[d, d4, f#4]@3 ~ [d, d4, f#4]@3 ~ [d, db4, f#4]@3 ~ [d, d4, f#4]@3 ~
[g#, a#, c#4]@2 [g#, a#, c#4]@2 [g#, a#, c#4]@2 ~ [g#, b, d#4]@2 [g#, b, d#4]@2 [g#, b, d#4] [g#, b, d#4]@2 [g#, b, d#4]@2
[g#, c#4, f4]@2 [g#, c#4, f4]@2 [g#, c#4, f4]@2 ~ [a#, d#4, f#4]@2 [a#, d#4, f#4]@2 [a#, d#4, f#4] [a#, d#4, f#4]@2 [a#, d#4, f#4]@2
[g#, c#4, f4]@3 [g, c#4, e4]@2 ~!3 [f#, b, d#4]@3 [f, bb, d4]@2 ~!3
[a#, c#4, f4]@2 [a#, c#4, f4]@2 [a#, c#4, d#4]@2 ~ [a#, c#4, f4]@2 [a#, c#4, f4]@2 [a#, c#4, f4] [a#, c#4, d#4]@2 [a#, c#4, d#4]@2
[c#4, f4, g#4]@3 [c#4, e4, g4]@2 ~!3 [b, d#4, f#4]@3 [g#, b, f4]@2 ~!3
~!2 [g#, c#4, f4]@2 [g#, c#4, f4]@2 ~ [g, c#4, f4]@2 [g, c#4, f4]@2 [g, c#4, f4] [g, c#4, f4]@2 [g, c#4, f4]@2
~!2 [f#, b, d#4]@2 [f#, b, d#4]@2 ~ [f, b, d#4]@2 [f, b, d#4]@2 [f, b, d#4] [f, b, d#4]@2 [f, b, d#4]@2
~!2 [d#, a#, c#4]@2 [d#, a#, c#4]@2 ~ [d#, a#, c#4]@2 [d#, a#, c#4]@2 [d#, a#, c#4] [d#, a#, c#4]@2 [e, b, d4]@2
`).s("pulse, pulse").legato(.7).lpf(1200).color("teal").slow(9)
const upbeat = note("~@2 f#@2 g#@2 a@3").s("gm_steel_drums, gm_alto_sax:4").fast(7)
const saxo = note(`
b@7 ~!3 c#4@2 b a@2 b@8 ~!3 c#4@2 d#4 e4@2 e4@8 ~!3 f#4@2 e4 d#4@2 b4@4 ~ a4@3 e4@3 f#@2 g#@2 a@2
b@7 ~!3 c#4@2 b a@2 b@8 ~!3 b@2 c#4@2 d#4@2 e4@2 e4@2 e4@2 g# b ~ a#@5 c#4@2 e4@2 e4@2 e4@2 g# b ~ a#@3 b@2 c4@2
c#4@5 ~ b@5 ~ f#@3 ~ a@3 ~ g#@3 ~ f#@3 ~ g#@3 ~ f#@7 ~!3 g#@2 f# f@2 f#@8 ~!3 g#@2 f# f@2 a#@2
b c#4 e d# g g# a# c# c b g g# f# e d c#@13 ~ c# f# c#4 a# c#4 g# g a# b c#4 e4 d4 b a f# e c# b2 c#@7 ~!3 d#@2 c# b2@2
c#@8 ~!3 d#@2 c# b2@2 c#@8 ~!3 f#@2 g#@2 a@2
`).s("gm_steel_drums, gm_steel_drums").slow(9).color('purple')
//percussion
const bd = s("bd:2!8").bank('tr909').gain(.4)
const sd = s("[~ sd]!4").gain(.3)
const hh = s("[sh]!32").gain(.25)
const cw = s("[~ cowbell]!8").gain(2)
const rm = s("rim").bank("tr626").beat("0, 3, 6, 10, 13", 16).color('gold').gain(.5)
const drums = stack(bd, sd, hh, rm, cw).color('gold')
arrange(
[1/8, stack(upbeat)],
[9*4, stack(donut, drums, saxo)],
[1, stack(donut, drums, saxo).hush()],
).pianoroll({labels: 1})