Hi, Oleg :) Yes, I did it this way:
lp4blti(cf, q, in) = tick ~ ( _, _, _, _) : ( !, !, !, !, _) with { k = 1/2*q; g = tan(m2.w(cf)/2); G = g/(1+g); gamma = G^4; tick(s1, s2, s3, s4) = v1+y1, v2+y2, v3+y3, v4+y4, y4 with { u = (in-((s1*(G^3/(1+g))+s2*(G^2/(1+g))+s3*(G/(1+g))+s4 *(1/(1+g)))*k))*(1/(1+k*gamma)); v1 = (u-s1)*G; y1 = v1+s1; v2 = (y1-s2)*G; y2 = v2+s2; v3 = (y2-s3)*G; y3 = v3+s3; v4 = (y3-s4)*G; y4 = v4+s4; }; }; <http://dariosanfilippo.tumblr.com> I tried the ladder structures in PD as nonlinear self-oscillating systems, hence adding saturators or other stability processing, and they produced good results. I will explore those in Faust to build a set of nonlinear oscillators. I'm curious, what's your background? Are you an electronic musician? Dario On Mon, 3 Jun 2019 at 13:52, Oleg Nesterov <o...@redhat.com> wrote: > On 05/30, Dario Sanfilippo wrote: > > > > I was meaning to also implement the ZDF 4-pole ladder. Will Pirkle > resolved > > it into this diagram: > > http://www.willpirkle.com/Downloads/AN-4VirtualAnalogFilters.2.0.pdf. > > I can't read the diagrams, but the code looks simple... the faust > implementation > is trivial: > > moog(fc, Q) = tick ~ (_,_,_,_) : !,!,!,!, _ with { > tick(s1,s2,s3,s4) = > lp(s1, u) : _,(lp(s2) : _,(lp(s3) : _,lp(s4))) > with { > k = 4 * (Q - 0.5) / (25 - 0.5); > g = tan(ma.PI * fc / ma.SR) <: _ / +(1); > > sigma = g^3*s1 + g^2*s2 + g*s3 + s4; > u = -(k * sigma) : /(1 + k * g ^ 4); > > lp(s,x) = y + v, y with { > v = (x - s) * g; > y = v + s; > }; > }; > }; > > although I didn't check this code and I am sure it has mistakes. > > I am wondering what are you going to do with it ;) and how to compare this > code > with moog_vcf_* in vaeffects.lib. > > Oleg. > >
_______________________________________________ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users