X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/c7f552fd8888da2f0d8cfb228fe0f28d3df3a12c..b4b6f2ea75b9f0f3ca918f5b84016610bf7a4d4f:/interpretor/preprocessor/faust-0.9.47mr3/examples/envelop.dsp diff --git a/interpretor/preprocessor/faust-0.9.47mr3/examples/envelop.dsp b/interpretor/preprocessor/faust-0.9.47mr3/examples/envelop.dsp new file mode 100644 index 0000000..9dfc2c1 --- /dev/null +++ b/interpretor/preprocessor/faust-0.9.47mr3/examples/envelop.dsp @@ -0,0 +1,35 @@ +declare name "envelop"; +declare version "1.0"; +declare author "Grame"; +declare license "BSD"; +declare copyright "(c)GRAME 2006"; + +import("music.lib"); + +//------------------------------------------------- +// ADSR Envelop Generator +// The 'state' of the envelop generator is +// defined by a phase signal p2 allowing to +// distinguish the attack and the decay-sustain +// phases, and the envelop signal y itself. +//------------------------------------------------- + +envelop(a,d,s,r,t) = adsr ~ (_,_) : (!,_) // The 2 'state' signal are feedback + with { + adsr (p2,y) = (t>0) & (p2|(y>=1)), // p2 = decay-sustain phase + y + p1*a - (p2&(y>s))*d*y - p3*r*y // y = envelop signal + with { + p1 = (p2==0) & (t>0) & (y<1); // p1 = attack phase + p3 = (t<=0) & (y>0); // p3 = release phase + }; + }; + + +attack = 1.0/(SR*nentry("[1:]attack [unit:ms][style:knob]", 20, 1, 1000, 1)/1000); +decay = nentry("[2:]decay[style:knob]", 2, 1, 100, 0.1)/100000; +sustain = nentry("[3:]sustain [unit:pc][style:knob]", 10, 1, 100, 0.1)/100; +release = nentry("[4:]release[style:knob]", 10, 1, 100, 0.1)/100000; + + +process = button("play"): hgroup("", envelop(attack, decay, sustain, release) : *(noise)); +