diff options
author | rekado <rekado@elephly.net> | 2016-09-06 22:13:03 +0200 |
---|---|---|
committer | rekado <rekado@elephly.net> | 2016-09-06 23:31:22 +0200 |
commit | 8a4bca986c57062e96f1e58281b3eff52a856ee6 (patch) | |
tree | 11b125b567c212739a6585862628f0565f51ce35 /objects/faust |
Initial commit.
Diffstat (limited to 'objects/faust')
-rw-r--r-- | objects/faust/karplus.axo | 98 | ||||
-rw-r--r-- | objects/faust/moog_vcf.axo | 205 | ||||
-rw-r--r-- | objects/faust/phaser_mono.wip | 90 | ||||
-rw-r--r-- | objects/faust/phaser_mono_float.axo | 36 | ||||
-rw-r--r-- | objects/faust/phaser_mono_float.cpp | 129 | ||||
-rw-r--r-- | objects/faust/phaser_stereo_float.axo | 70 | ||||
-rw-r--r-- | objects/faust/phaser_stereo_float.cpp | 215 | ||||
-rw-r--r-- | objects/faust/phaser_stereo_optimised.axo | 180 |
8 files changed, 1023 insertions, 0 deletions
diff --git a/objects/faust/karplus.axo b/objects/faust/karplus.axo new file mode 100644 index 0000000..60035a6 --- /dev/null +++ b/objects/faust/karplus.axo @@ -0,0 +1,98 @@ +<objdefs> + <obj.normal id="karplus" uuid="36d552a0297885559841ed95a25ec5e5589bf5c3" sha="39267e0b01468fb54a8799d8114d535c594a007b"> + <sDescription>Karplus (from Faust)</sDescription> + <author>Ricardo Wurmus</author> + <license>GPL</license> + <helpPatch>filter.axh</helpPatch> + <outlets> + <frac32buffer.bipolar name="out" description="filter output"/> + </outlets> + <params> + <bool32.mom name="b" noLabel="true"/> + <frac32.s.map name="a"/> + </params> + <displays/> + <includes> + <include>arm_math.h</include> + </includes> + <attribs/> + <code.declaration><![CDATA[ + // convert float to fixed point notation + // * take absolute value + // * multiply with constant to keep precision; + // to get a fixed point at x:y we multiply by 2^y, + // e.g. for 24:8 (24 significant bits before decimal point) + // we multiply f by 2^8 (1<<8). + // * truncate and cast to int32_t + // * invert bits if negative + int32_t floatToFrac32(float f) { + // was 1 000 000 000 and then >> 2 + // now is 2^27 = 134 217 728 + // 2^32 = 4 294 967 296 + // 2^29 = 536 870 912 (3:29) + int32_t preout = int32_t(((f < 0) ? (-f) : f) * (1<<29)); + return ((f < 0) ? ~preout : preout); + } + // convert fixed point to float + // * invert bits if sign bit is set (0x08000000, or (1<<27)) + // * cast int to float + // * divide by constant to shift decimal point + // * multiply by -1 if sign bit was set + float frac32ToFloat(int32_t frac) { + bool neg = (((1<<27) & frac) != 0); + float res = (float)(neg ? frac : ~frac); + res = res / (float(1<<29)); + return (neg ? (-1 * res) : res); + } + + float fslider0; + float fVec0[2]; + float fRec1[2]; + int iRec2[2]; + float fslider1; + float fslider2; + int IOTA; + float fVec1[512]; + float fslider3; + float fRec0[3]; +]]></code.declaration> + <code.init><![CDATA[ + fslider0 = 128.0f; // duration or excitation + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) iRec2[i] = 0; + fslider1 = 0.5f; // level + fslider2 = 0.01f; // attenuation, was 0.1f + IOTA = 0; + for (int i=0; i<512; i++) fVec1[i] = 0; + fslider3 = 128.0f; // duration or excitation + for (int i=0; i<3; i++) fRec0[i] = 0; +]]></code.init> + <code.krate><![CDATA[ + float fSlow0 = (1.0f / float(fslider0)); + float fSlow1 = float(param_b); + float fSlow2 = (4.656612875245797e-10f * float(fslider1)); + float fSlow3 = (0.5f * (1.0f - float(fslider2))); + int iSlow4 = int((int((float(fslider3) - 1.5f)) & 4095)); + + int32_t* output0 = outlet_out; + for (int i=0; i<BUFSIZE; i++) { + fVec0[0] = fSlow1; + fRec1[0] = ((fRec1[1] + ((fSlow1 - fVec0[1]) > 0.0f)) - (fSlow0 * (fRec1[1] > 0.0f))); + iRec2[0] = (12345 + (1103515245 * iRec2[1])); + fVec1[IOTA&511] = ((fSlow3 * (fRec0[1] + fRec0[2])) + (fSlow2 * (iRec2[0] * (fRec1[0] > 0.0f)))); + fRec0[0] = fVec1[(IOTA-iSlow4)&511]; + +arm_float_to_q31(&fRec0[0], &output0[i], 0); +// output0[i] = floatToFrac32(fRec0[0]); + + // post processing + fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; + IOTA = IOTA+1; + iRec2[1] = iRec2[0]; + fRec1[1] = fRec1[0]; + fVec0[1] = fVec0[0]; + } +]]></code.krate> + </obj.normal> +</objdefs> diff --git a/objects/faust/moog_vcf.axo b/objects/faust/moog_vcf.axo new file mode 100644 index 0000000..8abb697 --- /dev/null +++ b/objects/faust/moog_vcf.axo @@ -0,0 +1,205 @@ +<objdefs> + <obj.normal id="moog_vcf" uuid="9329f089dced01ba64f7e22ac77fd78fbec47db9" sha="6b8d84e43d5934e94f32e1d50318f8feede69769"> + <sDescription>Moog VCF (from Faust)</sDescription> + <author>Ricardo Wurmus</author> + <license>GPL</license> + <helpPatch>filter.axh</helpPatch> + <includes> + <include>math.h</include> + </includes> + <inlets> + <frac32buffer name="in" description="filter input"/> + </inlets> + <outlets> + <frac32buffer name="out" description="filter output"/> + </outlets> + <displays/> + <attribs/> + <code.declaration><![CDATA[ + // convert float to fixed point notation + // * take absolute value + // * multiply with constant to keep precision; + // to get a fixed point at x:y we multiply by 2^y, + // e.g. for 24:8 (24 significant bits before decimal point) + // we multiply f by 2^8 (1<<8). + // * truncate and cast to int32_t + // * invert bits if negative + int32_t floatToFrac32(float f) { + // was 1 000 000 000 and then >> 2 + // now is 2^27 = 134 217 728 + // 2^32 = 4 294 967 296 + // 2^29 = 536 870 912 (3:29) + int32_t preout = int32_t(((f < 0) ? (-f) : f) * (1<<29)); + return ((f < 0) ? ~preout : preout); + } + // convert fixed point to float + // * invert bits if sign bit is set (0x08000000, or (1<<27)) + // * cast int to float + // * divide by constant to shift decimal point + // * multiply by -1 if sign bit was set + float frac32ToFloat(int32_t frac) { + bool neg = (((1<<27) & frac) != 0); + float res = (float)(neg ? frac : ~frac); + res = res / (float(1<<29)); + return (neg ? (-1 * res) : res); + } + + + float fslider0; + float fslider1; + float fslider2; + float fcheckbox0; + float fcheckbox1; + float fcheckbox2; + + float fRec0[2]; + float fRec1[2]; + float fRec2[2]; + float fRec3[2]; + float fRec4[2]; + float fRec5[2]; + float fRec6[3]; + float fRec7[3]; + float fRec8[2]; + float fRec10[2]; + float fRec11[2]; + float fRec13[2]; + float fRec14[2]; + + float fConst1; + float fConst2; + float fSqrtTwo; + inline float faustpower2(float x) { + return powf(x,2); + } + inline float faustpower4(float x) { + return powf(x,4); + } + + // template <int N> inline float faustpower(float x) { return powf(x,N); } + // template <int N> inline double faustpower(double x) { return pow(x,N); } + // template <int N> inline int faustpower(int x) { return faustpower<N/2>(x) * faustpower<N-N/2>(x); } + // template <> inline int faustpower<0>(int x) { return 1; } + // template <> inline int faustpower<1>(int x) { return x; } +]]></code.declaration> + <code.init><![CDATA[ + fConst1 = ((2 * PI_F) / float(SAMPLERATE)); + fConst2 = (PI_F / float(SAMPLERATE)); + fSqrtTwo = 1.4142135623730951f; + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + fcheckbox2 = 0.0; + fslider0 = 25.0f; + fslider1 = 0.9f; + fslider2 = 5.0f; + + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<3; i++) fRec6[i] = 0; + for (int i=0; i<3; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + +]]></code.init> + <code.krate><![CDATA[ + float fSlow0 = (0.4400000000000004f * powf(2.0f,(0.08333333333333333f * (float(fslider0) - 49.0f)))); + int iSlow1 = int(float(fcheckbox0)); + float fSlow2 = float(fslider1); + float fSlow3 = (0 - (4.0f * fmaxf((float)0, fminf(faustpower4(fSlow2), 0.999999f)))); + float fSlow4 = fminf(1.412799348810722f, (fSqrtTwo * fSlow2)); + float fSlow5 = (fSqrtTwo * fSlow4); + float fSlow6 = 2 - fSlow5; + float fSlow7 = 1 + (fSlow4 * (fSlow4 - fSqrtTwo)); + float fSlow8 = 2 + fSlow5; + float fSlow9 = 1 + (fSlow4 * (fSqrtTwo + fSlow4)); + float fSlow10 = 2 * fSlow2; + float fSlow11 = 2 - fSlow10; + float fSlow12 = faustpower2((1.412799348810722f * fSlow2)); + float fSlow13 = ((1 + fSlow12) - fSlow10); + float fSlow14 = (2 + fSlow10); + float fSlow15 = (1 + (fSlow10 + fSlow12)); + int iSlow16 = int(float(fcheckbox1)); + int iSlow17 = int(float(fcheckbox2)); + float fSlow18 = (0.001f * powf(10,(0.05f * float(fslider2)))); + //const int32_t* input0 = inlet_in; + int32_t* output0 = outlet_out; + for (int i=0; i<BUFSIZE; i++) { + fRec1[0] = (fSlow0 + (0.999f * fRec1[1])); + float fTemp0 = (fConst1 * fRec1[0]); + float fTemp1 = (1.0f - fTemp0); + float fTemp2 = frac32ToFloat(inlet_in[i]); + float fTemp3 = ((iSlow1)?0:fTemp2); + fRec5[0] = ((fSlow3 * fRec0[1]) + (fTemp3 + (fTemp1 * fRec5[1]))); + fRec4[0] = (fRec5[0] + (fTemp1 * fRec4[1])); + fRec3[0] = (fRec4[0] + (fTemp1 * fRec3[1])); + fRec2[0] = (fRec3[0] + (fRec2[1] * fTemp1)); + fRec0[0] = (fRec2[0] * powf(fTemp0,4.0f)); + float fTemp4 = tanf((fConst2 * fmaxf((float)20, fminf((float)10000, fRec1[0])))); + float fTemp5 = (1.0f / fTemp4); + float fTemp6 = (fSlow7 + ((fSlow6 + fTemp5) / fTemp4)); + float fTemp7 = (1.0f / faustpower2(fTemp4)); + float fTemp8 = (fSlow9 + ((fSlow8 + fTemp5) / fTemp4)); + fRec7[0] = (fTemp3 - (((fRec7[2] * (fSlow9 + ((fTemp5 - fSlow8) / fTemp4))) + (2 * (fRec7[1] * (fSlow9 - fTemp7)))) / fTemp8)); + fRec6[0] = (((fRec7[2] + (fRec7[0] + (2.0f * fRec7[1]))) / fTemp8) - (((fRec6[2] * (fSlow7 + ((fTemp5 - fSlow6) / fTemp4))) + (2 * (fRec6[1] * (fSlow7 - fTemp7)))) / fTemp6)); + float fTemp9 = tanf((fConst2 * fmaxf(fRec1[0], (float)20))); + float fTemp10 = (1.0f / fTemp9); + float fTemp11 = (fSlow13 + ((fSlow11 + fTemp10) / fTemp9)); + float fTemp12 = ((fSlow13 + ((fTemp10 - fSlow11) / fTemp9)) / fTemp11); + float fTemp13 = (1.0f / faustpower2(fTemp9)); + float fTemp14 = (fSlow13 - fTemp13); + float fTemp15 = fmaxf(-0.9999f, fminf(0.9999f, (2 * (fTemp14 / (fTemp11 * (1 + fTemp12)))))); + float fTemp16 = (1 - faustpower2(fTemp15)); + float fTemp17 = fmaxf(-0.9999f, fminf(0.9999f, fTemp12)); + float fTemp18 = (1 - faustpower2(fTemp17)); + float fTemp19 = sqrtf(fTemp18); + float fTemp20 = (2.0f - (2.0f * (fTemp14 / fTemp11))); + float fTemp21 = sqrtf(fmaxf((float)0, fTemp16)); + float fTemp22 = (fSlow15 + ((fSlow14 + fTemp10) / fTemp9)); + float fTemp23 = sqrtf(fmaxf((float)0, fTemp18)); + float fTemp24 = ((fSlow15 + ((fTemp10 - fSlow14) / fTemp9)) / fTemp22); + float fTemp25 = (fSlow15 - fTemp13); + float fTemp26 = fmaxf(-0.9999f, fminf(0.9999f, (2 * (fTemp25 / (fTemp22 * (1 + fTemp24)))))); + float fTemp27 = (1 - faustpower2(fTemp26)); + float fTemp28 = fmaxf(-0.9999f, fminf(0.9999f, fTemp24)); + float fTemp29 = (1 - faustpower2(fTemp28)); + float fTemp30 = sqrtf(fTemp29); + float fTemp31 = (2.0f - (2.0f * (fTemp25 / fTemp22))); + float fTemp32 = sqrtf(fmaxf((float)0, fTemp27)); + float fTemp33 = sqrtf(fmaxf((float)0, fTemp29)); + float fTemp34 = ((fRec11[1] * (0 - fTemp28)) + (fTemp3 * fTemp33)); + fRec13[0] = ((fRec13[1] * (0 - fTemp26)) + (fTemp34 * fTemp32)); + fRec11[0] = ((fTemp34 * fTemp26) + (fRec13[1] * fTemp32)); + float fRec12 = fRec13[0]; + float fTemp35 = ((((fTemp3 * fTemp28) + (fRec11[1] * fTemp33)) + ((fRec11[0] * fTemp31) / fTemp30)) + ((fRec12 * ((1.0f - fTemp24) - (fTemp26 * fTemp31))) / (fTemp30 * sqrtf(fTemp27)))); + float fTemp36 = ((fRec8[1] * (0 - fTemp17)) + ((fTemp35 * fTemp23) / fTemp22)); + fRec10[0] = ((fRec10[1] * (0 - fTemp15)) + (fTemp36 * fTemp21)); + fRec8[0] = ((fTemp36 * fTemp15) + (fRec10[1] * fTemp21)); + float fRec9 = fRec10[0]; + fRec14[0] = ((0.999f * fRec14[1]) + fSlow18); + float fTemp37 = ((iSlow1)?fTemp2:(fRec14[0] * ((iSlow17)?((iSlow16)?((((((fTemp35 * fTemp17) / fTemp22) + (fRec8[1] * fTemp23)) + ((fRec8[0] * fTemp20) / fTemp19)) + ((fRec9 * ((1.0f - fTemp12) - (fTemp15 * fTemp20))) / (fTemp19 * sqrtf(fTemp16)))) / fTemp11):((fRec6[2] + (fRec6[0] + (2.0f * fRec6[1]))) / fTemp6)):fRec0[0]))); + output0[i] = floatToFrac32(fTemp37); + // post processing + fRec14[1] = fRec14[0]; + fRec8[1] = fRec8[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec13[1] = fRec13[0]; + fRec6[2] = fRec6[1]; fRec6[1] = fRec6[0]; + fRec7[2] = fRec7[1]; fRec7[1] = fRec7[0]; + fRec0[1] = fRec0[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec1[1] = fRec1[0]; + } +]]></code.krate> + </obj.normal> +</objdefs> diff --git a/objects/faust/phaser_mono.wip b/objects/faust/phaser_mono.wip new file mode 100644 index 0000000..9966c00 --- /dev/null +++ b/objects/faust/phaser_mono.wip @@ -0,0 +1,90 @@ + + virtual void instanceInit(int samplingFreq) { + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + // TODO: find replacements for: expf, cosf, sinf + // values must be scaled to fit into the range expected by arm_{cos,sin}_q31 + // they all take radians! + // cosf --> arm_cos_q31 + // sinf --> arm_sin_q31 + + int32_t fSlow0 = param_fcheckbox0 ? 0x00200000 /*"1"*/ : (param_fslider0>>1); + int32_t fSlow1 = param_fcheckbox1 ? __QSUB(0, fSlow0) : fSlow0; + // TODO: find replacement for expf + // e ^ -1 * const1 * pi * slider3 + // It's a value between 0.72 and 1.0, but for now we pretend it's just the value of fslider3. + // float fSlow4 = expf((fConst1 * (0 - (3.141592653589793f * float(fslider3))))); + int32_t fSlow4 = param_fslider3; + int32_t fSlow5 = __SMMUL(fSlow4, fSlow4); + int32_t fSlow6 = __SMMUL(fConst2, param_fslider4); + int32_t fSlow7 = arm_cos_q31(fSlow6); + int32_t fSlow8 = arm_sin_q31(fSlow6); + int32_t fSlow9 = __QSUB(0, fSlow8); + int32_t fSlow11 = ___SMMUL(TAU, param_fslider5); + int32_t fSlow12 = (__SMMUL(TAU, MAX(param_fslider5, param_fslider6)) - fSlow11) >>1; + int32_t fSlow15 = __QSUB(0, fSlow4<<1); + int32_t fSlow14 = __SMMUL(fConst1, param_fslider7); + int32_t fSlow16 = __SMMUL(fSlow14, param_fslider7); + int32_t fSlow17 = __SMMUL(fSlow16, param_fslider7); + int32_t fSlow18 = __SMMUL(fSlow17, param_fslider7); + int32_t fSlow19 = __QSUB(1, fSlow0); + + int32_t* input0 = input[0]; + int32_t* input1 = input[1]; + int32_t* output0 = output[0]; + int32_t* output1 = output[1]; + + for (int i=0; i<BUFSIZE; i++) { + iVec0[0] = 1; + fRec5[0] = fSlow8 * fRec6[1] + fSlow7 * fRec5[1]; + fRec6[0] = (1 + ((fSlow7 * fRec6[1]) + (fSlow9 * fRec5[1]))) - iVec0[1]; + + { + int32_t fTemp0 = input0[i]; + int32_t fTemp1 = fSlow11 + (fSlow12 * (1 - fRec5[0])); + int32_t fTemp2 = fRec4[1] * cosf((fSlow14 * fTemp1)); + fRec4[0] = __QSUB(0, ((__SMMUL(fSlow15, fTemp2) + __SMMUL(fSlow5, fRec4[2])) - (fTemp0 + __SMMUL(param_fslider1, fRec0[1])))); + int32_t fTemp3 = fRec3[1] * cosf((fSlow16 * fTemp1)); + fRec3[0] = (fSlow15 * (fTemp2 - fTemp3)) + (fRec4[2] + (fSlow5 * (fRec4[0] - fRec3[2]))); + int32_t fTemp4 = (fRec2[1] * cosf((fSlow17 * fTemp1))); + fRec2[0] = (fSlow15 * (fTemp3 - fTemp4)) + (fRec3[2] + (fSlow5 * (fRec3[0] - fRec2[2]))); + int32_t fTemp5 = fRec1[1] * cosf((fSlow18 * fTemp1)); + fRec1[0] = (fSlow15 * (fTemp4 - fTemp5)) + (fRec2[2] + (fSlow5 * (fRec2[0] - fRec1[2]))); + fRec0[0] = (fSlow5 * fRec1[0]) + ((fSlow15 * fTemp5) + fRec1[2]); + output0[i] = (fTemp0 * fSlow19) + (fRec0[0] * fSlow1); + } + + { + int32_t fTemp6 = input1[i]; + int32_t fTemp7 = fSlow11 + (fSlow12 * (1 - fRec6[0])); + int32_t fTemp8 = fRec11[1] * cosf(__SMMUL(fSlow14, fTemp7)); + fRec11[0] = __QSUB(0, (__SMMUL(fSlow15, fTemp8) + __SMMUL(fSlow5, fRec11[2]) - (fTemp6 + __SMMUL(param_fslider1, fRec7[1])))); + int32_t fTemp9 = fRec10[1] * cosf(__SMMUL(fSlow16, fTemp7)); + fRec10[0] = ((fSlow15 * (fTemp8 - fTemp9)) + (fRec11[2] + (fSlow5 * (fRec11[0] - fRec10[2])))); + int32_t fTemp10 = fRec9[1] * cosf(__SMMUL(fSlow17, fTemp7)); + fRec9[0] = ((fSlow15 * (fTemp9 - fTemp10)) + (fRec10[2] + (fSlow5 * (fRec10[0] - fRec9[2])))); + int32_t fTemp11 = fRec8[1] * cosf(__SMMUL(fSlow18, fTemp7)); + fRec8[0] = ((fSlow15 * (fTemp10 - fTemp11)) + (fRec9[2] + (fSlow5 * (fRec9[0] - fRec8[2])))); + fRec7[0] = ((fSlow5 * fRec8[0]) + ((fSlow15 * fTemp11) + fRec8[2])); + output1[i] = (fTemp6 * fSlow19) + (fRec7[0] * fSlow1); + } + + // post processing + fRec7[1] = fRec7[0]; + fRec8[2] = fRec8[1]; fRec8[1] = fRec8[0]; + fRec9[2] = fRec9[1]; fRec9[1] = fRec9[0]; + fRec10[2] = fRec10[1]; fRec10[1] = fRec10[0]; + fRec11[2] = fRec11[1]; fRec11[1] = fRec11[0]; + fRec0[1] = fRec0[0]; + fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; + fRec2[2] = fRec2[1]; fRec2[1] = fRec2[0]; + fRec3[2] = fRec3[1]; fRec3[1] = fRec3[0]; + fRec4[2] = fRec4[1]; fRec4[1] = fRec4[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + iVec0[1] = iVec0[0]; + } + } +}; + + diff --git a/objects/faust/phaser_mono_float.axo b/objects/faust/phaser_mono_float.axo new file mode 100644 index 0000000..f2d990c --- /dev/null +++ b/objects/faust/phaser_mono_float.axo @@ -0,0 +1,36 @@ +<objdefs> + <obj.normal id="phaser_mono_float" uuid="d2dad834546ee8864e74efad2a1e9b1d7e26ace8" sha="f3858c3689b98a6a07f4a083d6854e56fe5ba43b"> + <sDescription>Phaser Mono (from Faust)</sDescription> + <author>Ricardo Wurmus</author> + <license>GPL</license> + <helpPatch/> + <inlets> + <frac32buffer name="in" description="in"/> + </inlets> + <outlets> + <frac32buffer.bipolar name="out" description="output"/> + </outlets> + <params> + <!-- values are given as: default, min, max, increment? --> + <!-- 0.5f, 0.0f, 1e+01f, 0.01f --> + <frac32.u.map description="Speed (Hz)" name="speed"/> + </params> + <displays/> + <attribs/> + <includes> + <include>./phaser_mono_float.cpp</include> + </includes> + <code.declaration><![CDATA[ +Dsp phaser; +]]></code.declaration> + <code.init><![CDATA[ + phaser.init(48000); + ]]></code.init> + <code.krate><![CDATA[ + phaser.compute(BUFSIZE, + &inlet_in, + &outlet_out[0], + param_speed); +]]></code.krate> + </obj.normal> +</objdefs> diff --git a/objects/faust/phaser_mono_float.cpp b/objects/faust/phaser_mono_float.cpp new file mode 100644 index 0000000..d3cc774 --- /dev/null +++ b/objects/faust/phaser_mono_float.cpp @@ -0,0 +1,129 @@ +//----------------------------------------------------- +// name: "Phaser Mono" +// +// Code generated with Faust 0.9.67 (http://faust.grame.fr) +//----------------------------------------------------- +/* link with */ +#ifndef FAUSTPOWER +#define FAUSTPOWER +#define faustpower4(x) ((x)*(x)*(x)*(x)) +#define faustpower3(x) ((x)*(x)*(x)) +#define faustpower2(x) ((x)*(x)) +#define max(a, b) ((a) > (b) ? (a) : (b)) +#define min(a, b) ((a) < (b) ? (a) : (b)) +#endif +//---------------------------------------------------------------------------- +// FAUST generated signal processor +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class Dsp { + private: + int iVec0[2]; + int iConst0; + float fConst1; + float fConst2; + FAUSTFLOAT speed; //default: 0.5f; range: 0..10 + float fConst3; + float fRec5[2]; + float fRec6[2]; + float fConst4; + float fConst5; + float fRec4[3]; + float fConst6; + float fRec3[3]; + float fConst7; + float fRec2[3]; + float fConst8; + float fRec1[3]; + float fRec0[2]; + public: + static void classInit(int samplingFreq) { + } + virtual void instanceInit(int samplingFreq) { + int fSamplingFreq = samplingFreq; + for (int i=0; i<2; i++) iVec0[i] = 0; + iConst0 = min(192000, max(1, fSamplingFreq)); + fConst1 = 0.9366460212365959; //expf((0 - (3141.592653589793f / float(iConst0)))); + fConst2 = faustpower2(fConst1); + speed = 0.5f; + fConst3 = (6.283185307179586f / float(iConst0)); + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + fConst4 = (2.0f / float(iConst0)); + fConst5 = (0 - (2 * fConst1)); + for (int i=0; i<3; i++) fRec4[i] = 0; + fConst6 = (4.0f / float(iConst0)); + for (int i=0; i<3; i++) fRec3[i] = 0; + fConst7 = (8.0f / float(iConst0)); + for (int i=0; i<3; i++) fRec2[i] = 0; + fConst8 = (16.0f / float(iConst0)); + for (int i=0; i<3; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + // convert fixed point to float + // * invert bits if sign bit is set (0x08000000, or (1<<27)) + // * cast int to float + // * divide by constant to shift decimal point + // * multiply by -1 if sign bit was set + float ConvertFracToFloat(int32_t frac) { + bool neg = (((1<<27) & frac) != 0); + float res = (float)(neg ? frac : ~frac); + res = res / (float(1<<29)); + return (neg ? (-1 * res) : res); + } + + virtual void compute (int count, + const int32_t** input, + int32_t* output, + int32_t speed) { + float fSlow0 = 100; + float fSlow1 = 0.01f * fSlow0; + float fSlow2 = (fConst3 * 10*ConvertFracToFloat(speed)); + float fSlow3 = cosf(fSlow2); + float fSlow4 = sinf(fSlow2); + float fSlow5 = (0 - fSlow4); + float fSlow6 = (1 - (0.01f * fSlow0)); + const int32_t* input0 = *input; + int32_t* output0 = output; + for (int i=0; i<count; i++) { + iVec0[0] = 1; + float fTemp0 = ConvertFracToFloat(input0[i]); + fRec5[0] = ((fSlow4 * fRec6[1]) + (fSlow3 * fRec5[1])); + fRec6[0] = ((1 + ((fSlow3 * fRec6[1]) + (fSlow5 * fRec5[1]))) - iVec0[1]); + float fTemp1 = (628.3185307179587f + (2199.1148575128555f * (1 - fRec5[0]))); + float fTemp2 = (fRec4[1] * cosf((fConst4 * fTemp1))); + fRec4[0] = (0 - (((fConst5 * fTemp2) + (fConst2 * fRec4[2])) - ((fSlow1 * fTemp0) + (0.5f * fRec0[1])))); + float fTemp3 = (fRec3[1] * cosf((fConst6 * fTemp1))); + fRec3[0] = ((fConst5 * (fTemp2 - fTemp3)) + (fRec4[2] + (fConst2 * (fRec4[0] - fRec3[2])))); + float fTemp4 = (fRec2[1] * cosf((fConst7 * fTemp1))); + fRec2[0] = ((fConst5 * (fTemp3 - fTemp4)) + (fRec3[2] + (fConst2 * (fRec3[0] - fRec2[2])))); + float fTemp5 = (fRec1[1] * cosf((fConst8 * fTemp1))); + fRec1[0] = ((fConst5 * (fTemp4 - fTemp5)) + (fRec2[2] + (fConst2 * (fRec2[0] - fRec1[2])))); + fRec0[0] = ((fConst2 * fRec1[0]) + ((fConst5 * fTemp5) + fRec1[2])); + output0[i] = ConvertFloatToFrac((fSlow6 * fTemp0) - fRec0[0]) <<7; + // post processing + fRec0[1] = fRec0[0]; + fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; + fRec2[2] = fRec2[1]; fRec2[1] = fRec2[0]; + fRec3[2] = fRec3[1]; fRec3[1] = fRec3[0]; + fRec4[2] = fRec4[1]; fRec4[1] = fRec4[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + iVec0[1] = iVec0[0]; + } + } +}; + + diff --git a/objects/faust/phaser_stereo_float.axo b/objects/faust/phaser_stereo_float.axo new file mode 100644 index 0000000..b5632bd --- /dev/null +++ b/objects/faust/phaser_stereo_float.axo @@ -0,0 +1,70 @@ +<objdefs> + <obj.normal id="phaser_stereo_float" uuid="c5fac2db26a58c24e984c8fc7ac529193898cad1" sha="2148880b2a099a2582ec29deabcc2fd80cba0195"> + <sDescription>Phaser Stereo (from Faust)</sDescription> + <author>Ricardo Wurmus</author> + <license>GPL</license> + <helpPatch/> + <inlets> + <frac32buffer name="in" description="in"/> + </inlets> + <outlets> + <frac32buffer.bipolar name="left" description="left output"/> + <frac32buffer.bipolar name="right" description="right output"/> + </outlets> + <params> + <bool32.tgl name="fcheckbox0" description="VibratoMode: direct/vibrato"/> + <bool32.tgl name="fcheckbox1" description="linear/invert"/> + <!-- values are given as: default, min, max, increment? --> + <!-- They all need to be remapped to the -64.0..0..64.0 range --> + + <!-- 1.0f, 0.0f, 1.0f, 0.01f --> + <frac32.u.map description="Depth" name="fslider0"/> + + <!-- 0.0f, 0.0f, 1.0f, 0.01f --> + <frac32.u.map description="feedback gain" name="fslider1"/> + + <!-- 1e+03f, 1e+01f, 5e+03f, 1.0f --> + <frac32.s.map.pitch description="Notch width (Hz)" name="fslider3"/> + + <!-- 0.5f, 0.0f, 1e+01f, 0.01f --> + <frac32.u.map description="Speed (Hz)" name="fslider4"/> + + <!-- 1e+02f, 2e+01f, 5e+03f, 1.0f --> + <frac32.s.map.pitch description="MinNotch1Freq (Hz)" name="fslider5"/> + + <!-- 8e+02f, 2e+01f, 1e+04f, 1.0f --> + <frac32.s.map.pitch description="MaxNotch1Freq (Hz)" name="fslider6"/> + + <!-- 1.5f, 1.1f, 4.0f, 0.01f --> + <frac32.u.map description="NotchFreq (Hz)" name="fslider7"/> + </params> + <displays/> + <attribs/> + <includes> + <include>./phaser_stereo_float.cpp</include> + </includes> + + <code.declaration><![CDATA[ +Dsp phaser; +]]></code.declaration> + <code.init><![CDATA[ + + phaser.init(48000); + ]]></code.init> + <code.krate><![CDATA[ + phaser.compute(BUFSIZE, + &inlet_in, + &outlet_left[0], + &outlet_right[0], + param_fcheckbox0, + param_fcheckbox1, + param_fslider0, + param_fslider1, + param_fslider3, + param_fslider4, + param_fslider5, + param_fslider6, + param_fslider7); +]]></code.krate> + </obj.normal> +</objdefs> diff --git a/objects/faust/phaser_stereo_float.cpp b/objects/faust/phaser_stereo_float.cpp new file mode 100644 index 0000000..9e3e587 --- /dev/null +++ b/objects/faust/phaser_stereo_float.cpp @@ -0,0 +1,215 @@ +//----------------------------------------------------- +// name: "Phaser" +// +// Code generated with Faust 0.9.67 (http://faust.grame.fr) +//----------------------------------------------------- +/* link with */ +#ifndef FAUSTPOWER +#define FAUSTPOWER +#define faustpower4(x) ((x)*(x)*(x)*(x)) +#define faustpower3(x) ((x)*(x)*(x)) +#define faustpower2(x) ((x)*(x)) +#define max(a, b) ((a) > (b) ? (a) : (b)) +#define min(a, b) ((a) < (b) ? (a) : (b)) +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + + This is sample code. This file is provided as an example of minimal + FAUST architecture file. Redistribution and use in source and binary + forms, with or without modification, in part or in full are permitted. + In particular you can create a derived work of this FAUST architecture + and distribute that work under terms of your choice. + + This sample code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + ************************************************************************ + ************************************************************************/ + + +/****************************************************************************** +******************************************************************************* + + VECTOR INTRINSICS + +******************************************************************************* +*******************************************************************************/ + + +/****************************************************************************** +******************************************************************************* + + ABSTRACT USER INTERFACE + +******************************************************************************* +*******************************************************************************/ + +//---------------------------------------------------------------------------- +// FAUST generated signal processor +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class Dsp { +public: + int fSamplingFreq; + FAUSTFLOAT fslider0; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fcheckbox1; + int iVec0[2]; + FAUSTFLOAT fslider1; + FAUSTFLOAT fslider2; + FAUSTFLOAT fslider3; + int iConst0; + float fConst1; + FAUSTFLOAT fslider4; + float fConst2; + float fRec5[2]; + float fRec6[2]; + FAUSTFLOAT fslider5; + FAUSTFLOAT fslider6; + FAUSTFLOAT fslider7; + float fRec4[3]; + float fRec3[3]; + float fRec2[3]; + float fRec1[3]; + float fRec0[2]; + float fRec11[3]; + float fRec10[3]; + float fRec9[3]; + float fRec8[3]; + float fRec7[2]; + + void instanceInit(int samplingFreq) { + fSamplingFreq = samplingFreq; + fslider0 = 1.0f; + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + for (int i=0; i<2; i++) iVec0[i] = 0; + fslider1 = 0.0f; + fslider2 = 0.0f; + fslider3 = 1e+03f; + iConst0 = min(192000, max(1, fSamplingFreq)); + fConst1 = (1.0f / float(iConst0)); + fslider4 = 0.5f; + fConst2 = (6.283185307179586f / float(iConst0)); + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + fslider5 = 1e+02f; + fslider6 = 8e+02f; + fslider7 = 1.5f; + for (int i=0; i<3; i++) fRec4[i] = 0; + for (int i=0; i<3; i++) fRec3[i] = 0; + for (int i=0; i<3; i++) fRec2[i] = 0; + for (int i=0; i<3; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<3; i++) fRec11[i] = 0; + for (int i=0; i<3; i++) fRec10[i] = 0; + for (int i=0; i<3; i++) fRec9[i] = 0; + for (int i=0; i<3; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + } + void init(int samplingFreq) { + instanceInit(samplingFreq); + } + // convert fixed point to float + // * invert bits if sign bit is set (0x08000000, or (1<<27)) + // * cast int to float + // * divide by constant to shift decimal point + // * multiply by -1 if sign bit was set + float ConvertFracToFloat(int32_t frac) { + bool neg = (((1<<27) & frac) != 0); + float res = (float)(neg ? frac : ~frac); + res = res / (float(1<<29)); + return (neg ? (-1 * res) : res); + } + + void compute (int count, + const int32_t** input, + int32_t* left, + int32_t* right, + int param_fcheckbox0, + int param_fcheckbox1, + int param_fslider0, + int param_fslider1, + int param_fslider3, + int param_fslider4, + int param_fslider5, + int param_fslider6, + int param_fslider7) { + float fSlow0 = (0.5f * ((int(float(param_fcheckbox0)))?2:float(fslider0))); + float fSlow1 = ((int(float(param_fcheckbox1)))?(0 - fSlow0):fSlow0); + float fSlow2 = float(fslider1); + float fSlow3 = 10; //powf(10,(0.05f * float(fslider2))); + float fSlow4 = 0.8; //expf((fConst1 * (0 - (3.141592653589793f * float(fslider3))))); + float fSlow5 = faustpower2(fSlow4); + float fSlow6 = (fConst2 * 10*ConvertFracToFloat(param_fslider4)); + float fSlow7 = cosf(fSlow6); + float fSlow8 = sinf(fSlow6); + float fSlow9 = (0 - fSlow8); + float fSlow10 = float(fslider5); + float fSlow11 = (6.283185307179586f * fSlow10); + float fSlow12 = (0.5f * ((6.283185307179586f * max(fSlow10, float(fslider6))) - fSlow11)); + float fSlow13 = float(fslider7); + float fSlow14 = (fConst1 * fSlow13); + float fSlow15 = (0 - (2 * fSlow4)); + float fSlow16 = (fConst1 * faustpower2(fSlow13)); + float fSlow17 = (fConst1 * faustpower3(fSlow13)); + float fSlow18 = (fConst1 * faustpower4(fSlow13)); + float fSlow19 = (1 - fSlow0); + const int32_t* input0 = *input; + const int32_t* input1 = *input; + int32_t* output0 = left; + int32_t* output1 = right; + for (int i=0; i<count; i++) { + iVec0[0] = 1; + float fTemp0 = ConvertFracToFloat(input0[i]); + fRec5[0] = ((fSlow8 * fRec6[1]) + (fSlow7 * fRec5[1])); + fRec6[0] = ((1 + ((fSlow7 * fRec6[1]) + (fSlow9 * fRec5[1]))) - iVec0[1]); + float fTemp1 = (fSlow11 + (fSlow12 * (1 - fRec5[0]))); + float fTemp2 = (fRec4[1] * cosf((fSlow14 * fTemp1))); + fRec4[0] = (0 - (((fSlow15 * fTemp2) + (fSlow5 * fRec4[2])) - ((fSlow3 * fTemp0) + (fSlow2 * fRec0[1])))); + float fTemp3 = (fRec3[1] * cosf((fSlow16 * fTemp1))); + fRec3[0] = ((fSlow15 * (fTemp2 - fTemp3)) + (fRec4[2] + (fSlow5 * (fRec4[0] - fRec3[2])))); + float fTemp4 = (fRec2[1] * cosf((fSlow17 * fTemp1))); + fRec2[0] = ((fSlow15 * (fTemp3 - fTemp4)) + (fRec3[2] + (fSlow5 * (fRec3[0] - fRec2[2])))); + float fTemp5 = (fRec1[1] * cosf((fSlow18 * fTemp1))); + fRec1[0] = ((fSlow15 * (fTemp4 - fTemp5)) + (fRec2[2] + (fSlow5 * (fRec2[0] - fRec1[2])))); + fRec0[0] = ((fSlow5 * fRec1[0]) + ((fSlow15 * fTemp5) + fRec1[2])); + output0[i] = ConvertFloatToFrac((fSlow3 * (fTemp0 * fSlow19)) + (fRec0[0] * fSlow1)); + + float fTemp6 = ConvertFracToFloat(input1[i]); + float fTemp7 = (fSlow11 + (fSlow12 * (1 - fRec6[0]))); + float fTemp8 = (fRec11[1] * cosf((fSlow14 * fTemp7))); + fRec11[0] = (0 - (((fSlow15 * fTemp8) + (fSlow5 * fRec11[2])) - ((fSlow3 * fTemp6) + (fSlow2 * fRec7[1])))); + float fTemp9 = (fRec10[1] * cosf((fSlow16 * fTemp7))); + fRec10[0] = ((fSlow15 * (fTemp8 - fTemp9)) + (fRec11[2] + (fSlow5 * (fRec11[0] - fRec10[2])))); + float fTemp10 = (fRec9[1] * cosf((fSlow17 * fTemp7))); + fRec9[0] = ((fSlow15 * (fTemp9 - fTemp10)) + (fRec10[2] + (fSlow5 * (fRec10[0] - fRec9[2])))); + float fTemp11 = (fRec8[1] * cosf((fSlow18 * fTemp7))); + fRec8[0] = ((fSlow15 * (fTemp10 - fTemp11)) + (fRec9[2] + (fSlow5 * (fRec9[0] - fRec8[2])))); + fRec7[0] = ((fSlow5 * fRec8[0]) + ((fSlow15 * fTemp11) + fRec8[2])); + output1[i] = ConvertFloatToFrac((fSlow3 * (fTemp6 * fSlow19)) + (fRec7[0] * fSlow1)); + // post processing + fRec7[1] = fRec7[0]; + fRec8[2] = fRec8[1]; fRec8[1] = fRec8[0]; + fRec9[2] = fRec9[1]; fRec9[1] = fRec9[0]; + fRec10[2] = fRec10[1]; fRec10[1] = fRec10[0]; + fRec11[2] = fRec11[1]; fRec11[1] = fRec11[0]; + fRec0[1] = fRec0[0]; + fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; + fRec2[2] = fRec2[1]; fRec2[1] = fRec2[0]; + fRec3[2] = fRec3[1]; fRec3[1] = fRec3[0]; + fRec4[2] = fRec4[1]; fRec4[1] = fRec4[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + iVec0[1] = iVec0[0]; + } + } +}; diff --git a/objects/faust/phaser_stereo_optimised.axo b/objects/faust/phaser_stereo_optimised.axo new file mode 100644 index 0000000..c16ac7d --- /dev/null +++ b/objects/faust/phaser_stereo_optimised.axo @@ -0,0 +1,180 @@ +<objdefs> + <obj.normal id="phaser_stereo_optimised" uuid="38e0908ef72eddcefe1acb06ecfdeff201ddf1a9" sha="ae1df574629a5ec71ab34078f5084f686f786742"> + <sDescription>Phaser Stereo (from Faust) hand-optimised</sDescription> + <author>Ricardo Wurmus</author> + <license>GPL</license> + <helpPatch/> + <inlets> + <frac32buffer name="in" description="in"/> + </inlets> + <outlets> + <frac32buffer.bipolar name="left" description="left output"/> + <frac32buffer.bipolar name="right" description="right output"/> + </outlets> + <params> + <bool32.tgl name="fcheckbox0" description="VibratoMode: direct/vibrato"/> + <bool32.tgl name="fcheckbox1" description="linear/invert"/> + <!-- values are given as: default, min, max, increment? --> + <!-- They all need to be remapped to the -64.0..0..64.0 range --> + + <!-- 1.0f, 0.0f, 1.0f, 0.01f --> + <frac32.u.map description="Depth" name="fslider0"/> + + <!-- 0.0f, 0.0f, 1.0f, 0.01f --> + <frac32.u.map description="feedback gain" name="fslider1"/> + + <!-- 1e+03f, 1e+01f, 5e+03f, 1.0f --> + <frac32.s.map.pitch description="Notch width (Hz)" name="fslider3"/> + + <!-- 0.5f, 0.0f, 1e+01f, 0.01f --> + <frac32.u.map description="Speed (Hz)" name="fslider4"/> + + <!-- 1e+02f, 2e+01f, 5e+03f, 1.0f --> + <frac32.s.map.pitch description="MinNotch1Freq (Hz)" name="fslider5"/> + + <!-- 8e+02f, 2e+01f, 1e+04f, 1.0f --> + <frac32.s.map.pitch description="MaxNotch1Freq (Hz)" name="fslider6"/> + + <!-- 1.5f, 1.1f, 4.0f, 0.01f --> + <frac32.u.map description="NotchFreq (Hz)" name="fslider7"/> + </params> + <displays/> + <attribs/> + <code.declaration><![CDATA[ + int iVec0[2]; + int32_t fConst1; + int32_t fConst2; + int32_t fRec0[2]; + int32_t fRec1[3]; + int32_t fRec2[3]; + int32_t fRec3[3]; + int32_t fRec4[3]; + int32_t fRec5[2]; + int32_t fRec6[2]; + int32_t fRec7[2]; + int32_t fRec8[3]; + int32_t fRec9[3]; + int32_t fRec10[3]; + int32_t fRec11[3]; + // only valid for positive values! + #define MAX(a, b) ((a) > (b) ? (a) : (b)) + #define cosf arm_cos_q31 + #define intTAU 0x00c90fdb + /*"6.283185307179586f"*/ +]]></code.declaration> + <code.init><![CDATA[ + int32_t intPI = 0x006487ed /*"3.141592653589793f"*/; + + + // SAMPLERATE is 48000 + fConst1 = 0x0000002c /*"2.0833333333333333e-5"*/; //1.0f / SAMPLERATE; + fConst2 = 0x00000113 /*"1.308996938995747e-4"*/; // TAU / SAMPLERATE; + + for (int i=0; i<2; i++) iVec0[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<3; i++) fRec1[i] = 0; + for (int i=0; i<3; i++) fRec2[i] = 0; + for (int i=0; i<3; i++) fRec3[i] = 0; + for (int i=0; i<3; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<3; i++) fRec8[i] = 0; + for (int i=0; i<3; i++) fRec9[i] = 0; + for (int i=0; i<3; i++) fRec10[i] = 0; + for (int i=0; i<3; i++) fRec11[i] = 0; +]]></code.init> + <code.krate><![CDATA[ + // TODO: find replacements for: expf, cosf, sinf + // values must be scaled to fit into the range expected by arm_{cos,sin}_q31 + // they all take radians! + // cosf --> arm_cos_q31 + // sinf --> arm_sin_q31 + + int32_t fSlow0 = param_fcheckbox0 ? 0x00200000 /*"1"*/ : (param_fslider0>>1); + int32_t fSlow1 = param_fcheckbox1 ? __QSUB(0, fSlow0) : fSlow0; + // TODO: find replacement for expf + // e ^ -1 * const1 * pi * slider3 + // It's a value between 0.72 and 1.0, but for now we pretend it's just the value of fslider3. + // float fSlow4 = expf((fConst1 * (0 - (3.141592653589793f * float(fslider3))))); + int32_t fSlow4 = 0x00200000; //param_fslider3; + int32_t fSlow5 = ___SMMUL(fSlow4, fSlow4); + int32_t fSlow6 = ___SMMUL(fConst2, param_fslider4); + int32_t fSlow7 = arm_cos_q31(fSlow6); + int32_t fSlow8 = arm_sin_q31(fSlow6); + int32_t fSlow9 = __QSUB(0, fSlow8); + + int32_t minFreq; + MTOF(param_fslider5, minFreq); + int32_t maxFreq; + MTOF(param_fslider6, maxFreq); + + int32_t fSlow11 = ___SMMUL(intTAU, minFreq); + int32_t fSlow12 = __QSUB(___SMMUL(intTAU, MAX(minFreq, maxFreq)), fSlow11) >>1; + int32_t fSlow15 = __QSUB(0, fSlow4<<1); + int32_t fSlow14 = ___SMMUL(fConst1, param_fslider7); + int32_t fSlow16 = ___SMMUL(fSlow14, param_fslider7); + int32_t fSlow17 = ___SMMUL(fSlow16, param_fslider7); + int32_t fSlow18 = ___SMMUL(fSlow17, param_fslider7); + int32_t fSlow19 = __QSUB(0x00200000 /*"1.0"*/, fSlow0); + + const int32_t* input0 = inlet_in; + const int32_t* input1 = inlet_in; + int32_t* output0 = outlet_left; + int32_t* output1 = outlet_right; + + for (int i=0; i<BUFSIZE; i++) { + iVec0[0] = 0x00200000 /*"1.0"*/; + fRec5[0] = ___SMMUL(fSlow8, fRec6[1]) + ___SMMUL(fSlow7, fRec5[1]); + fRec6[0] = __QSUB((1 + (___SMMUL(fSlow7, fRec6[1]) + ___SMMUL(fSlow9, fRec5[1]))), iVec0[1]); + + { + int32_t fTemp0 = input0[i]; + int32_t fTemp1 = fSlow11 + ___SMMUL(fSlow12, __QSUB(0x00200000 /*"1.0"*/, fRec5[0])); + int32_t fTemp2 = ___SMMUL(fRec4[1], cosf(___SMMUL(fSlow14, fTemp1))); + fRec4[0] = __QSUB(0, __QSUB((___SMMUL(fSlow15, fTemp2) + ___SMMUL(fSlow5, fRec4[2])), (fTemp0 + ___SMMUL(param_fslider1, fRec0[1])))); + int32_t fTemp3 = ___SMMUL(fRec3[1], cosf(___SMMUL(fSlow16, fTemp1))); + fRec3[0] = ___SMMUL(fSlow15, __QSUB(fTemp2, fTemp3)) + (fRec4[2] + ___SMMUL(fSlow5, __QSUB(fRec4[0], fRec3[2]))); + int32_t fTemp4 = ___SMMUL(fRec2[1], cosf(___SMMUL(fSlow17, fTemp1))); + fRec2[0] = ___SMMUL(fSlow15, __QSUB(fTemp3, fTemp4)) + (fRec3[2] + ___SMMUL(fSlow5, __QSUB(fRec3[0], fRec2[2]))); + int32_t fTemp5 = ___SMMUL(fRec1[1], cosf(___SMMUL(fSlow18, fTemp1))); + fRec1[0] = ___SMMUL(fSlow15, __QSUB(fTemp4, fTemp5)) + (fRec2[2] + ___SMMUL(fSlow5, __QSUB(fRec2[0], fRec1[2]))); + fRec0[0] = ___SMMUL(fSlow5, fRec1[0]) + (___SMMUL(fSlow15, fTemp5) + fRec1[2]); + // TODO: add outlet to see if fRec0 is at all correct + output0[i] = ___SMMUL(fTemp0, fSlow19) + ___SMMUL(fRec0[0], fSlow1); + } + + { + int32_t fTemp6 = input1[i]; + int32_t fTemp7 = fSlow11 + ___SMMUL(fSlow12, __QSUB(0x00200000 /*"1.0"*/, fRec6[0])); + int32_t fTemp8 = ___SMMUL(fRec11[1], cosf(___SMMUL(fSlow14, fTemp7))); + fRec11[0] = __QSUB(0, (___SMMUL(fSlow15, fTemp8) + ___SMMUL(fSlow5, fRec11[2]) - (fTemp6 + ___SMMUL(param_fslider1, fRec7[1])))); + int32_t fTemp9 = ___SMMUL(fRec10[1], cosf(___SMMUL(fSlow16, fTemp7))); + fRec10[0] = (___SMMUL(fSlow15, __QSUB(fTemp8, fTemp9)) + (fRec11[2] + ___SMMUL(fSlow5, __QSUB(fRec11[0], fRec10[2])))); + int32_t fTemp10 = ___SMMUL(fRec9[1], cosf(___SMMUL(fSlow17, fTemp7))); + fRec9[0] = (___SMMUL(fSlow15, __QSUB(fTemp9, fTemp10)) + (fRec10[2] + ___SMMUL(fSlow5, __QSUB(fRec10[0], fRec9[2])))); + int32_t fTemp11 = ___SMMUL(fRec8[1], cosf(___SMMUL(fSlow18, fTemp7))); + fRec8[0] = (___SMMUL(fSlow15, __QSUB(fTemp10, fTemp11)) + (fRec9[2] + ___SMMUL(fSlow5, __QSUB(fRec9[0], fRec8[2])))); + fRec7[0] = (___SMMUL(fSlow5, fRec8[0]) + (___SMMUL(fSlow15, fTemp11) + fRec8[2])); + // TODO: add outlet to see if fRec7 is at all correct + output1[i] = ___SMMUL(fTemp6, fSlow19) + ___SMMUL(fRec7[0], fSlow1); + } + + // post processing + fRec7[1] = fRec7[0]; + fRec8[2] = fRec8[1]; fRec8[1] = fRec8[0]; + fRec9[2] = fRec9[1]; fRec9[1] = fRec9[0]; + fRec10[2] = fRec10[1]; fRec10[1] = fRec10[0]; + fRec11[2] = fRec11[1]; fRec11[1] = fRec11[0]; + fRec0[1] = fRec0[0]; + fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; + fRec2[2] = fRec2[1]; fRec2[1] = fRec2[0]; + fRec3[2] = fRec3[1]; fRec3[1] = fRec3[0]; + fRec4[2] = fRec4[1]; fRec4[1] = fRec4[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + iVec0[1] = iVec0[0]; + } +]]></code.krate> + </obj.normal> +</objdefs> |