Hi all,
I'm trying to make a 4OP fm synth in faust. Something in my code is
triggering an endless loop. I'm pretty sure its the interdependence of the
operators but I can't see how to resolve it.

Here is my code:

import("stdfaust.lib");
import("maths.lib");

bandwidth(carrierFreq,modulatorFreq) = 2*((modulatorFreq-carrierFreq)+
modulatorFreq);

scaleIndex(index,carrierFreq,modulatorFreq) = (1-((carrierFreq+bandwidth(
carrierFreq,modulatorFreq)) / SR))*index;

scaling(index,carrierFreq,modulatorFreq) = scaleIndex(index,carrierFreq,
modulatorFreq);

op(fc,index,fb,env,mod) = env*os.osc(fc+(mod+_)*index)~_*fb;

four_op(
freq,
ratio1,ratio2,ratio3,ratio4,
env1,env2,env3,env4,
gain1,gain2,gain3,gain4,
aa, ab, ac, ad,
ba, bb, bc, bd,
ca, cb, cc, cd,
da, db, dc, dd
) = signal
with {
signal = gain1*op1+gain2*op2+gain3*op3+gain4*op4;
op1 = op(fa,1,s_aa,env1,0);
op2 = op(fb,1,s_bb,env2,0);
op3 = op(fc,1,s_cc,env3,mod3''');
op4 = op(fd,1,s_dd,env4,mod4''');
mod1 = op2'*s_ba + op3'*s_ca + op4'*s_da;
mod2 = op1'*s_ab + op3'*s_cb + op4'*s_db;
mod3 = op1'*s_ac + op2'*s_bc + op4'*s_dc;
mod4 = op1'*s_ad + op2'*s_bd + op3'*s_cd;
s_aa = scaling(aa,fa,fa);
s_ab = scaling(ab,fb,fa);
s_ac = scaling(ac,fc,fa);
s_ad = scaling(ad,fd,fa);
s_ba = scaling(aa,fa,fb);
s_bb = scaling(ab,fb,fb);
s_bc = scaling(ac,fc,fb);
s_bd = scaling(ad,fd,fb);
s_ca = scaling(aa,fa,fc);
s_cb = scaling(ab,fb,fc);
s_cc = scaling(ac,fc,fc);
s_cd = scaling(ad,fd,fc);
s_da = scaling(aa,fa,fd);
s_db = scaling(ab,fb,fd);
s_dc = scaling(ac,fc,fd);
s_dd = scaling(ad,fd,fd);
fa = freq*ratio1;
fb = freq*ratio2;
fc = freq*ratio3;
fd = freq*ratio4;

};

process = four_op;
_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-users

Reply via email to