And there were some plums left over from the previous recipe, so I've made a new variation, sour plum strudel (it has a different flavor).
// ================================================================================== // technoabu 2026-09 // https://technoabu.codeberg.page // https://youtube.com/@technoabu // ================================================================================== setcpm(128/4) const KICK = s("[bd:6 ~]*4") .orbit(0) .duckorbit(1) .duckdepth(0.85) .duckattack(0.02) const SNARE = s("[~ sd:10]*4") .lpf(cosine.range(300, 600).slow(8)) const CHARLES = s("hh*<8!4 [16 | 4]>") .lpf(sine.range(1000, 1600).slow(8)) const BASS = n(`< [3]!3@4 5 3 [5]!3@4 6 5 [2]!3@4 4 2 [6]!3@4 2 6 >*4`) .s("saw") .scale("C2:minor") .legato(1) .orbit(1) .lpf(sine.range(300, 800).slow(8)) .sometimesBy(0.05, x => x.postgain(0.75).room(0.75).delay(0.75).lpq(8).lpe(3).lpdecay(0.25).plyForEach(5, (p, i) => p.pan(i % 2)).lpf(400)) const PADS = chord("<Cm7 Fm7 Bbm7 ~>") .anchor("C5") .voicing() .struct("[x ~ x ~]") .s("sine") .hpf(400) .sometimesBy(0.4, x => x.plyForEach(3, (p, i) => p.pan(i % 2))) .delay(0.4) .gain(0.4) $: stack( KICK .mask("<0!4 1!120 0!200>"), BASS .mask("<1!64 0!4 1!82 0!200>"), PADS .mask("<0!16 1!4 0!8 1!4 0!8 1!80 0!200>"), SNARE .mask("<0!24 1!100 0!200>"), CHARLES .mask("<0!32 1!100 0!200>"), ) all(x => x.when( time.gt(135), y => y.gain(sine.range(1, 0).slow(24)) // fade-out sincronizado manualmente (export 150) para que no reaparezca (mask 0....) ))