I'm starting my fourth week of trying out strudel recipes, and I've made a plum strudel

The flavor might not appeal to everyone, but I think the preparation is interesting.

//=============================================================================
// technoabu 2026-09
// https://technoabu.codeberg.page
// https://youtube.com/@technoabu
//=============================================================================

setcpm(128/4)
let caos = rand.range(0, 0x0F).round().seg(1/4); 

const TIEMPO = s("cp:3*2").pan("0.25 0.75")
const BOMBO = s("bd:6").struct(binaryN(caos, 8).add("1 0 1 1 0 0 0 0")).sometimesBy(0.10, x => x.ply(2))

const BASE = stack(
   n("[[0 2 4 6]|[0 3 4 2]]").slow(2).scale("<c3:minor f3:minor>").s("piano")
   .struct(binaryN(caos, 8).add("1 0 1 1 0 0 0 0"))
   .mask("< 1 1 0 0>"),
)

const ACORDES = chord("<Cm Fm Bbm Ab>")
  .voicing()
  .struct("[x x - x]")  
  .s("ocarina")
  .lpf(sine.range(400, 600).slow(4).segment(1/4))
  .decay(0.25).sustain(0).gain(0.6)
  .delay(0.2)

const ARPEGIOS = chord("<Cm Fm Bbm Ab>")
  .voicing()
  .arp("0 3 1 2")
  .s("sine")
  .lpf(cosine.range(1400, 2500).slow(4))
  .decay(0.15).sustain(0).sometimesBy(0.25, x => x.plyForEach(3, (p, i) => p.pan( i%2 )))
  .delay(0.3)

$: stack ( 
  TIEMPO   .mask("<1!102 0!100>"),
  BOMBO    .mask("<0!16 1!80 0!100>"),
  BASE     .mask("<0!8  1!80 0!100>"),
  ACORDES  .mask("<0!2  [0 0 1 0 1 1 0 0]!16  [1 1 0 1 1 0 1 1]!16  [0 0 1 0 1 1 0 0]!16  [1 1 0 1 1 0 1 1]!16   0 1 0 0 1 1 0 0   0 0 1 0 1 0 0 0  0!100> "),  
  ARPEGIOS .mask("<0!2  [1 1 0 1 1 0 1 1]!16  [0 0 1 0 1 1 0 0]!16  [1 1 0 1 1 0 1 1]!16  [0 0 1 0 1 1 0 0]!16   1 0 1 1 0 0 1 1   1 1 1 1 1 1 1 1  1!16 0!100>")
)

all(x => x.when(
  time.gt(100), 
  y => y.gain(sine.range(1, 0).slow(10)) // fade-out sincronizado manualmente para que no reaparezca (mask 0....) 
))