<< Menu Principal >>

Session 4 : Récursion, filtres IIR, écho et modélisation physique

Récursion en Faust

process = +~_;
process = _~+(1) : -(1);

produira un signal : y(n) = 0, 1, 2, 3, 4, ...

Filtre à un pole (one pole)

import("stdfaust.lib");
onePole(a1) = +~*(a1);
pole = hslider("pole",0,-1,1,0.01);
process = no.noise : onePole(pole);
smooth(s) = *(1.0 - s) : + ~ *(s);

Filtre en peigne récursif

import("stdfaust.lib");
fdbComb(del,a1) = +~de.delay(1024,del)*(a1);
d = hslider("delay",0,0,1023,1);
pole = hslider("pole",0,-1,1,0.01);
process = no.noise : fdbComb(d,pole);

Echo

import("stdfaust.lib");
echo(duration,feedback) = +~de.delay(50000,del)*(feedback)
with{
  del = duration*ma.SR;
};
instrument(repeat) = ba.pulsen(1,n) <: pm.djembe(50+rand*50,0.5,0.5,1)
with{
  n = repeat*ma.SR;
  rand(trig) = no.noise : ba.sAndH(trig : ba.impulsify);
};
d = hslider("duration",0.25,0,1,0.01);
f = hslider("feedback",0.5,0,1,0.01);
process = instrument(0.25) : echo(d,f);

Un modèle physique simple : le Karplus-Strong

import("stdfaust.lib");
ks(freq,damp) = +~(de.fdelay4(1024,del) : dispersion)
with{
  del = ma.SR/freq;
  dispersion = _ <: _,_' :> /(2) : *(1-damp) ;
};
f = hslider("freq",300,50,2000,0.01);
d = hslider("damping",0.01,0,1,0.01);
gate = button("gate");
process = gate : ba.impulsify : ks(f,d);