1declare name "karplus"; 2declare version "1.0"; 3declare author "Grame"; 4declare license "BSD"; 5declare copyright "(c)GRAME 2006"; 6 7//----------------------------------------------- 8// karplus-strong 9//----------------------------------------------- 10 11import("music.lib"); 12 13// Excitator 14//-------- 15 16upfront(x) = (x-x') > 0.0; 17decay(n,x) = x - (x>0.0)/n; 18release(n) = + ~ decay(n); 19trigger(n) = upfront : release(n) : >(0.0); 20 21size = hslider("excitation (samples)", 128, 2, 512, 1); 22 23 24 25 26// resonator 27//----------------- 28 29dur = hslider("duration (samples)", 128, 2, 512, 1); 30att = hslider("attenuation", 0.1, 0, 1, 0.01); 31average(x) = (x+x')/2; 32 33resonator(d, a) = (+ : delay(4096, d-1.5)) ~ (average : *(1.0-a)) ; 34 35process = noise * hslider("level", 0.5, 0, 1, 0.1) 36 : vgroup("excitator", *(button("play"): trigger(size))) 37 : vgroup("resonator", resonator(dur, att)); 38