That looks really nice! - Julius
On Fri, Aug 7, 2020 at 12:31 PM Yann Orlarey <orla...@grame.fr> wrote: > 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 > -- "Anybody who knows all about nothing knows everything" -- Leonard Susskind
_______________________________________________ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users