I'm in my third week exploring strudel, and this is the result

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