Thanks Yann,

I am learning, but still not succeeding...

This is not my end-game, but maybe a good example that I can't solve...

How would I make an N-channel (linked) gate out of this?

gate_stereo(thresh,att,hold,rel,x,y)= ggm*x,ggm*ywith{
ggm= gate_gain_mono(thresh,att,hold,rel,abs(x)+abs(y));
};
gate_gain_mono(thresh,att,hold,rel,x)=
x:extendedrawgate:an.amp_follower_ar(att,rel)with{
extendedrawgate(x)= max(float(rawgatesig(x)),holdsig(x));
rawgatesig(x)= inlevel(x)>ba.db2linear(thresh);
minrate= min(att,rel);
inlevel= an.amp_follower_ar(minrate,minrate);
holdcounter(x)= (max(holdreset(x)* holdsamps,_)~-(1));
holdsig(x)= holdcounter(x)>0;
holdreset(x)= rawgatesig(x)<rawgatesig(x)';// reset hold when raw gate falls
holdsamps= int(hold*ma.SR);
};

Thanks,
Klaus




On 26.07.21 16:27, Yann Orlarey wrote:
> Hi Klaus,
>
> You can give names to the input signals as in your example, but you
> don't have to. In other words, instead of writing:
>
> process(x) = f(g(x));
>
> you can use a more idiomatic style, and write:
>
> process = g : f;
>
> Faust is inspired by Moses Schönfinkel's combinatory logic (1924) and
> John Backus' FP (1977). The idea of Schönfinkel was to eliminate the
> need for variables in mathematical logic. In functional programming,
> this style is known as "point-free" or "tacit" programming.
>
> At first sight, it seems complicated to do without variables. But a
> variable is just one way (among others) to move a value to its point
> of use. In Faust, you can use the `_` and `!` primitives, as well as
> the five operations of the block diagram algebra (or the route{}
> primitive) to create complex routing to move signals to their point of
> use.
>
> The advantage of point-free expressions is that they are more modular
> and often easier to generalize. Let say you want to write a
> quadriphonic amplifier. You can write:
>
> amp4(v,x1,x2,x3,x4) = v*x1, v*x2, v*x3, v*x4;
>
> but it is better to write:
>
> amp4(v) = *(v), *(v), *(v), *(v);
>
> or even better to write:
>
> amp4(v) =  par(c,4,*(v));
>
> This is now easy to generalize to a variable number N of channels:
>
> anyamp(N,v) = par(c,N,*(v)); 
>
> (note: by convention, we use capital letters for parameters that need
> to be known at compile-time, here N)
>
> You can now specialize this general definition, as in:
>
> amp4 = anyamp(4);
> amp8 = anyamp(8);
>
> So much for the principle, on an extremely simple example. What you
> are trying to do is probably more complicated. Don't hesitate to post
> a little diagram if you need help...
>
> Cheers,
>
>
> Yann
>
>
> Le lun. 26 juil. 2021 à 10:23, Klaus Scheuermann <kla...@posteo.de
> <mailto:kla...@posteo.de>> a écrit :
>
>     Hi All,
>
>     so for stereo, I have
>
>     process(x1,x2)= x1,x2;
>
>     How would I use 'par' in 'process' for N-channel operation?
>
>     (I need the inputs x1, x2, xN later in a function.)
>
>     Maybe a list with N entries?
>
>     Thanks, Klaus
>
>
>     _______________________________________________
>     Faudiostream-users mailing list
>     Faudiostream-users@lists.sourceforge.net
>     <mailto:Faudiostream-users@lists.sourceforge.net>
>     https://lists.sourceforge.net/lists/listinfo/faudiostream-users
>     <https://lists.sourceforge.net/lists/listinfo/faudiostream-users>
>
_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-users

Reply via email to