-declare name "karplus32";
-declare version "1.0";
-declare author "Grame";
-declare license "BSD";
-declare copyright "(c)GRAME 2006";
-
-
-//-----------------------------------------------
-// karplus-strong
-// with 32 resonators in parallel
-//-----------------------------------------------
-
-import("music.lib");
-
-
-// Excitator
-//--------
-
-upfront(x) = (x-x') > 0.0;
-decay(n,x) = x - (x>0)/n;
-release(n) = + ~ decay(n);
-trigger(n) = upfront : release(n) : >(0.0) : +(leak);
-leak = 1.0/65536.0;
-
-size = hslider("excitation (samples)", 128, 2, 512, 1);
-
-
-
-
-// Resonator
-//-----------------
-
-dur = hslider("duration (samples)", 128, 2, 512, 1);
-att = hslider("attenuation", 0.1, 0, 1, 0.01);
-average(x) = (x+x')/2;
-
-resonator(d, a) = (+ : delay(4096, d-1.5)) ~ (average : *(1.0-a)) ;
-
-
-// Polyphony
-//-----------------
-
-detune = hslider("detune", 32, 0, 512, 1);
-polyphony = hslider("polyphony", 1, 0, 32, 1);
-
-
-
-output = hslider("output volume", 0.5, 0, 1, 0.1);
-
-
-process = vgroup("karplus32",
- vgroup("noise generator", noise * hslider("level", 0.5, 0, 1, 0.1))
- : vgroup("excitator", *(button("play"): trigger(size)))
- <: vgroup("resonator x32", par(i,32, resonator(dur+i*detune, att) * (polyphony > i)))
- :> *(output),*(output)
- );