Files
strudel/examples/shedontusejelly.js
2025-09-27 23:12:09 +02:00

63 lines
2.7 KiB
JavaScript

// "She don't use jelly" (work in progress)
// composed @by The Flaming Lips
// script @by eefano
const gString = register('gString', (n,tuning, pat) =>
(pat.fmap((v) => { if(v[n]=='x') return note(0).velocity(0);
return note(v[n]+tuning[n]); }
).innerJoin()));
const guitar = (strums,fingers,tuning=[40,45,50,55,59,64]) => (strums.pickOut(
[fingers.pickOut(fingering).gString(0,tuning),fingers.pickOut(fingering).gString(1,tuning),fingers.pickOut(fingering).gString(2,tuning)
,fingers.pickOut(fingering).gString(3,tuning),fingers.pickOut(fingering).gString(4,tuning),fingers.pickOut(fingering).gString(5,tuning)]));
const split = register('split', (deflt, callback, pat) => callback(deflt.map((d,i)=> pat.withValue((v)=>{
const isobj = v.value !== undefined; const value = isobj ? v.value : v;
const result = Array.isArray(value)?(i<value.length?value[i]:d):(i==0?value:d);
return (i==0 && isobj) ? {...v,value:result} : result; }))));
setCps(86 / 60 )
const fingering =
{D5:"x:5:7:7:x:x",G5:"3:5:5:x:x:x",A5:"5:7:7:x:x:x",
D:"10:12:12:11:10:10",C:"8:10:10:9:8:8",G:"3:5:5:4:3:3",A:"5:7:7:6:5:5"
};
const sk = 300, sh = silence, strumming =
{d: stack(0,timeCat([1,sh],[sk,1]),timeCat([2,sh],[sk,2]),timeCat([3,sh],[sk,3]),timeCat([4,sh],[sk,4]),timeCat([5,sh],[sk,5]))
,u: stack(5,timeCat([1,sh],[sk,4]),timeCat([2,sh],[sk,3]),timeCat([3,sh],[sk,2]),timeCat([4,sh],[sk,1]),timeCat([5,sh],[sk,0]))
};
const song = "<0 1@8 2>/4"
lead: song.pickRestart(
["<~ ~ ~ [~ c4:7:.5]>"
,"<f#4 f#4*2 [a4:3:.1 f#4:-2:.1] [e4 f#4@2:3:.1 f#4]@2 f#4*2 [g4 f#4] [c#5:-2:.1 e4:2:1] >"
,"<f#4 ~@3>"
]).as("note:penv:patt").release(song.pickRestart([0,0,2]))
.s("gm_overdriven_guitar:11").color('magenta').gain(.55).hpf(400).lpf(5000).pan(.5)
rthm: song.pickRestart(
["~"
,"<D5:d [D5:d D5:u] G5:d [G5:d A5:u@2 A5:d]@2 [G5:d G5:u] [A5:d A5:u] [G5:d ~]>"
,"<D5:d ~@3>"
]).split([0,0],s=>guitar(s[1].pickRestart(strumming),s[0]).transpose(-12)
.release(song.pickRestart([.1,.1,2]))
.s("gm_overdriven_guitar:6").color('cyan').hpf(700).lpf(6000)).gain(1.5).pan(.4)
bass: song.pickRestart(
["~"
,note("<d2 d2*2 g1*2 [g1 a1@2 a1]@2 g1*2 a1*2 [g1 ~]>")
,"~"
]).s("gm_electric_bass_finger").color('green').lpf(500).dist("4:.25")
drum: song.pickRestart(
["~"
,"<cr,[hh!15 oh],[bd sd bd*2 [sd bd] [~ sd] [bd ~] [sd bd] [bd sd]]>/8"
,"<cr,bd>/4"
]).pickOut({
bd:s('linndrum_bd').hpf(50).lpf(2000).velocity(.8),
sd:s('linndrum_sd').hpf(200).velocity(.7),
hh:s('linndrum_hh').hpf(7000).speed(1.5).velocity(.3),
oh:s('linndrum_oh').hpf(7000).speed(1.1).velocity(.3),
cr:s('linndrum_cr').hpf(7000).speed(1.2).velocity(.3),
}).color('yellow').gain(1.2)
all(x=>x.rsize(.8).room(1.3)
// .ribbon(1*4,2*4)
)