diff options
author | David Robillard <d@drobilla.net> | 2010-02-22 21:24:34 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2010-02-22 21:24:34 +0000 |
commit | adacb33bf4eadcd49a744177bf3f059e7b2f2f52 (patch) | |
tree | 922620c99fdc348529002d1a000ec0e8f94f3041 /src/mdaDetune.cpp | |
parent | 4514036c46168f4bbc693649989d53bdffe6137b (diff) | |
download | mda.lv2-adacb33bf4eadcd49a744177bf3f059e7b2f2f52.tar.gz mda.lv2-adacb33bf4eadcd49a744177bf3f059e7b2f2f52.tar.bz2 mda.lv2-adacb33bf4eadcd49a744177bf3f059e7b2f2f52.zip |
Merge with upstream r2.
git-svn-id: http://svn.drobilla.net/lad/trunk/mda-lv2@2471 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/mdaDetune.cpp')
-rw-r--r-- | src/mdaDetune.cpp | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/src/mdaDetune.cpp b/src/mdaDetune.cpp index 43b6bec..5518d74 100644 --- a/src/mdaDetune.cpp +++ b/src/mdaDetune.cpp @@ -30,6 +30,7 @@ bool mdaDetune::getVendorString(char* text) { strcpy(text, "mda"); return true bool mdaDetune::getEffectName(char* name) { strcpy(name, "Detune"); return true; } mdaDetune::mdaDetune(audioMasterCallback audioMaster): AudioEffectX(audioMaster, NPROGS, NPARAMS) +, programs(0), buf(0), win(0) { setNumInputs(2); setNumOutputs(2); @@ -42,7 +43,7 @@ mdaDetune::mdaDetune(audioMasterCallback audioMaster): AudioEffectX(audioMaster, win = new float[BUFMAX]; buflen=0; - programs = new mdaDetuneProgram[numPrograms]; + programs = new mdaDetuneProgram[NPROGS]; setProgram(0); ///differences from default program... @@ -59,7 +60,7 @@ mdaDetune::mdaDetune(audioMasterCallback audioMaster): AudioEffectX(audioMaster, void mdaDetune::resume() ///update internal parameters... { - long tmp; + float * param = programs[curProgram].param; semi = 3.0f * param[0] * param[0] * param[0]; dpos2 = (float)pow(1.0594631f, semi); @@ -69,14 +70,14 @@ void mdaDetune::resume() ///update internal parameters... dry = wet - wet * param[1] * param[1]; wet = (wet + wet - wet * param[1]) * param[1]; - tmp = 1 << (8 + (long)(4.9f * param[3])); + LvzInt32 tmp = 1 << (8 + (LvzInt32)(4.9f * param[3])); if(tmp!=buflen) //recalculate crossfade window { buflen = tmp; bufres = 1000.0f * (float)buflen / getSampleRate(); - long i; //hanning half-overlap-and-add + 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; } } @@ -100,26 +101,30 @@ mdaDetune::~mdaDetune() ///destroy any buffers... void mdaDetune::setProgram(LvzInt32 program) { - int i=0; - - mdaDetuneProgram *p = &programs[program]; curProgram = program; - setProgramName(p->name); - for(i=0; i<NPARAMS; i++) param[i] = p->param[i]; resume(); } void mdaDetune::setParameter(LvzInt32 index, float value) { - programs[curProgram].param[index] = param[index] = value; //bug was here! + programs[curProgram].param[index] = value; resume(); } -float mdaDetune::getParameter(LvzInt32 index) { return param[index]; } -void mdaDetune::setProgramName(char *name) { strcpy(programName, name); } -void mdaDetune::getProgramName(char *name) { strcpy(name, programName); } +float mdaDetune::getParameter(LvzInt32 index) { return programs[curProgram].param[index]; } +void mdaDetune::setProgramName(char *name) { strcpy(programs[curProgram].name, name); } +void mdaDetune::getProgramName(char *name) { strcpy(name, programs[curProgram].name); } +bool mdaDetune::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if ((unsigned int)index < NPROGS) + { + strcpy(name, programs[index].name); + return true; + } + return false; +} void mdaDetune::getParameterName(LvzInt32 index, char *label) @@ -140,8 +145,8 @@ void mdaDetune::getParameterDisplay(LvzInt32 index, char *text) switch(index) { - case 1: sprintf(string, "%.0f", 99.0f * param[index]); break; - case 2: sprintf(string, "%.1f", 40.0f * param[index] - 20.0f); break; + case 1: sprintf(string, "%.0f", 99.0f * programs[curProgram].param[index]); break; + case 2: sprintf(string, "%.1f", 40.0f * programs[curProgram].param[index] - 20.0f); break; case 3: sprintf(string, "%.1f", bufres); break; default: sprintf(string, "%.1f", 100.0f * semi); } @@ -171,8 +176,8 @@ void mdaDetune::process(float **inputs, float **outputs, LvzInt32 sampleFrames) float a, b, c, d; float x, w=wet, y=dry, p1=pos1, p1f, d1=dpos1; float p2=pos2, d2=dpos2; - long p0=pos0, p1i, p2i; - long l=buflen-1, lh=buflen>>1; + LvzInt32 p0=pos0, p1i, p2i; + LvzInt32 l=buflen-1, lh=buflen>>1; float lf = (float)buflen; --in1; @@ -194,7 +199,7 @@ void mdaDetune::process(float **inputs, float **outputs, LvzInt32 sampleFrames) p1 -= d1; if(p1<0.0f) p1 += lf; //output - p1i = (long)p1; + p1i = (LvzInt32)p1; p1f = p1 - (float)p1i; a = *(buf + p1i); ++p1i &= l; @@ -213,7 +218,7 @@ void mdaDetune::process(float **inputs, float **outputs, LvzInt32 sampleFrames) p2 -= d2; //repeat for downwards shift - can't see a more efficient way? if(p2<0.0f) p2 += lf; //output - p1i = (long)p2; + p1i = (LvzInt32)p2; p1f = p2 - (float)p1i; a = *(buf + p1i); ++p1i &= l; @@ -246,8 +251,8 @@ void mdaDetune::processReplacing(float **inputs, float **outputs, LvzInt32 sampl float a, b, c, d; float x, w=wet, y=dry, p1=pos1, p1f, d1=dpos1; float p2=pos2, d2=dpos2; - long p0=pos0, p1i, p2i; - long l=buflen-1, lh=buflen>>1; + LvzInt32 p0=pos0, p1i, p2i; + LvzInt32 l=buflen-1, lh=buflen>>1; float lf = (float)buflen; --in1; @@ -267,7 +272,7 @@ void mdaDetune::processReplacing(float **inputs, float **outputs, LvzInt32 sampl p1 -= d1; if(p1<0.0f) p1 += lf; //output - p1i = (long)p1; + p1i = (LvzInt32)p1; p1f = p1 - (float)p1i; a = *(buf + p1i); ++p1i &= l; @@ -286,7 +291,7 @@ void mdaDetune::processReplacing(float **inputs, float **outputs, LvzInt32 sampl p2 -= d2; //repeat for downwards shift - can't see a more efficient way? if(p2<0.0f) p2 += lf; //output - p1i = (long)p2; + p1i = (LvzInt32)p2; p1f = p2 - (float)p1i; a = *(buf + p1i); ++p1i &= l; |