Thanks Steven, this has pointed me in the right direction. On Sat, 20 Mar 2021 at 06:51, Steven Kraninger <skranin...@gmail.com> wrote:
> Damien, > > Here is a possible feedback scheme. Probably not what you want, but should > get you started. > > import("stdfaust.lib"); > tableSize = 48000; > > recIndex = (+(1) : %(tableSize)) ~ *(record); > readIndex = readSpeed/float(ma.SR) : (+ : ma.frac) ~ _ : *(float(tableSize > )) : int; > readSpeed = hslider("[0]Read Speed",1,0.001,10,0.01); > record = button("[1]Record") : int; > > looper = rwtable(tableSize,0.0,recIndex,_,readIndex); > > fooSum = _*5 + _; > > odLooper = ((_*feedBack + _ : looper) ~ _) : _ > with { > feedBack = hslider("[3]OverDub",0.0,0.0,1.0,0.01); > }; > > process = odLooper; > > > Steven Kraninger > > On Tue, Mar 16, 2021 at 2:02 AM Damien Clarke <dxinteract...@gmail.com> > wrote: > >> Hi, Faust has been fantastic, but I've recently become completely stuck. >> I'd like to make a looper that can overdub. The sample code for making a >> looper is very close to what I'd like. >> >> import("stdfaust.lib"); tableSize = 48000; recIndex = (+(1) : >> %(tableSize)) ~ *(record); readIndex = readSpeed/float(ma.SR) : (+ : >> ma.frac) ~ _ : *(float(tableSize)) : int; readSpeed = hslider("[0]Read >> Speed",1,0.001,10,0.01); record = button("[1]Record") : int; looper = >> rwtable(tableSize,0.0,recIndex,_,readIndex); process = looper; >> I'd like to change this so that each iteration, it reads the value in the >> rwtable at recIndex, adds the incoming value from process, and writes the >> resulting value back to the rwtable. So then I can hold down the Record >> button and it will overdub the signal as the record head passes multiple >> times over the length of the table. But I can't find a way to do this that >> doesn't create a second rwtable. Like this obviously doesn't work because I >> assume I can't make the two "table" function calls reference the same >> table. (please ignore the fact I'm writing 0 to the table, I also can't >> work out how to not write to the table, so I'm just dumping the incoming >> signal at index 0 for now) >> >> >> import("stdfaust.lib"); >> tableSize = 48000; >> recIndex = (+(1) : %(tableSize)) ~ *(record); >> readIndex = readSpeed/float(ma.SR) : (+ : ma.frac) ~ _ : *(float( >> tableSize)) : int; >> readSpeed = hslider("[0]Read Speed",1,0.001,10,0.01); >> record = button("[1]Record") : int; >> table(a,b) = rwtable(tableSize,0.0,a,_,b); >> looper = _ <: table(0,recIndex),_ :> table(recIndex,readIndex); >> process = looper; >> >> Any ideas how to do this? My gut feeling is that it's impossible, or must >> use recursion in a way that I'm not good enough to figure it out. Using @ >> isn't an option in this case because I need control over the position of >> the playhead and record head. >> >> This user had a very similar question 12 years ago but with no replies >> https://sourceforge.net/p/faudiostream/mailman/faudiostream-devel/thread/4A26F5CB.8060703%40kymatica.com/#msg22644411 >> >> Thanks, >> Damien >> >> _______________________________________________ >> 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