Hi Stéphane,
thanks for the answer. Wow that's definitely too much code. I'll copy paste
again the oscillator code and comment each line.
I hope this will help, otherwise just let me know :))

> os_wt(freq,wav,len,sr,steps,tab) = 0.5*((2.0*v1) + (-v0+v2)*dv + (2.0*v0
- 5.0*v1 + 4.0*v2 - v3)*pow(dv,2) + (-v0 + 3.0*v1 - 3.0*v2 + v3)*pow(dv,3))
// This is the formula to perform an uniform Catmull-Rom spline
interpolation
> with {
>     counter = %(*:max(len))~+(freq*(len/sr)); // create a phasor with
increment as function of freq to calculate the index of the interpolation
>     trig = ma.diffn(counter)<0; // 0 when phaze wraps at len else 1
>     phaze = @(counter,1); // 1s delay so it's in sync with trig
>
>     dv = ma.decimal(phaze); // this is the decimal index needed for the
spline interpolation
>     wsel = sah(trig,rint(wav)); // this is used to select 1 of the 127
morphing waves. The wave's corresponding number is passed through only when
the counter wraps, or in other words when it reaches its maximum. This
becomes useful if for example the position of wav will be modulated by a
certain amount of a LFO. In this case this value would be added to the
value of wav.

>     bas = rint(wsel)*len; // this gives the position in samples of the
selected wave inside the table. Where the first term is the int of the
selected wave (1- 127) and len is the length in sample of a cycle, thus 256
>
>     blend_b = ma.decimal(wsel); // these calculations are then used to
form the data of the spline interpolation. The decimal part will be 0. in
this case since wsel is integer. But this will make sense in the future if
the selected wave position (wav) will be modulated by a LFO for example
>     blend_a = 1-blend_b; // this therefore 1 (without wav modulation)
>     b_next = bas+len;
>
>     // It's here where all the inputs you mentioned are created. As you
can see idxs 2,3 and 4 are generated recursively. If I'm not wrong the math
should be correct, but probably this could be rewritten in a more proper
way...
>     idx1 = wrap(phaze-1.0,0.0,len);
>     idx2 = idx1 <: _+1-(len*(_>=255.0));
>     idx3 = idx2 <: _+1-(len*(_>=255.0));
>     idx4 = idx3 <: _+1-(len*(_>=255.0));
>
>     // And here I used the previous indexes to create the values of the 4
points needed for the spline interpolation and thus, this will generate
other more inputs...
>     v0 = 0,(blend_a*(idx1+bas)) + (blend_b*(idx1+b_next)) : tab; //
without an LFO modulating the position of (wav) the second term of sum will
be 0
>     v1 = 0,(blend_a*(idx2+bas)) + (blend_b*(idx2+b_next)) : tab;
>     v2 = 0,(blend_a*(idx3+bas)) + (blend_b*(idx3+b_next)) : tab;
>     v3 = 0,(blend_a*(idx4+bas)) + (blend_b*(idx4+b_next)) : tab;
> };






Il giorno mer 13 gen 2021 alle ore 09:27 Stéphane Letz <l...@grame.fr> ha
scritto:

> Hi Alessandro,
>
> I’m not sure to follows all the details of your code, but compiling it in
> C++, it generates a DSP with 1344 inputs (!!), 1 output, and 11884 lines of
> code. So something is probably wrong.
>
> Can you possibly explain it more, and/or comment the code in details ?
>
> Thanks.
>
> Stéphane
>
>
> > Le 12 janv. 2021 à 20:01, Alessandro Anatrini <al.anatr...@gmail.com> a
> écrit :
> >
> > Hi all,
> >
> > I’m quite new to faust and I’m facing some issues implementing a
> wavetable oscillator.
> > The table I’m using is made of 127 morphing waves of 1 cycle each, with
> each cycle of 256 samples.
> > An instance of the oscillator sounds quite fine. When I try to run 2
> instances, it still compiles on FaustLive, but it doesn’t run anymore. By
> this I mean that it really doesn’t run because the CPU drops around 2%,
> while it should be much higher. Using par primitive in order to run 2
> instances of the same osc still gives me the same issue.
> > I paste here below the code I' working on.
> >
> > Any ideas what I might be doing wrong?
> > Thanks for your suggestions,
> > Alessandro
> >
> >
> >
> > import("stdfaust.lib");
> >
> > os_freq_a = hslider("Freq_A [style:knob]",20,20,2000,0.01) : si.smoo;
> > os_wav_a = hslider("Sel_A [style:knob]",0,0,127,1) : si.smoo;
> >
> > os_freq_b = hslider("Freq_B [style:knob]",20,20,2000,0.01) : si.smoo;
> > os_wav_b = hslider("Sel_B [style:knob]",0,0,127,1) : si.smoo;
> >
> > volume = hslider("Volume [style:knob]",0,0,1,0.01) : si.smoo;
> >
> > tab1 = soundfile("Set_1[url:{'/Users/alan/wavesets/sin_doubler1.wav'}]",
> 1) : !,!,_;
> > tab2 = soundfile("Set_2[url:{'/Users/alan/wavesets/sin_doubler2.wav'}]",
> 1) : !,!,_;
> >
> > wrap(val,lo,hi) = ba.if(val<lo, fmod(hi-(lo-val),(hi-lo)),
> fmod(lo+(val-lo),(hi-lo)));
> > sah(trg,x) = (*(1 - trg) + x * trg) ~ _;
> >
> > os_wt(freq,wav,len,sr,steps,tab) = 0.5*((2.0*v1) + (-v0+v2)*dv + (2.0*v0
> - 5.0*v1 + 4.0*v2 - v3)*pow(dv,2) + (-v0 + 3.0*v1 - 3.0*v2 + v3)*pow(dv,3))
> // Catmull-Rom spline interpolation
> > with {
> >     counter = %(*:max(len))~+(freq*(len/sr)); // create a phasor with
> increment as function of freq
> >     trig = ma.diffn(counter)<0; // 0 when phaze wraps at len else 1
> >     phaze = @(counter,1); // 1s delay so it's in sync with trig
> >
> >     dv = ma.decimal(phaze);
> >     wsel = sah(trig,rint(wav));
> >     bas = rint(wsel)*len;
> >
> >     blend_b = ma.decimal(wsel);
> >     blend_a = 1-blend_b;
> >     b_next = bas+len;
> >
> >     idx1 = wrap(phaze-1.0,0.0,len);
> >     idx2 = idx1 <: _+1-(len*(_>=255.0));
> >     idx3 = idx2 <: _+1-(len*(_>=255.0));
> >     idx4 = idx3 <: _+1-(len*(_>=255.0));
> >
> >     v0 = 0,(blend_a*(idx1+bas)) + (blend_b*(idx1+b_next)) : tab;
> >     v1 = 0,(blend_a*(idx2+bas)) + (blend_b*(idx2+b_next)) : tab;
> >     v2 = 0,(blend_a*(idx3+bas)) + (blend_b*(idx3+b_next)) : tab;
> >     v3 = 0,(blend_a*(idx4+bas)) + (blend_b*(idx4+b_next)) : tab;
> > };
> >
> > os_wt_a = os_wt(os_freq_a,os_wav_a,256,ma.SR,127,tab1);
> > os_wt_b = os_wt(os_freq_b,os_wav_b,256,ma.SR,127,tab2);
> >
> > process = os_wt_a,os_wt_b :> _*volume;
> >
> >
> > _______________________________________________
> > 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