aboutsummaryrefslogtreecommitdiffstats
path: root/src/mdaDetune.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mdaDetune.cpp')
-rw-r--r--src/mdaDetune.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/mdaDetune.cpp b/src/mdaDetune.cpp
index 8fe7704..925d401 100644
--- a/src/mdaDetune.cpp
+++ b/src/mdaDetune.cpp
@@ -78,6 +78,29 @@ void mdaDetune::setProgram(LvzInt32 program)
if ((unsigned int)program < NPROGS)
{
curProgram = program;
+
+ // update
+ float * param = programs[curProgram].param;
+ semi = 3.0f * param[0] * param[0] * param[0];
+ dpos2 = (float)pow(1.0594631f, semi);
+ dpos1 = 1.0f / dpos2;
+
+ wet = (float)pow(10.0f, 2.0f * param[2] - 1.0f);
+ dry = wet - wet * param[1] * param[1];
+ wet = (wet + wet - wet * param[1]) * param[1];
+
+ LvzInt32 tmp = 1 << (8 + (LvzInt32)(4.9f * param[3]));
+
+ if(tmp!=buflen) //recalculate crossfade window
+ {
+ buflen = tmp;
+ if (buflen > BUFMAX) buflen = BUFMAX;
+ bufres = 1000.0f * (float)buflen / getSampleRate();
+
+ LvzInt32 i; //hanning half-overlap-and-add
+ double p=0.0, dp=6.28318530718/buflen;
+ for(i=0;i<buflen;i++) { win[i] = (float)(0.5 - 0.5 * cos(p)); p+=dp; }
+ }
}
}