diff options
Diffstat (limited to 'objects/faust/phaser_mono.wip')
-rw-r--r-- | objects/faust/phaser_mono.wip | 90 |
1 files changed, 90 insertions, 0 deletions
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]; + } + } +}; + + |