Hi everyone, I'm working on an application for smartphone or tablet, it's an audio recorder based on the rwtable function. I started this work following the example illustrated in the Faust Kadenze Course (session 5): *https://www.kadenze.com/courses/real-time-audio-signal-processing-in-faust/sessions/sound-synthesis-and-processing-ii-filters-echo-basic-physical-modeling-sampling-and-granular-synthesis <https://www.kadenze.com/courses/real-time-audio-signal-processing-in-faust/sessions/sound-synthesis-and-processing-ii-filters-echo-basic-physical-modeling-sampling-and-granular-synthesis>*
After, I've added some effects and the possibility to play the sound
recorded without looping it. I did this in a "handmade" way: basically, I
transformed "rec_Index" and "read_Index" in two counters ("counter_rec" and
"counter_read"), and using the function ba.if I allowed them to count only
till 1. In this way, rec_Index and read_Index arrive till the end of the
tableSize and then they stop.
I have no errors in the code, but the "noloop option" doesn't work at all.
I think the problem is related to the select2 in the process function: if I
change the position of "looper_final" and "noloop_final", the noloop option
works good and the other doesn't work.
What am I doing wrong? Is there a more efficient way to implement the
"noloop" function?
Thanks a lot in advance!
Matteo
import("stdfaust.lib");
//================= RECORDER =====================//
//Loop
looper = rwtable(tableSize, 0.0, recIndex, _, readIndex)
with {
recIndex = (+(1) : %(tableSize)) ~ *(startrecord);
readIndex = (readSpeed/tableSize : (+ : ma.decimal) ~ _ :
*(float(tableSize)) : int) * startread;
};
readSpeed = hslider ("Read Speed", 1, 0.001, 10, 0.001);
startrecord = button("[3]RECORD") : int;
startread = button("[4]READ") : int;
tableSize = 4*48000; //4 seconds loop
//No Loop
noloop = rwtable(tableSize, 0.0, ba.if (limiter_cycle_rec <=1, rec_Index,
0), _, ba.if (limiter_cycle_read <=1, read_Index, 0))
with {
//Read_Index_noloop
read_Index = (readSpeed/tableSize : (+ : ma.decimal) ~ _ :
*(float(tableSize)) : int) * startread;
counter_read = ba.if (read_Index == (tableSize-1), 1, 0);
limiter_cycle_read = counter_read : ba.pulse_countup (startread); //It
limits the function to one cycle / reset when button "startread" is
released
//Rec_Index_noloop
rec_Index = (+(1) : %(tableSize)) ~ *(startrecord);
counter_rec = ba.if (rec_Index == (tableSize-1), 1, 0);
limiter_cycle_rec = counter_rec : ba.pulse_countup (startrecord);
};
//================= EFFECTS =====================//
//Echo
echo(duration,feedback) = hgroup ("[5]Echo",
+~de.delay(50000,del)*(feedback))
with{
del = duration*ma.SR;
};
duration = hslider("duration echo",0.25,0,1,0.01);
feedback = hslider("feedback",0.5,0,1,0.01);
//Vocoder
gainvoc = 0.95;
select_effect = hslider ("[2]ECHO / VOCODER", 0, 0, 1, 1);
//================= PROCESS =====================//
selectinput = hslider ("[1]LOOP / NO LOOP", 0, 0, 1, 1);
looper_final = (((looper : echo (duration, feedback)), (ve.vocoder
(8,0.0005,0.003,0.1, looper, (os.lf_imptrain (120) * gainvoc)))) :
select2(select_effect));
noloop_final = (((noloop : echo (duration, feedback)), (ve.vocoder
(8,0.0005,0.003,0.1, noloop, (os.lf_imptrain (120) * gainvoc)))) :
select2(select_effect));
process = ((looper_final, noloop_final) : select2 (selectinput));
Enregistreur_Tablet.dsp
Description: Binary data
_______________________________________________ Faudiostream-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/faudiostream-users
