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

Reply via email to