Thanks Yann, it really means a lot :)

I started learning some python three years ago, but motivation was low
without an actual project.
With the need for such a tool at the quarantine sessions came motivation
and I got hooked :)

The more I dive into faust, the more fun it is!
(Meaning: You will probably have me around soon with more newbie
questions :D)

Merci and take care,
Klaus

On 29.07.21 14:14, Yann Orlarey wrote:
> Hi Klaus,
>
> Congrats, I don't know your programming background before starting
> this project, but I think it is a remarkable achievement!
>
> Yann
>
> Le jeu. 29 juil. 2021 à 11:11, Klaus Scheuermann <kla...@posteo.de
> <mailto:kla...@posteo.de>> a écrit :
>
>     Dear Yann,
>
>     so here is a quick update. I managed to implement a multichannel
>     version of my project master_me:
>     https://github.com/trummerschlunk/master_me/blob/master/master_me_gui.dsp
>     
> <https://github.com/trummerschlunk/master_me/blob/master/master_me_gui.dsp>
>
>     The noise-gate example was very helpful and by understanding par,
>     si.bus, and signal routing in general, I could transfer the
>     solution to my other building blocks.
>
>     The only part, where I still rely on variables is the leveler's
>     gating function. I guess the code is a bit dirty too, but it works...
>     Feel free to optimize ;)
>
>     Thanks again to you and to the whole list <3
>
>     Klaus
>
>
>     On 28.07.21 09:16, Klaus Scheuermann wrote:
>>
>>     Hi Yann!
>>
>>     Of course it works perfectly and I learned about par, si.bus and
>>     ro.interleave :)
>>
>>     Thanks... will be back soon I guess ;)
>>
>>     Klaus
>>
>>
>>     On 27.07.21 12:17, Yann Orlarey wrote:
>>>     Hi Klaus,
>>>
>>>     Thanks for the example. If I understand correctly, I think you
>>>     can generalize:
>>>
>>>     gate_stereo(thresh,att,hold,rel,x,y) = ggm*x, ggm*y with {
>>>     ggm = gate_gain_mono(thresh,att,hold,rel,abs(x)+abs(y));
>>>     };
>>>
>>>     by the following definition:
>>>
>>>     gate_any(N,thresh,att,hold,rel) = B <: B, (B :> ggm <: B) :
>>>     ro.interleave(N,2) : par(i,N,*)
>>>     with {
>>>     B = si.bus(N);
>>>     ggm = gate_gain_mono(thresh,att,hold,rel);
>>>     };
>>>     process = gate_any(4);
>>>
>>>     Cheers,
>>>
>>>     Yann
>>>
>>>
>>>     Le mar. 27 juil. 2021 à 10:22, Klaus Scheuermann
>>>     <kla...@posteo.de <mailto:kla...@posteo.de>> a écrit :
>>>
>>>         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 
>> <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
>     <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