I think it doesn't sound bad (considering I have no musical knowledge). Any suggestions for improvement?
//=============================================================================
// technoabu 2026-08
// https://technoabu.codeberg.page
// https://youtube.com/@technoabu
//=============================================================================
setcpm(128/4)
samples('github:technoabu/sounds')
// Si hay modificaciones de la colección de sonidos, y la caché de Strudel no // actualiza, podemos usar la siguiente sintaxis alternativa, cambiando el
// número de versión, para que sea considerado fichero diferente y haga recarga // del mismo
// samples('https://raw.githubusercontent.com/technoabu/sounds/master/strudel.json?version=3');
const T10 = s("espacio").cut(1).lpf(sine.range(800, 600).slow(4)).delay(1)
const BOMBO = s("[bd:1 ~]*4")
const PALMAS = s("[[~ cp:1] | [~ cp:1] | [~ cp:3*2] | [ ~ ]]*4").gain("<.1 .3 .2 .4>")
const BAJO = note("[~ c1*<1 2>][~ bb1*<2 1>][~ ab2][~ 1]")
.s("tri")
.fmh(1)
.fmi(sine.range(6, 10).slow(32))
.fmdecay(0.08)
.decay(0.15)
.sustain(0.4)
.gain(0.9)
const CHARLES = s("hh:1*<8!7 [16 | 32]>")
const acordes = note("< [ ~ c2*2, ~ e2*4, ~ g2*2, ~ b2*4 ] > ")
.s("<sine tri>")
.fmh(4)
.fmi(sine.fast(8).mul(sine.range(2, 16).slow(32)))
.fmdecay(0.2)
.decay(2)
.sustain(0.2)
.release(0.5)
.room(0.8)
.gain("<0.1 0.2 0.1 0.3>")
.lpf(sine.range(100, 1200).slow(32))
const ACORDES = arrange(
[1, "~"],
[2, acordes],
)
const ESPACIO = s("space:16").lpf(sine.range(400, 600).slow(8))
.gain("<.3 .5 .4 .2>")
.decay(0.8).delay(0.8).ds("0.3:0.1")
$: stack (
T10 .mask("<1 0!50 1 0!72 1>"), // Cuadrado para dispararse en 124 y continuar sonando en solitario
BOMBO .mask("<0!16 1!100>"),
PALMAS .mask("<0!12 1!100>"),
BAJO .mask("<0!8 1!100>"),
CHARLES .mask("<0!6 1!16 0 0 1!100>"),
ACORDES .mask("<0!24 1!100>"),
ESPACIO .mask("<[0!14 1!2]!7 0!11 1 1>") // Cuadrado para que suene justo antes de silenciar todo
)
// A partir del ciclo 124 "time.lt(125)" será falso, por lo que se actualizará la máscara de todos los
// canales a ".mask(0)" y dejarán de sonar todo. Excepto la cuenta atrás que como habrá iniciado su
// reproducción en el ciclo anteriro, seguirá sonando en solitario hasta finalizar su duración.
all(x => x.mask(time.lt(125))) // comentar esta línea si se quiere que dure más de 124 ciclos