Here's what I should have sent (attached). In my use case, I'm instancing individual modules from C++.
Yes, it would be cool to see FPP! - Julius On Tue, Oct 9, 2018 at 1:01 PM Julius Smith <j...@ccrma.stanford.edu> wrote: > > Sorry I didn't send Stéphane's more general code - thanks for stepping in. > On Tue, Oct 9, 2018 at 2:12 AM Stéphane Letz <l...@grame.fr> wrote: > > > > > > > Le 9 oct. 2018 à 10:42, Oleg Nesterov <o...@redhat.com> a écrit : > > > > > > On 10/08, Julius Smith wrote: > > >> > > >> Very nice! Stéphane's solution is to add the needed state in a > > >> subclass of dsp defined in the architecture file. See the attached > > >> simple example ttfs = "test ffunction with state". > > > > > > Heh. Thanks, now I understand what you mean. > > > > > > This is very inconvenient and limited. And btw, this example doesn't look > > > right. > > > > > > import("stdfaust.lib"); > > > > > > ff_smooth = ffunction(float ff_smooth(float,float),"",""); > > > ff_init = ffunction(float ff_init(float),"",""); > > > > > > smoothness0 = 0.5; > > > smoothness1 = 0.9; > > > smoother(smoothness) = ff_smooth(smoothness) : > > > attach(ff_init(ma.SR)); > > > smoother0 = smoother(smoothness0); > > > smoother1 = smoother(smoothness1); > > > > > > but this will not create 2 smoothers, class State has a single "float > > > state" > > > initialized twice in a row, and then > > > > > > process = 1-1' <: smoother0 , smoother1; > > > > > > ff_smooth() will be called twice too; the smoothness/x args are correct > > > but > > > again, both calls will play with the same "state". > > > > > > > > > > Well the example with 2 states was actually this code, with explicit 2 > > State1 and State2 classes…etc.. > > > > > > > > > > > > > I modified tffs.dsp: > > > > > > smoother = FPP(smoothness, x) { > > > // shared by all instances, this is only needed to create the > > > // unique "$smoother" id printed below. > > > DECL: int smoothers; > > > INIT: smoothers = 0; > > > > > > // every instance has its own state/smother > > > decl: int $smoother; > > > float $state; > > > > > > init: $state = 0; > > > $smoother = smoothers++; > > > > > > std::cout << "created smoother " << $smoother << std::endl; > > > > > > exec: > > > $state = (1.0f - $smoothness) * $x + $smoothness * $state; > > > std::cout << "smoother " << $smoother << ": " << > > > $smoothness << ", x: " << $x << ", y: " << $state << std::endl; > > > $state; > > > }; > > > > > > smoothness0 = 0.5; > > > smoothness1 = 0.9; > > > smoother0 = smoother(smoothness0); > > > smoother1 = smoother(smoothness1); > > > > > > process = 1-1' <: smoother0 , smoother1; > > > > > > then changed Makefile to run fpp instead of faust, and the output is > > > > > > created smoother 0 > > > created smoother 1 > > > smoother 0: 0.5, x: 1, y: 0.5 > > > smoother 1: 0.9, x: 1, y: 0.1 > > > smoother 0: 0.5, x: 0, y: 0.25 > > > smoother 1: 0.9, x: 0, y: 0.09 > > > smoother 0: 0.5, x: 0, y: 0.125 > > > smoother 1: 0.9, x: 0, y: 0.081 > > > smoother 0: 0.5, x: 0, y: 0.0625 > > > smoother 1: 0.9, x: 0, y: 0.0729 > > > smoother 0: 0.5, x: 0, y: 0.03125 > > > smoother 1: 0.9, x: 0, y: 0.06561 > > > smoother 0: 0.5, x: 0, y: 0.015625 > > > smoother 1: 0.9, x: 0, y: 0.059049 > > > smoother 0: 0.5, x: 0, y: 0.0078125 > > > smoother 1: 0.9, x: 0, y: 0.0531441 > > > smoother 0: 0.5, x: 0, y: 0.00390625 > > > smoother 1: 0.9, x: 0, y: 0.0478297 > > > > > > which looks correct. > > > > > > process = 1-1' <: par(i, 10, smoother((i+1)/10)); > > > > > > outputs > > > > > > created smoother 0 > > > created smoother 1 > > > created smoother 2 > > > created smoother 3 > > > created smoother 4 > > > created smoother 5 > > > created smoother 6 > > > created smoother 7 > > > created smoother 8 > > > created smoother 9 > > > smoother 0: 0.1, x: 1, y: 0.9 > > > smoother 1: 0.2, x: 1, y: 0.8 > > > smoother 2: 0.3, x: 1, y: 0.7 > > > smoother 3: 0.4, x: 1, y: 0.6 > > > smoother 4: 0.5, x: 1, y: 0.5 > > > smoother 5: 0.6, x: 1, y: 0.4 > > > smoother 6: 0.7, x: 1, y: 0.3 > > > smoother 7: 0.8, x: 1, y: 0.2 > > > smoother 8: 0.9, x: 1, y: 0.1 > > > smoother 9: 1, x: 1, y: 0 > > > ... > > > > > > No need to create a subclass, no need to write the additional C++ code, > > > etc. > > > > > > Oleg. > > > > > > > Julius initial demand was more limited, and the proposed solution was > > enough I think. > > > > OK your solution seems more general, so we are interested to see your FPP > > code ((-; > > > > Stéphane > > > > > -- > > Julius O. Smith III <j...@ccrma.stanford.edu> > Professor of Music and, by courtesy, Electrical Engineering > CCRMA, Stanford University > http://ccrma.stanford.edu/~jos/ -- Julius O. Smith III <j...@ccrma.stanford.edu> Professor of Music and, by courtesy, Electrical Engineering CCRMA, Stanford University http://ccrma.stanford.edu/~jos/
tffs.tgz
Description: application/gzip
_______________________________________________ Faudiostream-devel mailing list Faudiostream-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-devel