Thak-you Stéphane,
I've read the recursion paragraph many times! :-D
By the way, it was my code that was buggy, because I had a division by
zero error...very noob fault!
Here is my working version, checking before that loopSize is bigger than
zero:
readIndex = ba.if(loopSize>0, ((_~+(1) : %(loopSize)) : int) , 0)
and this is the final version with speed and loop length:
import("stdfaust.lib");
sampleRate = 48000;
maxTime = 1;
maxSamples = sampleRate * maxTime;
btn = button("[5]trigger");
readSpeed = hslider("[3]read_speed", 1, -3, 3, 0.1) : si.smoo;
loopLength = hslider("[4]loop_length", 1, 0, 1, 0.01);
loopSize = ba.sAndH(btn, fi.pole(btn, btn)) : int :
hbargraph("[0]loop_size", 0, maxSamples);
readIndex = ba.if((loopSize * loopLength)>0, ((_~+(1 * readSpeed) :
%(loopSize * loopLength)) : int) , 0) : hbargraph("
[1]read_index", 0, maxSamples);
recIndex = (+(1) : %(maxSamples)) ~ *(btn) : int :
hbargraph("[2]rec_index", 0, maxSamples);
looper = rwtable(maxSamples,0.0,recIndex,_,readIndex);
process = looper <: _,_;
It needs more work to become usable but in my journey to understand
faust pattern language it covered a lot of topics.
Thanks a lot!
Daniele
On 22/12/20 14:53, Stéphane Letz wrote:
Le 22 déc. 2020 à 14:29, Daniele Pagliero <daniele.pagli...@gmail.com> a écrit :
this statement is clear:
recIndex = (+(1) : %(maxSamples)) ~ *(btn)
and I can translate it in something like:
recIndex = ((recIndex + 1) % maxSamples) * btn
No, you cannot write the second version with « recIndex » appearing on both
sides.
I suggest you read again the documentation of the recursive operator:
https://faustdoc.grame.fr/manual/syntax/#recursive-composition
And possibly this workshop that implements a phasor using a recursion:
https://faustdoc.grame.fr/workshops/2018-12-01-paw/ ?
Stéphane
_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-users