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