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....)
))