Hi Till,

Thank you very much for your detailed answer. It's very helpful. On my
side, I tried to formalize my ideas for an on-demand primitive. A
description is available here:
https://drive.google.com/file/d/1mEKkW3fKl9Ik8zsClxMzlMWKBjGl-teK/view?usp=sharing.
This is still very partial and many aspects remain to be detailed...

Yann

*Yann Orlarey*
Directeur scientifique/Scientific director


orla...@grame.fr <x...@grame.fr> T : +33 (0) 4 72 07 37 00
GRAME - Centre national de création musicale
11 cours de Verdun Gensoul | 69002 Lyon
www.grame.fr | facebook <https://www.facebook.com/Gramelyon/> | instagram
<https://www.instagram.com/grame_cncm/> | twitter
<https://twitter.com/GRAME_LYON>


Le mer. 5 août 2020 à 14:06, Till Bovermann <lf...@lfsaw.de> a écrit :

> Dear Yann,
>
>
> I can try...
>
> In SC, a demand-rate UGen graph is encapsuled into one of (currently)
> three different UGens:
>
> Demand.ar/kr
> Duty.ar/kr
> TDuty.ar/kr
>
> Their functionality vary marginally (triggered execution/execution every
> `dur` secs, etc.).
>
> Each of them has three slots:
>
> 1. update input — either a trigger (Demand) or a Demand-rate UGen / scalar
> (duration, Duty/TDuty)
> 2. reset input — if value passes from neg to pos, reset the value stream
> to initial conditions
> 3. value stream — a Demand-rate UGen graph
>
>
> Demand-rate UGens are UGens that calculate their values every time they
> are triggered to do so from the outside, read more elaborate descriptions
> on this here:
>
>         http://doc.sccode.org/Classes/Demand.html
> and
>         http://doc.sccode.org/Classes/Duty.html
>
>
> internally, the wrapper-UGens (Demand et al) implement the following
> behavior:
>
> ```
> if reset:
>         call `next(nan)` on Demand-UGen in demand chain, this makes it
> reset.
> else if call for next value:
>         calculate how many values are needed for the current block (N)
>         ask for N values from demand chain by providing
> else:
>         keep last value (Demand/Duty), or 0 (TDemand)
> ```
>
>
> A demand-rate UGen with parameters in its param-slots does this if its
> next function is called:
>
> ```
> if numSamples == nan:
>         for each UGen in param-slots:
>                 call `next(nan)`, this makes it reset.
>         reset myself
> else:
>         for each UGen in param-slots:
>                 call next(numSamples) and collect values in array
>         compute numSample output based on parameters
> ```
>
> All relevant source code for the implementation is here:
>
>
> https://github.com/supercollider/supercollider/blob/develop/server/plugins/DemandUGens.cpp
>
>
> hope this helps and I did not make too many errors...
>         Till
>
> --
> Till Bovermann
>
> https://tai-studio.org | http://lfsaw.de |
> https://www.instagram.com/_lfsaw/
>
>
>
>
>
>
>
>
>
>
>
> > On 2. Aug 2020, at 18:40, Yann Orlarey <orla...@grame.fr> wrote:
> >
> > Hi Till,
> >
> > Thanks for the offer! Could you explain in a few words how demand-rate
> works in supercollider?
> > Cheers
> >
> > Yann
> >
> > Yann Orlarey
> > Directeur scientifique/Scientific director
> >
> >
> > orla...@grame.fr T : +33 (0) 4 72 07 37 00
> > GRAME - Centre national de création musicale
> > 11 cours de Verdun Gensoul | 69002 Lyon
> > www.grame.fr | facebook | instagram | twitter
> >
> >
> > Le sam. 1 août 2020 à 18:29, Till Bovermann <lf...@lfsaw.de> a écrit :
> > dear list, yann, james,
> >
> > this is exciting news indeed! i think, faust will substantially benefit
> from an on-demand evaluation possibility. i am very happy to help with my
> experiences as a long-term supercollider user and developer. it might be
> interesting to look at the implementation of demand-rate ugens in sc3,
> especially the possibility to reset pattern generating engines.
> >
> > all the best
> > till
> >
> >> On 31. Jul 2020, at 21:40, Yann Orlarey <orla...@grame.fr> wrote:
> >>
> >> 
> >> Hi,
> >>
> >> After these exchanges, I am quite convinced of the interest of having
> on-demand computation in Faust!
> >>
> >> As I said in my previous email, it can't be the current control
> primitive. It must actually be an operation on signal processors, not an
> operation on signals. The challenge is to find a primitive that keeps the
> simple and well-defined semantics of Faust.
> >>
> >> I started to think about this and sketched an `ondemand(P)` primitive
> that transforms a P processor into an equivalent on-demand version with an
> extra clock input.
> >>
> >> This is all very preliminary, but for those interested, my notes are
> here https://photos.app.goo.gl/UTHpYfz5q1oe4CRV7, although I doubt it
> would be understandable to anyone but me ;-)
> >>
> >> If you have specific use cases and examples to feed the reflection, it
> would be helpful to us...
> >>
> >> Cheers
> >>
> >> Yann
> >>
> >> Yann Orlarey
> >> Directeur scientifique/Scientific director
> >>
> >>
> >> orla...@grame.fr T : +33 (0) 4 72 07 37 00
> >> GRAME - Centre national de création musicale
> >> 11 cours de Verdun Gensoul | 69002 Lyon
> >> www.grame.fr | facebook | instagram | twitter
> >>
> >>
> >> Le jeu. 30 juil. 2020 à 13:17, James Mckernon <jmcker...@gmail.com> a
> écrit :
> >> Hi Yann,
> >>
> >> Thanks for clarifying your position regarding control and enable, and
> >> their intended use.
> >>
> >> I understand that control poses certain semantic complications.
> >> However, I would also respectfully suggest that a (properly-working)
> >> control primitive would be a powerful addition to the language, which
> >> could perhaps justify such complications. (Indeed, it would be at the
> >> top of my 'wish list' for faust features.) It would make faust an
> >> excellent tool for algorithmic composition. I understand that this is
> >> not a primary focus of the faust project, but the possibility of being
> >> able to use faust to describe not only sample-level DSP but also
> >> higher-level control structures is very appealing to me.
> >>
> >> Given your position, I do not expect anyone to fix the above issues
> >> with control's semantics. However, perhaps I can persuade you not to
> >> remove it? :) I am also considering trying to write a patch myself to
> >> fix those issues - if I ever finish such a patch, I would be grateful
> >> if it could be considered for inclusion.
> >>
> >> Nonetheless, I of course respect the right of the faust developers to
> >> steer faust as seems best to them, with or without whatever primitives
> >> they choose.
> >>
> >> Many thanks,
> >> James
> >>
> >>
> >> On 7/30/20, Yann Orlarey <orla...@grame.fr> wrote:
> >> > Hi James,
> >> >
> >> > We discourage the use of the primitive "control" that we plan to
> remove. As
> >> > you reported, "control" poses many semantic problems. In reality, this
> >> > primitive was essentially intended for internal use, in the
> compilation of
> >> > the experimental "enable" primitive (enable(x,y) -> control(x*y,
> y!=0)) and
> >> > it should never have been made public.
> >> >
> >> > The experimental enable(x,y) primitive has, approximately, the
> semantics of
> >> > x*y. But it allows to disable the computation of x when y is 0 (and
> if x is
> >> > not used in other circumstances). Enable therefore can save CPU in
> some
> >> > circumstances. But this primitive must be used with great care. In
> >> > particular, it is the responsibility of the programmer to ensure that
> his
> >> > use of enable(x,y) behaves as much as possible like x*y.
> >> >
> >> > Cheers
> >> >
> >> > Yann
> >> >
> >> >
> >> > *Yann Orlarey*
> >> > Directeur scientifique/Scientific director
> >> >
> >> >
> >> > orla...@grame.fr <x...@grame.fr> T : +33 (0) 4 72 07 37 00
> >> > GRAME - Centre national de création musicale
> >> > 11 cours de Verdun Gensoul | 69002 Lyon
> >> > www.grame.fr | facebook <https://www.facebook.com/Gramelyon/> |
> instagram
> >> > <https://www.instagram.com/grame_cncm/> | twitter
> >> > <https://twitter.com/GRAME_LYON>
> >> _______________________________________________
> >> Faudiostream-users mailing list
> >> Faudiostream-users@lists.sourceforge.net
> >> 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