From adacb33bf4eadcd49a744177bf3f059e7b2f2f52 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 22 Feb 2010 21:24:34 +0000 Subject: Merge with upstream r2. git-svn-id: http://svn.drobilla.net/lad/trunk/mda-lv2@2471 a436a847-0d15-0410-975c-d299462d15a1 --- src/mdaAmbience.cpp | 30 +++++--- src/mdaAmbience.h | 3 +- src/mdaBandisto.cpp | 10 +++ src/mdaBandisto.h | 1 + src/mdaBeatBox.cpp | 56 ++++++++------ src/mdaBeatBox.h | 9 ++- src/mdaCombo.cpp | 26 +++++-- src/mdaCombo.h | 3 +- src/mdaDX10.cpp | 50 ++++++------- src/mdaDX10.h | 15 ++-- src/mdaDegrade.cpp | 28 ++++--- src/mdaDegrade.h | 1 + src/mdaDelay.cpp | 32 +++++--- src/mdaDelay.h | 3 +- src/mdaDetune.cpp | 51 +++++++------ src/mdaDetune.h | 9 +-- src/mdaDither.cpp | 42 +++++++---- src/mdaDither.h | 3 +- src/mdaDubDelay.cpp | 32 +++++--- src/mdaDubDelay.h | 3 +- src/mdaDynamics.cpp | 34 ++++++--- src/mdaDynamics.h | 1 + src/mdaEPiano.cpp | 77 ++++++++++--------- src/mdaEPiano.h | 39 +++++----- src/mdaImage.cpp | 22 ++++-- src/mdaImage.h | 1 + src/mdaJX10.cpp | 61 ++++++++------- src/mdaJX10.h | 17 ++--- src/mdaLeslie.cpp | 192 ++++++++++++++++++++++++------------------------ src/mdaLeslie.h | 24 ++---- src/mdaLimiter.cpp | 22 ++++-- src/mdaLimiter.h | 1 + src/mdaLooplex.cpp | 130 +++++++++++++++++++++----------- src/mdaLooplex.h | 9 +-- src/mdaLoudness.cpp | 39 +++++----- src/mdaLoudness.h | 7 +- src/mdaMultiBand.cpp | 42 +++++++---- src/mdaMultiBand.h | 1 + src/mdaOverdrive.cpp | 26 +++++-- src/mdaOverdrive.h | 1 + src/mdaPiano.cpp | 68 ++++++++--------- src/mdaPiano.h | 36 ++++----- src/mdaRezFilter.cpp | 26 +++++-- src/mdaRezFilter.h | 1 + src/mdaRingMod.cpp | 18 ++++- src/mdaRingMod.h | 1 + src/mdaRoundPan.cpp | 16 +++- src/mdaRoundPan.h | 3 +- src/mdaShepard.cpp | 20 +++-- src/mdaShepard.h | 3 +- src/mdaSpecMeter.cpp | 54 ++++++++------ src/mdaSpecMeter.h | 17 +++-- src/mdaSpecMeterGUI.cpp | 147 ++++++++++++++++-------------------- src/mdaSpecMeterGUI.h | 87 +++++++++++----------- src/mdaSplitter.cpp | 36 +++++---- src/mdaSplitter.h | 7 +- src/mdaStereo.cpp | 20 +++-- src/mdaStereo.h | 3 +- src/mdaSubSynth.cpp | 18 ++++- src/mdaSubSynth.h | 1 + src/mdaTalkBox.cpp | 36 +++++---- src/mdaTalkBox.h | 6 +- src/mdaTestTone.cpp | 126 ++++++++++++++++--------------- src/mdaTestTone.h | 3 +- src/mdaThruZero.cpp | 30 +++++--- src/mdaThruZero.h | 7 +- src/mdaTracker.cpp | 34 ++++++--- src/mdaTracker.h | 3 +- src/mdaTransient.cpp | 24 ++++-- src/mdaTransient.h | 1 + src/mdaVocInput.cpp | 45 +++++++----- src/mdaVocInput.h | 9 +-- src/mdaVocoder.cpp | 39 ++++++---- src/mdaVocoder.h | 11 +-- 74 files changed, 1194 insertions(+), 915 deletions(-) diff --git a/src/mdaAmbience.cpp b/src/mdaAmbience.cpp index 5794046..dbb50c6 100644 --- a/src/mdaAmbience.cpp +++ b/src/mdaAmbience.cpp @@ -92,6 +92,16 @@ void mdaAmbience::getProgramName(char *name) strcpy(name, programName); } +bool mdaAmbience::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + float mdaAmbience::getParameter(LvzInt32 index) { float v=0; @@ -150,14 +160,14 @@ void mdaAmbience::process(float **inputs, float **outputs, LvzInt32 sampleFrames float *out2 = outputs[1]; float a, b, c, d, r; float t, f=fil, fb=fbak, dmp=damp, y=dry, w=wet; - long p=pos, d1, d2, d3, d4; + LvzInt32 p=pos, d1, d2, d3, d4; if(rdy==0) suspend(); - d1 = (p + (long)(107 * size)) & 1023; - d2 = (p + (long)(142 * size)) & 1023; - d3 = (p + (long)(277 * size)) & 1023; - d4 = (p + (long)(379 * size)) & 1023; + d1 = (p + (LvzInt32)(107 * size)) & 1023; + d2 = (p + (LvzInt32)(142 * size)) & 1023; + d3 = (p + (LvzInt32)(277 * size)) & 1023; + d4 = (p + (LvzInt32)(379 * size)) & 1023; --in1; --in2; @@ -218,14 +228,14 @@ void mdaAmbience::processReplacing(float **inputs, float **outputs, LvzInt32 sam float *out2 = outputs[1]; float a, b, r; float t, f=fil, fb=fbak, dmp=damp, y=dry, w=wet; - long p=pos, d1, d2, d3, d4; + LvzInt32 p=pos, d1, d2, d3, d4; if(rdy==0) suspend(); - d1 = (p + (long)(107 * size)) & 1023; - d2 = (p + (long)(142 * size)) & 1023; - d3 = (p + (long)(277 * size)) & 1023; - d4 = (p + (long)(379 * size)) & 1023; + d1 = (p + (LvzInt32)(107 * size)) & 1023; + d2 = (p + (LvzInt32)(142 * size)) & 1023; + d3 = (p + (LvzInt32)(277 * size)) & 1023; + d4 = (p + (LvzInt32)(379 * size)) & 1023; --in1; --in2; diff --git a/src/mdaAmbience.h b/src/mdaAmbience.h index 97d2fe5..3ac309d 100644 --- a/src/mdaAmbience.h +++ b/src/mdaAmbience.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -34,7 +35,7 @@ protected: float *buf1, *buf2, *buf3, *buf4; float fil, fbak, damp, wet, dry, size; - long pos, den, rdy; + LvzInt32 pos, den, rdy; char programName[32]; }; diff --git a/src/mdaBandisto.cpp b/src/mdaBandisto.cpp index c4e4cee..87a1f92 100644 --- a/src/mdaBandisto.cpp +++ b/src/mdaBandisto.cpp @@ -82,6 +82,16 @@ void mdaBandisto::getProgramName(char *name) strcpy(name, programName); } +bool mdaBandisto::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + void mdaBandisto::setParameter(LvzInt32 index, float value) { switch(index) diff --git a/src/mdaBandisto.h b/src/mdaBandisto.h index f988ec5..c2cb1aa 100644 --- a/src/mdaBandisto.h +++ b/src/mdaBandisto.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); diff --git a/src/mdaBeatBox.cpp b/src/mdaBeatBox.cpp index 69ac090..94b02aa 100644 --- a/src/mdaBeatBox.cpp +++ b/src/mdaBeatBox.cpp @@ -42,11 +42,11 @@ mdaBeatBox::mdaBeatBox(audioMasterCallback audioMaster) : AudioEffectX(audioMast //calcs here hthr = (float)pow(10.f, 2.f * fParam1 - 2.f); - hdel = (long)((0.04 + 0.20 * fParam2) * getSampleRate()); + hdel = (LvzInt32)((0.04 + 0.20 * fParam2) * getSampleRate()); sthr = (float)(40.0 * pow(10.f, 2.f * fParam7 - 2.f)); - sdel = (long)(0.12 * getSampleRate()); + sdel = (LvzInt32)(0.12 * getSampleRate()); kthr = (float)(220.0 * pow(10.f, 2.f * fParam4 - 2.f)); - kdel = (long)(0.10 * getSampleRate()); + kdel = (LvzInt32)(0.10 * getSampleRate()); hlev = (float)(0.0001f + fParam3 * fParam3 * 4.f); klev = (float)(0.0001f + fParam6 * fParam6 * 4.f); @@ -83,6 +83,16 @@ void mdaBeatBox::getProgramName(char *name) strcpy(name, programName); } +bool mdaBeatBox::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + void mdaBeatBox::setParameter(LvzInt32 index, float value) { switch(index) @@ -102,7 +112,7 @@ void mdaBeatBox::setParameter(LvzInt32 index, float value) } //calcs here hthr = (float)pow(10.f, 2.f * fParam1 - 2.f); - hdel = (long)((0.04 + 0.20 * fParam2) * getSampleRate()); + hdel = (LvzInt32)((0.04 + 0.20 * fParam2) * getSampleRate()); sthr = (float)(40.0 * pow(10.f, 2.f * fParam7 - 2.f)); kthr = (float)(220.0 * pow(10.f, 2.f * fParam4 - 2.f)); @@ -121,10 +131,10 @@ void mdaBeatBox::setParameter(LvzInt32 index, float value) ksf1 = (float)cos(3.1415927 * kww); //p ksf2 = (float)sin(3.1415927 * kww); //q - if(wwx != ww) sfx = (long)(2 * getSampleRate()); - if(kwwx != kww) ksfx = (long)(2 * getSampleRate()); + if(wwx != ww) sfx = (LvzInt32)(2 * getSampleRate()); + if(kwwx != kww) ksfx = (LvzInt32)(2 * getSampleRate()); - rec = (long)(4.9 * fParam11); + rec = (LvzInt32)(4.9 * fParam11); if ((rec!=recx) && (recpos>0)) //finish sample { switch(rec) @@ -154,7 +164,7 @@ void mdaBeatBox::suspend() void mdaBeatBox::synth() { - long t; + LvzInt32 t; float e=0.00012f, de, o, o1=0.f, o2=0.f, p=0.2f, dp; memset(hbuf, 0, hbuflen * sizeof(float)); //generate hi-hat @@ -229,7 +239,7 @@ void mdaBeatBox::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void float2strng(float value, char *string) { sprintf(string, "%.2f", value); } void mdaBeatBox::getParameterDisplay(LvzInt32 index, char *text) @@ -237,16 +247,16 @@ void mdaBeatBox::getParameterDisplay(LvzInt32 index, char *text) switch(index) { case 0: float2strng((float)(40.0*fParam1 - 40.0),text); break; - case 1: long2string((long)(1000.f * hdel / getSampleRate()),text); break; - case 2: long2string((long)(20.f * log10(hlev)),text); break; + case 1: int2strng((LvzInt32)(1000.f * hdel / getSampleRate()),text); break; + case 2: int2strng((LvzInt32)(20.f * log10(hlev)),text); break; case 3: float2strng((float)(40.0*fParam4 - 40.0),text); break; - case 4: long2string((long)(0.5 * kww * getSampleRate()), text); break; - case 5: long2string((long)(20.f * log10(klev)),text); break; + case 4: int2strng((LvzInt32)(0.5 * kww * getSampleRate()), text); break; + case 5: int2strng((LvzInt32)(20.f * log10(klev)),text); break; case 6: float2strng((float)(40.0*fParam7 - 40.0),text); break; - case 7: long2string((long)(0.5 * ww * getSampleRate()), text); break; - case 8: long2string((long)(20.f * log10(slev)),text); break; - case 9: long2string((long)(100.f * fParam10),text); break; - case 11: long2string((long)(20.f * log10(fParam12)),text); break; + case 7: int2strng((LvzInt32)(0.5 * ww * getSampleRate()), text); break; + case 8: int2strng((LvzInt32)(20.f * log10(slev)),text); break; + case 9: int2strng((LvzInt32)(100.f * fParam10),text); break; + case 11: int2strng((LvzInt32)(20.f * log10(fParam12)),text); break; case 10: switch(rec) { case 0: strcpy(text, "-"); break; @@ -286,13 +296,13 @@ void mdaBeatBox::process(float **inputs, float **outputs, LvzInt32 sampleFrames) float *out1 = outputs[0]; float *out2 = outputs[1]; float a, b, c, d, e, o, hf=hfil, ht=hthr, mx3=0.f, mx1=mix; - long hp=hbufpos, hl=hbuflen-2, hd=hdel; + LvzInt32 hp=hbufpos, hl=hbuflen-2, hd=hdel; float kt=kthr; - long kp=kbufpos, kl=kbuflen-2, kd=kdel; + LvzInt32 kp=kbufpos, kl=kbuflen-2, kd=kdel; float st=sthr, s, f1=sb1, f2=sb2, b1=sf1, b2=sf2, b3=sf3; float k, kf1=ksb1, kf2=ksb2, kb1=ksf1, kb2=ksf2; float hlv=hlev, klv=klev, slv=slev; - long sp=sbufpos, sl=sbuflen-2, sd=sdel; + LvzInt32 sp=sbufpos, sl=sbuflen-2, sd=sdel; float ya=dyna, yr=dynr, ye=dyne, ym=dynm, mx4; if(sfx>0) { mx3=0.08f; slv=0.f; klv=0.f; hlv=0.f; mx1=0.f; sfx-=sampleFrames;} //key listen (snare) @@ -381,13 +391,13 @@ void mdaBeatBox::processReplacing(float **inputs, float **outputs, LvzInt32 samp float *out1 = outputs[0]; float *out2 = outputs[1]; float a, b, e, o, hf=hfil, ht=hthr, mx3=0.f, mx1=mix; - long hp=hbufpos, hl=hbuflen-2, hd=hdel; + LvzInt32 hp=hbufpos, hl=hbuflen-2, hd=hdel; float kt=kthr; - long kp=kbufpos, kl=kbuflen-2, kd=kdel; + LvzInt32 kp=kbufpos, kl=kbuflen-2, kd=kdel; float st=sthr, s, f1=sb1, f2=sb2, b1=sf1, b2=sf2, b3=sf3; float k, kf1=ksb1, kf2=ksb2, kb1=ksf1, kb2=ksf2; float hlv=hlev, klv=klev, slv=slev; - long sp=sbufpos, sl=sbuflen-2, sd=sdel; + LvzInt32 sp=sbufpos, sl=sbuflen-2, sd=sdel; float ya=dyna, yr=dynr, ye=dyne, ym=dynm, mx4; if(sfx>0) { mx3=0.08f; slv=0.f; klv=0.f; hlv=0.f; mx1=0.f; sfx-=sampleFrames;} //key listen (snare) diff --git a/src/mdaBeatBox.h b/src/mdaBeatBox.h index 7e48731..07b5fa4 100644 --- a/src/mdaBeatBox.h +++ b/src/mdaBeatBox.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -48,10 +49,10 @@ protected: float *hbuf; float *kbuf; float *sbuf, *sbuf2; - long hbuflen, hbufpos, hdel; - long sbuflen, sbufpos, sdel, sfx; - long kbuflen, kbufpos, kdel, ksfx; - long rec, recx, recpos; + LvzInt32 hbuflen, hbufpos, hdel; + LvzInt32 sbuflen, sbufpos, sdel, sfx; + LvzInt32 kbuflen, kbufpos, kdel, ksfx; + LvzInt32 rec, recx, recpos; char programName[32]; }; diff --git a/src/mdaCombo.cpp b/src/mdaCombo.cpp index b23c9b9..da49c19 100644 --- a/src/mdaCombo.cpp +++ b/src/mdaCombo.cpp @@ -162,6 +162,16 @@ void mdaCombo::getProgramName(char *name) strcpy(name, programName); } +bool mdaCombo::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + float mdaCombo::getParameter(LvzInt32 index) { float v=0; @@ -194,7 +204,7 @@ void mdaCombo::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void float2strng(float value, char *string) { sprintf(string, "%.2f", value); } void mdaCombo::getParameterDisplay(LvzInt32 index, char *text) @@ -213,13 +223,13 @@ void mdaCombo::getParameterDisplay(LvzInt32 index, char *text) case 6: strcpy(text, "4x12 >"); break; } break; - case 1: long2string((long)(200 * fParam2 - 100), text); break; - case 2: long2string((long)(200 * fParam3 - 100), text); break; - case 3: long2string((long)(40 * fParam4 - 20), text); break; + case 1: int2strng((LvzInt32)(200 * fParam2 - 100), text); break; + case 2: int2strng((LvzInt32)(200 * fParam3 - 100), text); break; + case 3: int2strng((LvzInt32)(40 * fParam4 - 20), text); break; case 4: if(fParam5>0.5) strcpy(text, "STEREO"); else strcpy(text, "MONO"); break; - case 5: long2string((long)(100 * fParam6), text); break; - case 6: long2string((long)(100 * fParam7), text); break; + case 5: int2strng((LvzInt32)(100 * fParam6), text); break; + case 6: int2strng((LvzInt32)(100 * fParam7), text); break; } } @@ -251,7 +261,7 @@ void mdaCombo::process(float **inputs, float **outputs, LvzInt32 sampleFrames) float f1=ff1, f2=ff2, f3=ff3, f4=ff4, f5=ff5; float a2, b2, f6=ff6, f7=ff7, f8=ff8, f9=ff9, f10=ff10; float h0=hh0, h1=hh1; - long d1=del1, d2=del2, bp = bufpos; + LvzInt32 d1=del1, d2=del2, bp = bufpos; trm = trim * i * i * i * i; @@ -376,7 +386,7 @@ void mdaCombo::processReplacing(float **inputs, float **outputs, LvzInt32 sample float f1=ff1, f2=ff2, f3=ff3, f4=ff4, f5=ff5; float a2, b2, f6=ff6, f7=ff7, f8=ff8, f9=ff9, f10=ff10; float hf=hhf, hq=hhq, h0=hh0, h1=hh1; - long d1=del1, d2=del2, bp = bufpos; + LvzInt32 d1=del1, d2=del2, bp = bufpos; trm = trim * i * i * i * i; diff --git a/src/mdaCombo.h b/src/mdaCombo.h index 1909a3d..833f105 100644 --- a/src/mdaCombo.h +++ b/src/mdaCombo.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -41,7 +42,7 @@ protected: float hhf, hhq, hh0, hh1; //hpf float *buffer, *buffe2; - long size, bufpos, del1, del2; + LvzInt32 size, bufpos, del1, del2; int mode, ster; char programName[32]; diff --git a/src/mdaDX10.cpp b/src/mdaDX10.cpp index 8a0d60f..2e911c4 100644 --- a/src/mdaDX10.cpp +++ b/src/mdaDX10.cpp @@ -18,7 +18,7 @@ AudioEffect *createEffectInstance(audioMasterCallback audioMaster) mdaDX10::mdaDX10(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, NPROGS, NPARAMS) { - long i=0; + LvzInt32 i=0; Fs = 44100.0f; programs = new mdaDX10Program[NPROGS]; @@ -93,6 +93,7 @@ mdaDX10::mdaDX10(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, NP void mdaDX10::update() //parameter change //if multitimbral would have to move all this... { float ifs = 1.0f / Fs; + float * param = programs[curProgram].param; tune = (float)(8.175798915644 * ifs * pow(2.0, floor(param[11] * 6.9) - 2.0)); @@ -101,7 +102,7 @@ void mdaDX10::update() //parameter change //if multitimbral would have to move if(param[4]<0.5f) ratf = 0.2f * param[4] * param[4]; else - switch((long)(8.9f * param[4])) + switch((LvzInt32)(8.9f * param[4])) { case 4: ratf = 0.25f; break; case 5: ratf = 0.33333333f; break; @@ -154,24 +155,19 @@ mdaDX10::~mdaDX10 () //destroy any buffers... void mdaDX10::setProgram(LvzInt32 program) { - long i; - - mdaDX10Program *p = &programs[program]; curProgram = program; - for(i=0; iparam[i]; - update(); + update(); } void mdaDX10::setParameter(LvzInt32 index, float value) { - mdaDX10Program *p = &programs[curProgram]; - param[index] = p->param[index] = value; + programs[curProgram].param[index] = value; update(); } -void mdaDX10::fillpatch(long p, const char *name, +void mdaDX10::fillpatch(LvzInt32 p, char *name, float p0, float p1, float p2, float p3, float p4, float p5, float p6, float p7, float p8, float p9, float p10, float p11, float p12, float p13, float p14, float p15) @@ -188,7 +184,7 @@ void mdaDX10::fillpatch(long p, const char *name, } -float mdaDX10::getParameter(LvzInt32 index) { return param[index]; } +float mdaDX10::getParameter(LvzInt32 index) { return programs[curProgram].param[index]; } void mdaDX10::setProgramName(char *name) { strcpy(programs[curProgram].name, name); } void mdaDX10::getProgramName(char *name) { strcpy(name, programs[curProgram].name); } void mdaDX10::setBlockSize(LvzInt32 blockSize) { AudioEffectX::setBlockSize(blockSize); } @@ -212,7 +208,7 @@ bool mdaDX10::getOutputProperties(LvzInt32 index, LvzPinProperties* properties) bool mdaDX10::getProgramNameIndexed(LvzInt32 category, LvzInt32 index, char* text) { - if(index0 || notes[event]0 || notes[event]0) { @@ -520,9 +518,9 @@ void mdaDX10::noteOn(long note, long velocity) LvzInt32 mdaDX10::processEvents(LvzEvents* ev) { - long npos=0; + LvzInt32 npos=0; - for (long i=0; inumEvents; i++) + for (LvzInt32 i=0; inumEvents; i++) { if((ev->events[i])->type != kLvzMidiType) continue; LvzMidiEvent* event = (LvzMidiEvent*)ev->events[i]; @@ -566,7 +564,7 @@ LvzInt32 mdaDX10::processEvents(LvzEvents* ev) default: //all notes off if(midiData[1]>0x7A) { - for(long v=0; v -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void mdaDegrade::getParameterDisplay(LvzInt32 index, char *text) { switch(index) { - case 0: long2string((long)(-30.0 * (1.0 - fParam1)), text); break; - case 1: long2string((long)(4.0 + 12.0 * fParam2), text); break; - case 2: long2string((long)(getSampleRate()/tn), text); break; - case 3: long2string((long)pow(10.0f, 2.30104f + 2.f*fParam4), text); break; - case 4: long2string((long)(200.0 * fabs(fParam5 - 0.5)), text); break; - case 5: long2string((long)(40.0 * fParam6 - 20.0), text); break; + case 0: int2strng((LvzInt32)(-30.0 * (1.0 - fParam1)), text); break; + case 1: int2strng((LvzInt32)(4.0 + 12.0 * fParam2), text); break; + case 2: int2strng((LvzInt32)(getSampleRate()/tn), text); break; + case 3: int2strng((LvzInt32)pow(10.0f, 2.30104f + 2.f*fParam4), text); break; + case 4: int2strng((LvzInt32)(200.0 * fabs(fParam5 - 0.5)), text); break; + case 5: int2strng((LvzInt32)(40.0 * fParam6 - 20.0), text); break; } } diff --git a/src/mdaDegrade.h b/src/mdaDegrade.h index c91e135..b9fba94 100644 --- a/src/mdaDegrade.h +++ b/src/mdaDegrade.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); diff --git a/src/mdaDelay.cpp b/src/mdaDelay.cpp index 6780679..233251e 100644 --- a/src/mdaDelay.cpp +++ b/src/mdaDelay.cpp @@ -52,7 +52,7 @@ void mdaDelay::setParameter(LvzInt32 index, float value) case 5: fParam5 = value; break; } //calcs here - ldel = (long)(size * fParam0 * fParam0); + ldel = (LvzInt32)(size * fParam0 * fParam0); if(ldel<4) ldel=4; switch(int(fParam1 * 17.9f)) //fixed left/right ratios @@ -68,7 +68,7 @@ void mdaDelay::setParameter(LvzInt32 index, float value) case 9: tmp = 2.0000f; break; default: tmp = 4.0f * fParam1; break; //variable ratio } - rdel = (long)(size * fParam0 * fParam0 * tmp); + rdel = (LvzInt32)(size * fParam0 * fParam0 * tmp); if(rdel>size) rdel=size; if(rdel<4) rdel=4; @@ -115,6 +115,16 @@ void mdaDelay::getProgramName(char *name) strcpy(name, programName); } +bool mdaDelay::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + float mdaDelay::getParameter(LvzInt32 index) { float v=0; @@ -145,18 +155,18 @@ void mdaDelay::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void mdaDelay::getParameterDisplay(LvzInt32 index, char *text) { switch(index) { - case 0: long2string((long)(ldel * 1000.0f / getSampleRate()), text); break; - case 1: long2string((long)(100 * rdel / ldel), text); break; - case 2: long2string((long)(99 * fParam2), text); break; - case 3: long2string((long)(200 * fParam3 - 100), text); break; - case 4: long2string((long)(100 * fParam4), text); break; - case 5: long2string((long)(20 * log10(2.0 * fParam5)), text); break; + case 0: int2strng((LvzInt32)(ldel * 1000.0f / getSampleRate()), text); break; + case 1: int2strng((LvzInt32)(100 * rdel / ldel), text); break; + case 2: int2strng((LvzInt32)(99 * fParam2), text); break; + case 3: int2strng((LvzInt32)(200 * fParam3 - 100), text); break; + case 4: int2strng((LvzInt32)(100 * fParam4), text); break; + case 5: int2strng((LvzInt32)(20 * log10(2.0 * fParam5)), text); break; } } @@ -182,7 +192,7 @@ void mdaDelay::process(float **inputs, float **outputs, LvzInt32 sampleFrames) float *out2 = outputs[1]; float a, b, c, d, ol, or_, w=wet, y=dry, fb=fbk; float lx=lmix, hx=hmix, f=fil, f0=fil0, tmp; - long i=ipos, l, r, s=size; + LvzInt32 i=ipos, l, r, s=size; l = (i + ldel) % (s + 1); r = (i + rdel) % (s + 1); @@ -224,7 +234,7 @@ void mdaDelay::processReplacing(float **inputs, float **outputs, LvzInt32 sample float *out2 = outputs[1]; float a, b, ol, or_, w=wet, y=dry, fb=fbk; float lx=lmix, hx=hmix, f=fil, f0=fil0, tmp; - long i=ipos, l, r, s=size; + LvzInt32 i=ipos, l, r, s=size; l = (i + ldel) % (s + 1); r = (i + rdel) % (s + 1); diff --git a/src/mdaDelay.h b/src/mdaDelay.h index 6682a58..3ce1a61 100644 --- a/src/mdaDelay.h +++ b/src/mdaDelay.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -35,7 +36,7 @@ protected: float fParam6; float *buffer; //delay - long size, ipos, ldel, rdel; //delay max time, pointer, left time, right time + LvzInt32 size, ipos, ldel, rdel; //delay max time, pointer, left time, right time float wet, dry, fbk; //wet & dry mix float lmix, hmix, fil, fil0; //low & high mix, crossover filter coeff & buffer 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;iname); - for(i=0; iparam[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; diff --git a/src/mdaDetune.h b/src/mdaDetune.h index d20f510..10b019b 100644 --- a/src/mdaDetune.h +++ b/src/mdaDetune.h @@ -14,8 +14,6 @@ class mdaDetuneProgram { public: mdaDetuneProgram(); - ~mdaDetuneProgram() {} - private: friend class mdaDetune; float param[NPARAMS]; @@ -34,6 +32,7 @@ public: virtual void setProgram(LvzInt32 program); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -48,16 +47,14 @@ public: virtual LvzInt32 getVendorVersion() { return 1000; } protected: - float param[NPARAMS]; - char programName[32]; mdaDetuneProgram *programs; ///global internal variables float *buf, *win; //buffer, window - long buflen; //buffer length + LvzInt32 buflen; //buffer length float bufres; //buffer resolution display float semi; //detune display - long pos0; //buffer input + LvzInt32 pos0; //buffer input float pos1, dpos1; //buffer output, rate float pos2, dpos2; //downwards shift float wet, dry; //ouput levels diff --git a/src/mdaDither.cpp b/src/mdaDither.cpp index 94c3a47..41ef831 100644 --- a/src/mdaDither.cpp +++ b/src/mdaDither.cpp @@ -63,7 +63,7 @@ void mdaDither::setParameter(LvzInt32 index, float value) dith = 2.0f * fParam2 / (wlen * (float)32767); shap=0.0f; - switch((long)(fParam1*3.9)) //dither mode + switch((LvzInt32)(fParam1*3.9)) //dither mode { case 0: dith = 0.0f; break; //off case 3: shap = 0.5f; break; //noise shaping @@ -90,6 +90,16 @@ void mdaDither::getProgramName(char *name) strcpy(name, programName); } +bool mdaDither::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + float mdaDither::getParameter(LvzInt32 index) { float v=0; @@ -118,15 +128,15 @@ void mdaDither::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void float2strng(float value, char *string) { sprintf(string, "%.2f", value); } void mdaDither::getParameterDisplay(LvzInt32 index, char *text) { switch(index) { - case 0: long2string((long)bits, text); break; - case 1: switch((long)(fParam1*3.9)) + case 0: int2strng((LvzInt32)bits, text); break; + case 1: switch((LvzInt32)(fParam1*3.9)) { case 0: strcpy(text, "OFF"); break; case 1: strcpy(text, "TRI"); break; case 2: strcpy(text, "HP-TRI"); break; @@ -136,7 +146,7 @@ void mdaDither::getParameterDisplay(LvzInt32 index, char *text) case 3: float2strng(4.0f * fParam3 - 2.0f, text); break; case 4: if(fParam4>0.1f) if(gain<0.0001f) strcpy(text, "-80"); - else long2string((long)(20.0 * log10(gain)), text); + else int2strng((LvzInt32)(20.0 * log10(gain)), text); else strcpy(text, "OFF"); break; } } @@ -167,9 +177,9 @@ void mdaDither::process(float **inputs, float **outputs, LvzInt32 sampleFrames) float dl=dith; //dither level float o=offs, w=wlen, wi=1.0f/wlen; //DC offset, word length & inverse float g=gain; //gain for Zoom mode - long r1=rnd1, r2, r3=rnd3, r4; //random numbers for dither - long m=1; //dither mode - if((long)(fParam1 * 3.9f)==1) m=0; //what is the fastest if(?) + LvzInt32 r1=rnd1, r2, r3=rnd3, r4; //random numbers for dither + LvzInt32 m=1; //dither mode + if((LvzInt32)(fParam1 * 3.9f)==1) m=0; //what is the fastest if(?) --in1; --in2; @@ -190,14 +200,14 @@ void mdaDither::process(float **inputs, float **outputs, LvzInt32 sampleFrames) a = g * a + sl * (s1 + s1 - s2); aa = a + o + dl * (float)(r1 - r2); if(aa<0.0f) aa-=wi; - aa = wi * (float)(long)(w * aa); + aa = wi * (float)(LvzInt32)(w * aa); s2 = s1; s1 = a - aa; b = g * b + sl * (s3 + s3 - s4); bb = b + o + dl * (float)(r3 - r4); if(bb<0.0f) bb-=wi; - bb = wi * (float)(long)(w * bb); + bb = wi * (float)(LvzInt32)(w * bb); s4 = s3; s3 = b - bb; @@ -220,9 +230,9 @@ void mdaDither::processReplacing(float **inputs, float **outputs, LvzInt32 sampl float dl=dith; //dither level float o=offs, w=wlen, wi=1.0f/wlen; //DC offset, word length & inverse float g=gain; //gain for Zoom mode - long r1=rnd1, r2, r3=rnd3, r4; //random numbers for dither - long m=1; //dither mode - if((long)(fParam1 * 3.9f)==1) m=0; //what is the fastest if(?) + LvzInt32 r1=rnd1, r2, r3=rnd3, r4; //random numbers for dither + LvzInt32 m=1; //dither mode + if((LvzInt32)(fParam1 * 3.9f)==1) m=0; //what is the fastest if(?) --in1; --in2; @@ -240,15 +250,15 @@ void mdaDither::processReplacing(float **inputs, float **outputs, LvzInt32 sampl a = g * a + sl * (s1 + s1 - s2); //target level + error feedback aa = a + o + dl * (float)(r1 - r2); // + offset + dither - if(aa<0.0f) aa-=wi; //(long) truncates towards zero! - aa = wi * (float)(long)(w * aa); //truncate + if(aa<0.0f) aa-=wi; //(LvzInt32) truncates towards zero! + aa = wi * (float)(LvzInt32)(w * aa); //truncate s2 = s1; s1 = a - aa; //error feedback: 2nd order noise shaping b = g * b + sl * (s3 + s3 - s4); bb = b + o + dl * (float)(r3 - r4); if(bb<0.0f) bb-=wi; - bb = wi * (float)(long)(w * bb); + bb = wi * (float)(LvzInt32)(w * bb); s4 = s3; s3 = b - bb; diff --git a/src/mdaDither.h b/src/mdaDither.h index 80430ea..2a1ee60 100644 --- a/src/mdaDither.h +++ b/src/mdaDither.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -33,7 +34,7 @@ protected: float fParam4; float dith; - long rnd1, rnd3; + LvzInt32 rnd1, rnd3; float shap, sh1, sh2, sh3, sh4; float offs, bits, wlen, gain; diff --git a/src/mdaDubDelay.cpp b/src/mdaDubDelay.cpp index d6cc238..c8aafaf 100644 --- a/src/mdaDubDelay.cpp +++ b/src/mdaDubDelay.cpp @@ -106,6 +106,16 @@ void mdaDubDelay::getProgramName(char *name) strcpy(name, programName); } +bool mdaDubDelay::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + float mdaDubDelay::getParameter(LvzInt32 index) { float v=0; @@ -138,20 +148,20 @@ void mdaDubDelay::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void float2strng(float value, char *string) { sprintf(string, "%.2f", value); } void mdaDubDelay::getParameterDisplay(LvzInt32 index, char *text) { switch(index) { - case 0: long2string((long)(del * 1000.0f / getSampleRate()), text); break; - case 1: long2string((long)(220 * fParam1 - 110), text); break; - case 2: long2string((long)(200 * fParam2 - 100), text); break; - case 3: long2string((long)(100 * fParam3), text); break; + case 0: int2strng((LvzInt32)(del * 1000.0f / getSampleRate()), text); break; + case 1: int2strng((LvzInt32)(220 * fParam1 - 110), text); break; + case 2: int2strng((LvzInt32)(200 * fParam2 - 100), text); break; + case 3: int2strng((LvzInt32)(100 * fParam3), text); break; case 4: float2strng((float)pow(10.0f, 2.0f - 3.0f * fParam4), text); break; - case 5: long2string((long)(100 * fParam5), text); break; - case 6: long2string((long)(20 * log10(2.0 * fParam6)), text); break; + case 5: int2strng((LvzInt32)(100 * fParam5), text); break; + case 6: int2strng((LvzInt32)(20 * log10(2.0 * fParam6)), text); break; } } @@ -181,7 +191,7 @@ void mdaDubDelay::process(float **inputs, float **outputs, LvzInt32 sampleFrames float lx=lmix, hx=hmix, f=fil, f0=fil0, tmp; float e=env, g, r=rel; //limiter envelope, gain, release float twopi=6.2831853f; - long i=ipos, l, s=size, k=0; + LvzInt32 i=ipos, l, s=size, k=0; --in1; --in2; @@ -206,7 +216,7 @@ void mdaDubDelay::process(float **inputs, float **outputs, LvzInt32 sampleFrames i--; if(i<0) i=s; //delay positions - l = (long)dl; + l = (LvzInt32)dl; tmp = dl - (float)l; //remainder l += i; if(l>s) l-=(s+1); @@ -246,7 +256,7 @@ void mdaDubDelay::processReplacing(float **inputs, float **outputs, LvzInt32 sam float lx=lmix, hx=hmix, f=fil, f0=fil0, tmp; float e=env, g, r=rel; //limiter envelope, gain, release float twopi=6.2831853f; - long i=ipos, l, s=size, k=0; + LvzInt32 i=ipos, l, s=size, k=0; --in1; --in2; @@ -269,7 +279,7 @@ void mdaDubDelay::processReplacing(float **inputs, float **outputs, LvzInt32 sam i--; if(i<0) i=s; //delay positions - l = (long)dl; + l = (LvzInt32)dl; tmp = dl - (float)l; //remainder l += i; if(l>s) l-=(s+1); diff --git a/src/mdaDubDelay.h b/src/mdaDubDelay.h index c102447..31cde6b 100644 --- a/src/mdaDubDelay.h +++ b/src/mdaDubDelay.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -35,7 +36,7 @@ protected: float fParam6; float *buffer; //delay - long size, ipos; //delay max time, pointer, left time, right time + LvzInt32 size, ipos; //delay max time, pointer, left time, right time float wet, dry, fbk; //wet & dry mix float lmix, hmix, fil, fil0; //low & high mix, crossover filter coeff & buffer float env, rel; //limiter (clipper when release is instant) diff --git a/src/mdaDynamics.cpp b/src/mdaDynamics.cpp index f4b7901..3de1664 100644 --- a/src/mdaDynamics.cpp +++ b/src/mdaDynamics.cpp @@ -49,6 +49,16 @@ void mdaDynamics::getProgramName(char *name) strcpy(name, programName); } +bool mdaDynamics::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + void mdaDynamics::setParameter(LvzInt32 index, float value) { switch(index) @@ -127,30 +137,30 @@ void mdaDynamics::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void float2strng(float value, char *string) { sprintf(string, "%.2f", value); } void mdaDynamics::getParameterDisplay(LvzInt32 index, char *text) { switch(index) { - case 0: long2string((long)(40.0*fParam1 - 40.0),text); break; + case 0: int2strng((LvzInt32)(40.0*fParam1 - 40.0),text); break; case 1: if(fParam2>0.58) { if(fParam2<0.62) strcpy(text, "Limit"); else float2strng(-rat,text); } else { if(fParam2<0.2) float2strng(0.5f+2.5f*fParam2,text); else float2strng(1.f/(1.f-rat),text); } break; - case 2: long2string((long)(40.0*fParam3 - 0.0),text); break; ///was -20.0 - case 3: long2string((long)(-301030.1 / (getSampleRate() * log10(1.0 - att))),text); break; - case 4: long2string((long)(-301.0301 / (getSampleRate() * log10(1.0 - rel))),text); break; + case 2: int2strng((LvzInt32)(40.0*fParam3 - 0.0),text); break; ///was -20.0 + case 3: int2strng((LvzInt32)(-301030.1 / (getSampleRate() * log10(1.0 - att))),text); break; + case 4: int2strng((LvzInt32)(-301.0301 / (getSampleRate() * log10(1.0 - rel))),text); break; case 5: if(lthr==0.f) strcpy(text, "OFF"); - else long2string((long)(30.0*fParam6 - 20.0),text); break; + else int2strng((LvzInt32)(30.0*fParam6 - 20.0),text); break; case 6: if(xthr==0.f) strcpy(text, "OFF"); - else long2string((long)(60.0*fParam7 - 60.0),text); break; - case 7: long2string((long)(-301030.1 / (getSampleRate() * log10(1.0 - gatt))),text); break; - case 8: long2string((long)(-1806.0 / (getSampleRate() * log10(xrat))),text); break; - case 9: long2string((long)(100.0*fParam10),text); break; + else int2strng((LvzInt32)(60.0*fParam7 - 60.0),text); break; + case 7: int2strng((LvzInt32)(-301030.1 / (getSampleRate() * log10(1.0 - gatt))),text); break; + case 8: int2strng((LvzInt32)(-1806.0 / (getSampleRate() * log10(xrat))),text); break; + case 9: int2strng((LvzInt32)(100.0*fParam10),text); break; } } @@ -162,11 +172,11 @@ void mdaDynamics::getParameterLabel(LvzInt32 index, char *label) case 0: strcpy(label, "dB"); break; case 1: strcpy(label, ":1"); break; case 2: strcpy(label, "dB"); break; - case 3: strcpy(label, "µs"); break; + case 3: strcpy(label, "�s"); break; case 4: strcpy(label, "ms"); break; case 5: strcpy(label, "dB"); break; case 6: strcpy(label, "dB"); break; - case 7: strcpy(label, "µs"); break; + case 7: strcpy(label, "�s"); break; case 8: strcpy(label, "ms"); break; case 9: strcpy(label, "%"); break; } diff --git a/src/mdaDynamics.h b/src/mdaDynamics.h index c45805c..3867bca 100644 --- a/src/mdaDynamics.h +++ b/src/mdaDynamics.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); diff --git a/src/mdaEPiano.cpp b/src/mdaEPiano.cpp index 61ffcb5..fbff1d5 100644 --- a/src/mdaEPiano.cpp +++ b/src/mdaEPiano.cpp @@ -19,15 +19,15 @@ mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster if(programs) { //fill patches... - long i=0; + LvzInt32 i=0; fillpatch(i++, "Default", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f); fillpatch(i++, "Bright", 0.500f, 0.500f, 1.000f, 0.800f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.500f); fillpatch(i++, "Mellow", 0.500f, 0.500f, 0.000f, 0.000f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.246f, 0.000f); fillpatch(i++, "Autopan", 0.500f, 0.500f, 0.500f, 0.500f, 0.250f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.246f, 0.000f); fillpatch(i++, "Tremolo", 0.500f, 0.500f, 0.500f, 0.500f, 0.750f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.246f, 0.000f); - fillpatch(i++, " ", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f); - fillpatch(i++, " ", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f); - fillpatch(i++, " ", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f); + fillpatch(i++, "(default)", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f); + fillpatch(i++, "(default)", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f); + fillpatch(i++, "(default)", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f); setProgram(0); } @@ -91,10 +91,10 @@ mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster kgrp[32].pos = 414487; kgrp[32].end = 422408; kgrp[32].loop = 2169; //extra xfade looping... - for(long k=0; k<28; k++) + for(LvzInt32 k=0; k<28; k++) { - long p0 = kgrp[k].end; - long p1 = kgrp[k].end - kgrp[k].loop; + LvzInt32 p0 = kgrp[k].end; + LvzInt32 p1 = kgrp[k].end - kgrp[k].loop; float xf = 1.0f; float dxf = -0.02f; @@ -109,7 +109,7 @@ mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster } //initialise... - for(long v=0; v 0.5f) tfrq = 14000.0f; else tfrq = 5000.0f; //treble freq @@ -144,7 +145,7 @@ void mdaEPiano::update() //parameter change if(param[6] < 0.25f) velsens -= 0.75f - 3.0f * param[6]; width = 0.03f * param[7]; - poly = 1 + (long)(31.9f * param[8]); + poly = 1 + (LvzInt32)(31.9f * param[8]); fine = param[9] - 0.5f; random = 0.077f * param[10] * param[10]; stretch = 0.0f; //0.000434f * (param[11] - 0.5f); parameter re-used for overdrive! @@ -156,7 +157,7 @@ void mdaEPiano::resume() { Fs = getSampleRate(); iFs = 1.0f / Fs; - dlfo = 6.283f * iFs * (float)exp(6.22f * param[5] - 2.61f); //lfo rate + dlfo = 6.283f * iFs * (float)exp(6.22f * programs[curProgram].param[5] - 2.61f); //lfo rate DECLARE_LVZ_DEPRECATED (wantEvents) (); } @@ -170,19 +171,14 @@ mdaEPiano::~mdaEPiano () //destroy any buffers... void mdaEPiano::setProgram(LvzInt32 program) { - long i; - - mdaEPianoProgram *p = &programs[program]; curProgram = program; - for(i=0; iparam[i]; - update(); + update(); } void mdaEPiano::setParameter(LvzInt32 index, float value) { - mdaEPianoProgram *p = &programs[curProgram]; - param[index] = p->param[index] = value; + programs[curProgram].param[index] = value; update(); //if(editor) editor->postUpdate(); ///For GUI @@ -191,7 +187,7 @@ void mdaEPiano::setParameter(LvzInt32 index, float value) } -void mdaEPiano::fillpatch(long p, const char *name, float p0, float p1, float p2, float p3, float p4, +void mdaEPiano::fillpatch(LvzInt32 p, char *name, float p0, float p1, float p2, float p3, float p4, float p5, float p6, float p7, float p8, float p9, float p10,float p11) { strcpy(programs[p].name, name); @@ -204,7 +200,7 @@ void mdaEPiano::fillpatch(long p, const char *name, float p0, float p1, float p2 } -float mdaEPiano::getParameter(LvzInt32 index) { return param[index]; } +float mdaEPiano::getParameter(LvzInt32 index) { return programs[curProgram].param[index]; } void mdaEPiano::setProgramName(char *name) { strcpy(programs[curProgram].name, name); } void mdaEPiano::getProgramName(char *name) { strcpy(name, programs[curProgram].name); } void mdaEPiano::setBlockSize(LvzInt32 blockSize) { AudioEffectX::setBlockSize(blockSize); } @@ -229,7 +225,7 @@ bool mdaEPiano::getOutputProperties(LvzInt32 index, LvzPinProperties* properties bool mdaEPiano::getProgramNameIndexed(LvzInt32 category, LvzInt32 index, char* text) { - if(index 0.5f) + if(activevoices == 0 && programs[curProgram].param[4] > 0.5f) { lfo0 = -0.7071f; lfo1 = 0.7071f; } //reset LFO phase - good idea? - long note = notes[event++]; - long vel = notes[event++]; + LvzInt32 note = notes[event++]; + LvzInt32 vel = notes[event++]; noteOn(note, vel); } } @@ -402,9 +399,9 @@ void mdaEPiano::processReplacing(float **inputs, float **outputs, LvzInt32 sampl { float* out0 = outputs[0]; float* out1 = outputs[1]; - long event=0, frame=0, frames, v; + LvzInt32 event=0, frame=0, frames, v; float x, l, r, od=overdrive; - long i; + LvzInt32 i; while(frame 0.5f) + if(activevoices == 0 && programs[curProgram].param[4] > 0.5f) { lfo0 = -0.7071f; lfo1 = 0.7071f; } //reset LFO phase - good idea? - long note = notes[event++]; - long vel = notes[event++]; + LvzInt32 note = notes[event++]; + LvzInt32 vel = notes[event++]; noteOn(note, vel); } } @@ -471,10 +468,11 @@ void mdaEPiano::processReplacing(float **inputs, float **outputs, LvzInt32 sampl } -void mdaEPiano::noteOn(long note, long velocity) +void mdaEPiano::noteOn(LvzInt32 note, LvzInt32 velocity) { + float * param = programs[curProgram].param; float l=99.0f; - long v, vl=0, k, s; + LvzInt32 v, vl=0, k, s; if(velocity > 0) { @@ -497,13 +495,13 @@ void mdaEPiano::noteOn(long note, long velocity) if(note > 60) l += stretch * (float)k; //stretch s = size; - if(velocity > 40) s += (long)(sizevel * (float)(velocity - 40)); + if(velocity > 40) s += (LvzInt32)(sizevel * (float)(velocity - 40)); k = 0; while(note > (kgrp[k].high + s)) k += 3; //find keygroup l += (float)(note - kgrp[k].root); //pitch l = 32000.0f * iFs * (float)exp(0.05776226505 * l); - voice[vl].delta = (long)(65536.0f * l); + voice[vl].delta = (LvzInt32)(65536.0f * l); voice[vl].frac = 0; if(velocity > 48) k++; //mid velocity sample @@ -547,9 +545,10 @@ void mdaEPiano::noteOn(long note, long velocity) LvzInt32 mdaEPiano::processEvents(LvzEvents* ev) { - long npos=0; + float * param = programs[curProgram].param; + LvzInt32 npos=0; - for (long i=0; inumEvents; i++) + for (LvzInt32 i=0; inumEvents; i++) { if((ev->events[i])->type != kLvzMidiType) continue; LvzMidiEvent* event = (LvzMidiEvent*)ev->events[i]; @@ -600,7 +599,7 @@ LvzInt32 mdaEPiano::processEvents(LvzEvents* ev) default: //all notes off if(midiData[1]>0x7A) { - for(long v=0; v -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void mdaImage::getParameterDisplay(LvzInt32 index, char *text) { @@ -150,11 +160,11 @@ void mdaImage::getParameterDisplay(LvzInt32 index, char *text) case 3: strcpy(text, "LR->MS"); break; } break; - case 1: long2string((long)(400 * fParam2 - 200), text); break; - case 2: long2string((long)(200 * fParam3 - 100), text); break; - case 3: long2string((long)(400 * fParam4 - 200), text); break; - case 4: long2string((long)(200 * fParam5 - 100), text); break; - case 5: long2string((long)(40 * fParam6 - 20), text); break; + case 1: int2strng((LvzInt32)(400 * fParam2 - 200), text); break; + case 2: int2strng((LvzInt32)(200 * fParam3 - 100), text); break; + case 3: int2strng((LvzInt32)(400 * fParam4 - 200), text); break; + case 4: int2strng((LvzInt32)(200 * fParam5 - 100), text); break; + case 5: int2strng((LvzInt32)(40 * fParam6 - 20), text); break; } } diff --git a/src/mdaImage.h b/src/mdaImage.h index c5fbeb7..c52eb9c 100644 --- a/src/mdaImage.h +++ b/src/mdaImage.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); diff --git a/src/mdaJX10.cpp b/src/mdaJX10.cpp index 4ded18e..9b21c72 100644 --- a/src/mdaJX10.cpp +++ b/src/mdaJX10.cpp @@ -56,7 +56,7 @@ mdaJX10Program::mdaJX10Program() mdaJX10::mdaJX10(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, NPROGS, NPARAMS) { - long i=0; + LvzInt32 i=0; Fs = 44100.0f; programs = new mdaJX10Program[NPROGS]; @@ -133,7 +133,7 @@ mdaJX10::mdaJX10(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, NP } //initialise... - for(long v=0; vparam[i]; - update(); + update(); } //may want all notes off here - but this stops use of patches as snapshots! void mdaJX10::setParameter(LvzInt32 index, float value) { - mdaJX10Program *p = &programs[curProgram]; - param[index] = p->param[index] = value; + programs[curProgram].param[index] = value; update(); ///if(editor) editor->postUpdate(); } -void mdaJX10::fillpatch(long p, const char *name, +void mdaJX10::fillpatch(LvzInt32 p, char *name, float p0, float p1, float p2, float p3, float p4, float p5, float p6, float p7, float p8, float p9, float p10, float p11, float p12, float p13, float p14, float p15, float p16, float p17, @@ -280,7 +276,7 @@ void mdaJX10::fillpatch(long p, const char *name, } -float mdaJX10::getParameter(LvzInt32 index) { return param[index]; } +float mdaJX10::getParameter(LvzInt32 index) { return programs[curProgram].param[index]; } void mdaJX10::setProgramName(char *name) { strcpy(programs[curProgram].name, name); } void mdaJX10::getProgramName(char *name) { strcpy(name, programs[curProgram].name); } void mdaJX10::setBlockSize(LvzInt32 blockSize) { AudioEffectX::setBlockSize(blockSize); } @@ -304,7 +300,7 @@ bool mdaJX10::getOutputProperties(LvzInt32 index, LvzPinProperties* properties) bool mdaJX10::getProgramNameIndexed(LvzInt32 category, LvzInt32 index, char* text) { - if(index0) //note on { @@ -818,7 +815,7 @@ void mdaJX10::noteOn(long note, long velocity) voice[v].lev = voltrim * volume * (0.004f * (float)((velocity + 64) * (velocity + 64)) - 8.0f); voice[v].lev2 = voice[v].lev * oscmix; - if(param[20]<0.5f) //force 180 deg phase difference for PWM + if(programs[curProgram].param[20]<0.5f) //force 180 deg phase difference for PWM { if(voice[v].dp>0.0f) { @@ -842,7 +839,7 @@ void mdaJX10::noteOn(long note, long velocity) } else { - //if(param[15] < 0.28f) + //if(programs[curProgram].param[15] < 0.28f) //{ // voice[v].f0 = voice[v].f1 = voice[v].f2 = 0.0f; //reset filter // voice[v].env = SILENCE + SILENCE; @@ -905,9 +902,9 @@ void mdaJX10::noteOn(long note, long velocity) LvzInt32 mdaJX10::processEvents(LvzEvents* ev) { - long npos=0; + LvzInt32 npos=0; - for (long i=0; inumEvents; i++) + for (LvzInt32 i=0; inumEvents; i++) { if((ev->events[i])->type != kLvzMidiType) continue; LvzMidiEvent* event = (LvzMidiEvent*)ev->events[i]; @@ -963,7 +960,7 @@ LvzInt32 mdaJX10::processEvents(LvzEvents* ev) default: //all notes off if(midiData[1]>0x7A) { - for(long v=0; vfParam1); - setParameter(1, p->fParam7); - setParameter(2, p->fParam9); - setParameter(3, p->fParam4); - setParameter(4, p->fParam5); - setParameter(5, p->fParam6); - setParameter(6, p->fParam3); - setParameter(7, p->fParam2); - setParameter(8, p->fParam8); - setProgramName(p->name); + gain = 0.4f * (float)pow(10.0f, 2.0f * param[1] - 1.0f); + lwid = param[6] * param[6]; + llev = gain * 0.9f * param[8] * param[8]; + hwid = param[3] * param[3]; + hdep = param[4] * param[4] * getSampleRate() / 760.0f; + hlev = gain * 0.9f * param[5] * param[5]; } void mdaLeslie::suspend() @@ -156,29 +142,40 @@ void mdaLeslie::suspend() void mdaLeslie::setProgramName(char *name) { - strcpy(programName, name); + strcpy(programs[curProgram].name, name); } void mdaLeslie::getProgramName(char *name) { - strcpy(name, programName); + strcpy(name, programs[curProgram].name); +} + +bool mdaLeslie::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if ((unsigned int)index < NPROGS) + { + strcpy(name, programs[index].name); + return true; + } + return false; } float mdaLeslie::getParameter(LvzInt32 index) { - float v=0; + float v=0; + float * param = programs[curProgram].param; switch(index) { - case 0: v = fParam1; break; - case 1: v = fParam7; break; - case 2: v = fParam9; break; - case 3: v = fParam4; break; - case 4: v = fParam5; break; - case 5: v = fParam6; break; - case 6: v = fParam3; break; - case 7: v = fParam2; break; - case 8: v = fParam8; break; + case 0: v = param[0]; break; + case 1: v = param[6]; break; + case 2: v = param[8]; break; + case 3: v = param[3]; break; + case 4: v = param[4]; break; + case 5: v = param[5]; break; + case 6: v = param[2]; break; + case 7: v = param[1]; break; + case 8: v = param[7]; break; } return v; } @@ -200,26 +197,27 @@ void mdaLeslie::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void mdaLeslie::getParameterDisplay(LvzInt32 index, char *text) { + float * param = programs[curProgram].param; switch(index) { case 0: - if(fParam1<0.5f) + if(param[0]<0.5f) { - if(fParam1 < 0.1f) strcpy(text, "STOP"); + if(param[0] < 0.1f) strcpy(text, "STOP"); else strcpy(text, "SLOW"); } else strcpy(text, "FAST"); break; - case 1: long2string((long)(100 * fParam7), text); break; - case 2: long2string((long)(100 * fParam9), text); break; - case 3: long2string((long)(100 * fParam4), text); break; - case 4: long2string((long)(100 * fParam5), text); break; - case 5: long2string((long)(100 * fParam6), text); break; - case 6: long2string((long)(10*int((float)pow(10.0f,1.179f + fParam3))), text); break; - case 7: long2string((long)(40 * fParam2 - 20), text); break; - case 8: long2string((long)(200 * fParam8), text); break; + case 1: int2strng((LvzInt32)(100 * param[6]), text); break; + case 2: int2strng((LvzInt32)(100 * param[8]), text); break; + case 3: int2strng((LvzInt32)(100 * param[3]), text); break; + case 4: int2strng((LvzInt32)(100 * param[4]), text); break; + case 5: int2strng((LvzInt32)(100 * param[5]), text); break; + case 6: int2strng((LvzInt32)(10*int((float)pow(10.0f,1.179f + param[2]))), text); break; + case 7: int2strng((LvzInt32)(40 * param[1] - 20), text); break; + case 8: int2strng((LvzInt32)(200 * param[7]), text); break; } } @@ -247,7 +245,7 @@ void mdaLeslie::process(float **inputs, float **outputs, LvzInt32 sampleFrames) float hl=hlev, hs=hspd, ht, hm=hmom, hp=hphi, hw=hwid, hd=hdep; float ll=llev, ls=lspd, lt, lm=lmom, lp=lphi, lw=lwid; float hint, k0=0.03125f, k1=32.f; - long hdd, hdd2, k=0, hps=hpos; + LvzInt32 hdd, hdd2, k=0, hps=hpos; ht=hset*(1.f-hm); lt=lset*(1.f-lm); @@ -280,7 +278,7 @@ void mdaLeslie::process(float **inputs, float **outputs, LvzInt32 sampleFrames) dshp = k0 * ((float)sin(hp + k1*hs) - shp); dslp = k0 * ((float)sin(lp + k1*ls) - slp); - k=(long)k1; + k=(LvzInt32)k1; } fb1 = fo * (fb1 - a) + a; @@ -334,7 +332,7 @@ void mdaLeslie::processReplacing(float **inputs, float **outputs, LvzInt32 sampl float hl=hlev, hs=hspd, ht, hm=hmom, hp=hphi, hw=hwid, hd=hdep; float ll=llev, ls=lspd, lt, lm=lmom, lp=lphi, lw=lwid; float hint, k0=0.03125f, k1=32.f; //k0 = 1/k1 - long hdd, hdd2, k=0, hps=hpos; + LvzInt32 hdd, hdd2, k=0, hps=hpos; ht=hset*(1.f-hm); //target speeds lt=lset*(1.f-lm); @@ -365,7 +363,7 @@ void mdaLeslie::processReplacing(float **inputs, float **outputs, LvzInt32 sampl dshp = k0 * ((float)sin(hp + k1*hs) - shp); dslp = k0 * ((float)sin(lp + k1*ls) - slp); - k=(long)k1; + k=(LvzInt32)k1; } fb1 = fo * (fb1 - a) + a; //crossover diff --git a/src/mdaLeslie.h b/src/mdaLeslie.h index c6d3675..c4c21cd 100644 --- a/src/mdaLeslie.h +++ b/src/mdaLeslie.h @@ -3,16 +3,16 @@ #include "audioeffectx.h" +#define NPARAMS 9 //number of parameters +#define NPROGS 3 //number of programs + class mdaLeslieProgram { public: mdaLeslieProgram(); - ~mdaLeslieProgram() {} - private: friend class mdaLeslie; - float fParam1, fParam3, fParam4, fParam5, fParam6; - float fParam7, fParam9, fParam2, fParam8; + float param[NPARAMS]; char name[24]; }; @@ -27,6 +27,7 @@ public: virtual void setProgram(LvzInt32 program); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -40,16 +41,7 @@ public: virtual LvzInt32 getVendorVersion() { return 1000; } protected: - float fParam1; - float fParam3; - float fParam4; - float fParam5; - float fParam6; - float fParam7; - float fParam9; - float fParam2; - float fParam8; - + void update(); mdaLeslieProgram *programs; float filo; //crossover filter coeff @@ -58,11 +50,9 @@ protected: float hspd, hset, hmom, hphi, hwid, hlev, hdep; float lspd, lset, lmom, lphi, lwid, llev, gain; float *hbuf; //HF delay buffer - long size, hpos; //buffer length & pointer + LvzInt32 size, hpos; //buffer length & pointer float chp, dchp, clp, dclp, shp, dshp, slp, dslp; - - char programName[32]; }; #endif diff --git a/src/mdaLimiter.cpp b/src/mdaLimiter.cpp index 2d0399a..98febd3 100644 --- a/src/mdaLimiter.cpp +++ b/src/mdaLimiter.cpp @@ -55,6 +55,16 @@ void mdaLimiter::getProgramName(char *name) strcpy(name, programName); } +bool mdaLimiter::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + void mdaLimiter::setParameter(LvzInt32 index, float value) { switch(index) @@ -107,16 +117,16 @@ void mdaLimiter::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void mdaLimiter::getParameterDisplay(LvzInt32 index, char *text) { switch(index) { - case 0: long2string((long)(40.0*fParam1 - 40.0),text); break; - case 1: long2string((long)(40.0*fParam2 - 20.0),text); break; - case 3: long2string((long)(-301030.1 / (getSampleRate() * log10(1.0 - att))),text); break; - case 2: long2string((long)(-301.0301 / (getSampleRate() * log10(1.0 - rel))),text); break; + case 0: int2strng((LvzInt32)(40.0*fParam1 - 40.0),text); break; + case 1: int2strng((LvzInt32)(40.0*fParam2 - 20.0),text); break; + case 3: int2strng((LvzInt32)(-301030.1 / (getSampleRate() * log10(1.0 - att))),text); break; + case 2: int2strng((LvzInt32)(-301.0301 / (getSampleRate() * log10(1.0 - rel))),text); break; case 4: if(fParam5<0.5) strcpy(text, "HARD"); else strcpy(text, "SOFT"); break; } @@ -129,7 +139,7 @@ void mdaLimiter::getParameterLabel(LvzInt32 index, char *label) { case 0: strcpy(label, "dB"); break; case 1: strcpy(label, "dB"); break; - case 3: strcpy(label, "µs"); break; + case 3: strcpy(label, "�s"); break; case 2: strcpy(label, "ms"); break; case 4: strcpy(label, ""); break; } diff --git a/src/mdaLimiter.h b/src/mdaLimiter.h index 0cef362..276a85d 100644 --- a/src/mdaLimiter.h +++ b/src/mdaLimiter.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); diff --git a/src/mdaLooplex.cpp b/src/mdaLooplex.cpp index 8ae249f..76f84b1 100644 --- a/src/mdaLooplex.cpp +++ b/src/mdaLooplex.cpp @@ -10,6 +10,11 @@ #include #include +#if __linux__ +#include +#include +#endif + AudioEffect *createEffectInstance(audioMasterCallback audioMaster) { @@ -35,10 +40,27 @@ public: #if _WIN32 - #include + #include #pragma comment(lib, "user32.lib") static UINT timer = 0; - VOID CALLBACK TimerCallback(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) + VOID CALLBACK TimerCallback(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) +#elif __linux__ + #define IDLE_MICS (IDLE_MSEC * 1000) + static pthread_t thread = 0; + static unsigned int timer = 0; + static void TimerCallback(); + static void * ThreadCallback(void * args) + { + while (timer) + { + TimerCallback(); + usleep(IDLE_MICS); + } + thread = 0; + pthread_exit(0); + return 0; + } + void TimerCallback() #else //OSX #include EventLoopTimerRef timer = 0; @@ -59,10 +81,13 @@ public: { #if _WIN32 KillTimer(NULL, timer); + #elif defined(__linux__) + timer = 0; + while (thread) usleep(1000); #else //OSX RemoveEventLoopTimer(timer); #endif - timer = 0; + timer = 0; } } else @@ -81,6 +106,30 @@ IdleList::IdleList(mdaLooplex *effect, IdleList *next) : effect(effect), next(ne { #if WIN32 timer = SetTimer(NULL, 0, IDLE_MSEC, TimerCallback); + #elif __linux__ + timer = 1; + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_attr_setstacksize(&attr, 16 * 1024); + int policy; + + if (pthread_attr_getschedpolicy(&attr, &policy) == 0) + { + struct sched_param param; + param.sched_priority = sched_get_priority_min(policy); + pthread_attr_setschedpolicy(&attr, SCHED_OTHER); + pthread_attr_setschedparam(&attr, ¶m); + } + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, 0); + + if (pthread_create(&thread, &attr, &ThreadCallback, 0) != 0) + { + thread = 0; + timer = 0; + fprintf(stderr, "Error: mdaLooplex.cpp (line %d)\n", __LINE__); + } + pthread_attr_destroy(&attr); #else //OSX double ms = kEventDurationMillisecond * (double)IDLE_MSEC; InstallEventLoopTimer(GetCurrentEventLoop(), ms, ms, NewEventLoopTimerUPP(TimerCallback), 0, &timer); @@ -109,7 +158,7 @@ mdaLooplexProgram::mdaLooplexProgram() mdaLooplex::mdaLooplex(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, NPROGS, NPARAMS) { - + Fs = 44100.0f; //won't we know the sample rate by the time we need it? //initialise... @@ -145,6 +194,8 @@ mdaLooplex::mdaLooplex(audioMasterCallback audioMaster) : AudioEffectX(audioMast void mdaLooplex::update() //parameter change { + float * param = programs[curProgram].param; + if(fabs(param[1] - oldParam1) > 0.1f) { oldParam1 = param[1]; @@ -187,20 +238,20 @@ void mdaLooplex::resume() { //should reset position here... bufpos = 0; - - //needIdle(); //idle broken in VST2.4 - DECLARE_LVZ_DEPRECATED (wantEvents) (); + + //needIdle(); //idle broken in VST2.4 + DECLARE_LVZ_DEPRECATED (wantEvents) (); } void mdaLooplex::idle() -{ +{ if(bypassed) { if(busy) return; //only do once per bypass busy = 1; - - bufmax = 2 * (long)Fs * (long)(10.5f + 190.0f * param[0]); + float * param = programs[curProgram].param; + bufmax = 2 * (LvzInt32)Fs * (LvzInt32)(10.5f + 190.0f * param[0]); if(buffer) delete [] buffer; buffer = new short[bufmax + 10]; if(buffer) memset(buffer, 0, (bufmax + 10) * sizeof(short)); else bufmax = 0; @@ -216,11 +267,13 @@ mdaLooplex::~mdaLooplex () //destroy any buffers... { if(item->effect == this) { - item->remove = true; - #if _WIN32 //and stop timer in case our last instance is about to unload - TimerCallback(0, 0, 0, 0); - #else - TimerCallback(0, 0); + item->remove = true; + #if _WIN32 //and stop timer in case our last instance is about to unload + TimerCallback(0, 0, 0, 0); + #elif __linux__ + TimerCallback(); + #else + TimerCallback(0, 0); #endif break; } @@ -237,19 +290,19 @@ mdaLooplex::~mdaLooplex () //destroy any buffers... char wh[44]; memcpy(wh, "RIFF____WAVEfmt \20\0\0\0\1\0\2\0________\4\0\20\0data____", 44); - long l = 36 + buflen * 2; + LvzInt32 l = 36 + buflen * 2; wh[4] = (char)(l & 0xFF); l >>= 8; wh[5] = (char)(l & 0xFF); l >>= 8; wh[6] = (char)(l & 0xFF); l >>= 8; wh[7] = (char)(l & 0xFF); - l = (long)(Fs + 0.5f); + l = (LvzInt32)(Fs + 0.5f); wh[24] = (char)(l & 0xFF); l >>= 8; wh[25] = (char)(l & 0xFF); l >>= 8; wh[26] = (char)(l & 0xFF); l >>= 8; wh[27] = (char)(l & 0xFF); - l = 4 * (long)(Fs + 0.5f); + l = 4 * (LvzInt32)(Fs + 0.5f); wh[28] = (char)(l & 0xFF); l >>= 8; wh[29] = (char)(l & 0xFF); l >>= 8; wh[30] = (char)(l & 0xFF); l >>= 8; @@ -282,31 +335,25 @@ mdaLooplex::~mdaLooplex () //destroy any buffers... } delete [] buffer; - } + } } void mdaLooplex::setProgram(LvzInt32 program) -{ - long i; - - mdaLooplexProgram *p = &programs[program]; - curProgram = program; - setProgramName(p->name); - for(i=0; iparam[i]; - update(); +{ + curProgram = program; + update(); } void mdaLooplex::setParameter(LvzInt32 index, float value) -{ - mdaLooplexProgram *p = &programs[curProgram]; - param[index] = p->param[index] = value; +{ + programs[curProgram].param[index] = value; update(); } -float mdaLooplex::getParameter(LvzInt32 index) { return param[index]; } +float mdaLooplex::getParameter(LvzInt32 index) { return programs[curProgram].param[index]; } void mdaLooplex::setProgramName(char *name) { strcpy(programs[curProgram].name, name); } void mdaLooplex::getProgramName(char *name) { strcpy(name, programs[curProgram].name); } void mdaLooplex::setBlockSize(LvzInt32 blockSize) { AudioEffectX::setBlockSize(blockSize); } @@ -317,7 +364,7 @@ bool mdaLooplex::getProductString(char* text) { strcpy(text, "MDA Looplex"); re bool mdaLooplex::getProgramNameIndexed(LvzInt32 category, LvzInt32 index, char* text) { - if(index 32767) x = 32767; else if(x < -32768) x = -32768; buffer[bufpos] = (short)x; } @@ -469,7 +517,7 @@ void mdaLooplex::processReplacing(float **inputs, float **outputs, LvzInt32 samp dr = fb * (float)buffer[bufpos]; if(recreq) { - x = (long)(32768.0f * r + dr - d0 + d1 + 100000.5f) - 100000; + x = (LvzInt32)(32768.0f * r + dr - d0 + d1 + 100000.5f) - 100000; if(x > 32767) x = 32767; else if(x < -32768) x = -32768; buffer[bufpos] = (short)x; } @@ -498,8 +546,8 @@ void mdaLooplex::processReplacing(float **inputs, float **outputs, LvzInt32 samp if(framenumEvents; i++) + for (LvzInt32 i=0; inumEvents; i++) { if((ev->events[i])->type != kLvzMidiType) continue; LvzMidiEvent* event = (LvzMidiEvent*)ev->events[i]; diff --git a/src/mdaLooplex.h b/src/mdaLooplex.h index e838c7f..f35e83a 100644 --- a/src/mdaLooplex.h +++ b/src/mdaLooplex.h @@ -18,8 +18,6 @@ class mdaLooplexProgram friend class mdaLooplex; public: mdaLooplexProgram(); - ~mdaLooplexProgram() {} - private: float param[NPARAMS]; char name[24]; @@ -63,21 +61,20 @@ public: private: void update(); //my parameter update - float param[NPARAMS]; mdaLooplexProgram* programs; float Fs; #define EVENTBUFFER 120 #define EVENTS_DONE 99999999 - long notes[EVENTBUFFER + 8]; //list of delta|note|velocity for current block + LvzInt32 notes[EVENTBUFFER + 8]; //list of delta|note|velocity for current block ///global internal variables float in_mix, in_pan, out_mix, feedback, modwhl; short *buffer; - long bufpos, buflen, bufmax, mode; + LvzInt32 bufpos, buflen, bufmax, mode; - long bypass, bypassed, busy, status, recreq; + LvzInt32 bypass, bypassed, busy, status, recreq; float oldParam0, oldParam1, oldParam2; }; diff --git a/src/mdaLoudness.cpp b/src/mdaLoudness.cpp index 1b490fe..4ec1eba 100644 --- a/src/mdaLoudness.cpp +++ b/src/mdaLoudness.cpp @@ -12,7 +12,7 @@ #include #include #include - + AudioEffect *createEffectInstance(audioMasterCallback audioMaster) { return new mdaLoudness(audioMaster); @@ -54,17 +54,18 @@ mdaLoudness::mdaLoudness(audioMasterCallback audioMaster): AudioEffectX(audioMas DECLARE_LVZ_DEPRECATED(canMono) (); canProcessReplacing(); - programs = new mdaLoudnessProgram[numPrograms]; + programs = new mdaLoudnessProgram[NPROGS]; setProgram(0); - suspend(); + suspend(); } void mdaLoudness::resume() ///update internal parameters... { + float * param = programs[curProgram].param; float f, tmp; - long i; + LvzInt32 i; tmp = param[0] + param[0] - 1.0f; igain = 60.0f * tmp * tmp; @@ -75,7 +76,7 @@ void mdaLoudness::resume() ///update internal parameters... if(tmp<0.0f) ogain *= -1.0f; f = 0.1f * igain + 6.0f; //coefficient index + fractional part - i = (long)f; + i = (LvzInt32)f; f -= (float)i; tmp = loudness[i][0]; A0 = tmp + f * (loudness[i + 1][0] - tmp); @@ -112,29 +113,33 @@ void mdaLoudness::suspend() ///clear any buffers... mdaLoudness::~mdaLoudness() ///destroy any buffers... { - if(programs) delete[] programs; + if(programs) delete[] programs; } void mdaLoudness::setProgram(LvzInt32 program) { - int i=0; - - mdaLoudnessProgram *p = &programs[program]; - curProgram = program; - setProgramName(p->name); - for(i=0; iparam[i]; + curProgram = program; resume(); } void mdaLoudness::setParameter(LvzInt32 index, float value) { - programs[curProgram].param[index] = param[index] = value; //bug was here! + programs[curProgram].param[index] = value; //bug was here! resume(); } -float mdaLoudness::getParameter(LvzInt32 index) { return param[index]; } -void mdaLoudness::setProgramName(char *name) { strcpy(programName, name); } -void mdaLoudness::getProgramName(char *name) { strcpy(name, programName); } +float mdaLoudness::getParameter(LvzInt32 index) { return programs[curProgram].param[index]; } +void mdaLoudness::setProgramName(char *name) { strcpy(programs[curProgram].name, name); } +void mdaLoudness::getProgramName(char *name) { strcpy(name, programs[curProgram].name); } +bool mdaLoudness::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if ((unsigned int)index < NPROGS) + { + strcpy(name, programs[index].name); + return true; + } + return false; +} void mdaLoudness::getParameterName(LvzInt32 index, char *label) @@ -155,7 +160,7 @@ void mdaLoudness::getParameterDisplay(LvzInt32 index, char *text) switch(index) { case 0: sprintf(string, "%.1f", igain); break; - case 2: if(param[index]>0.5f) strcpy (string, "ON"); + case 2: if(programs[curProgram].param[index]>0.5f) strcpy (string, "ON"); else strcpy (string, "OFF"); break; default: sprintf(string, "%.1f", ogain); break; } diff --git a/src/mdaLoudness.h b/src/mdaLoudness.h index 18f4f21..0e13d95 100644 --- a/src/mdaLoudness.h +++ b/src/mdaLoudness.h @@ -13,8 +13,6 @@ class mdaLoudnessProgram { public: mdaLoudnessProgram(); - ~mdaLoudnessProgram() {} - private: friend class mdaLoudness; float param[NPARAMS]; @@ -33,6 +31,7 @@ public: virtual void setProgram(LvzInt32 program); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -47,14 +46,12 @@ public: virtual LvzInt32 getVendorVersion() { return 1000; } protected: - float param[NPARAMS]; - char programName[32]; mdaLoudnessProgram *programs; ///global internal variables float Z0, Z1, Z2, Z3, A0, A1, A2, gain; float igain, ogain; - long mode; + LvzInt32 mode; }; #endif diff --git a/src/mdaMultiBand.cpp b/src/mdaMultiBand.cpp index 003452c..035c69d 100644 --- a/src/mdaMultiBand.cpp +++ b/src/mdaMultiBand.cpp @@ -2,14 +2,14 @@ #include #include - + AudioEffect *createEffectInstance(audioMasterCallback audioMaster) { return new mdaMultiBand(audioMaster); } mdaMultiBand::mdaMultiBand(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, 1, 13) // programs, parameters -{ +{ //inits here! fParam1 = (float)1.00; //Listen: L/M/H/out fParam2 = (float)0.103; //xover1 @@ -78,7 +78,7 @@ mdaMultiBand::mdaMultiBand(audioMasterCallback audioMaster) : AudioEffectX(audio } fi1 = (float)pow(10.0,fParam2 - 1.70); fo1=(float)(1.0 - fi1); fi2 = (float)pow(10.0,fParam3 - 1.05); fo2=(float)(1.0 - fi2); - mswap = 0; + mswap = 0; } mdaMultiBand::~mdaMultiBand() @@ -100,6 +100,16 @@ void mdaMultiBand::getProgramName(char *name) strcpy(name, programName); } +bool mdaMultiBand::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + void mdaMultiBand::setParameter(LvzInt32 index, float value) { switch(index) @@ -196,7 +206,7 @@ void mdaMultiBand::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void mdaMultiBand::getParameterDisplay(LvzInt32 index, char *text) { @@ -207,17 +217,17 @@ void mdaMultiBand::getParameterDisplay(LvzInt32 index, char *text) case 1: case 2: strcpy(text, "Mid"); break; case 3: case 4: strcpy(text, "High"); break; default: strcpy(text, "Output"); break; } break; - case 1: long2string((long)(getSampleRate() * fi1 * (0.098 + 0.09*fi1 + 0.5*(float)pow(fi1,8.2f))), text); break; - case 2: long2string((long)(getSampleRate() * fi2 * (0.015 + 0.15*fi2 + 0.9*(float)pow(fi2,8.2f))), text); break; - case 3: long2string((long)(30.0 * fParam4), text); break; - case 4: long2string((long)(30.0 * fParam5), text); break; - case 5: long2string((long)(30.0 * fParam6), text); break; - case 6: long2string((long)(40.0 * fParam7 - 20.0), text); break; - case 7: long2string((long)(40.0 * fParam8 - 20.0), text); break; - case 8: long2string((long)(40.0 * fParam9 - 20.0), text); break; - case 9: long2string((long)(-301030.1 / (getSampleRate() * log10(1.0 - att2))),text); break; - case 10: long2string((long)(-301.0301 / (getSampleRate() * log10(1.0 - rel2))),text); break; - case 11: long2string((long)(200.0 * fParam12), text); break; + case 1: int2strng((LvzInt32)(getSampleRate() * fi1 * (0.098 + 0.09*fi1 + 0.5*(float)pow(fi1,8.2f))), text); break; + case 2: int2strng((LvzInt32)(getSampleRate() * fi2 * (0.015 + 0.15*fi2 + 0.9*(float)pow(fi2,8.2f))), text); break; + case 3: int2strng((LvzInt32)(30.0 * fParam4), text); break; + case 4: int2strng((LvzInt32)(30.0 * fParam5), text); break; + case 5: int2strng((LvzInt32)(30.0 * fParam6), text); break; + case 6: int2strng((LvzInt32)(40.0 * fParam7 - 20.0), text); break; + case 7: int2strng((LvzInt32)(40.0 * fParam8 - 20.0), text); break; + case 8: int2strng((LvzInt32)(40.0 * fParam9 - 20.0), text); break; + case 9: int2strng((LvzInt32)(-301030.1 / (getSampleRate() * log10(1.0 - att2))),text); break; + case 10: int2strng((LvzInt32)(-301.0301 / (getSampleRate() * log10(1.0 - rel2))),text); break; + case 11: int2strng((LvzInt32)(200.0 * fParam12), text); break; case 12: if(mswap) strcpy(text, "S"); else strcpy(text, "M"); break; } @@ -236,7 +246,7 @@ void mdaMultiBand::getParameterLabel(LvzInt32 index, char *label) case 6: strcpy(label, "dB"); break; case 7: strcpy(label, "dB"); break; case 8: strcpy(label, "dB"); break; - case 9: strcpy(label, "µs"); break; + case 9: strcpy(label, "�s"); break; case 10: strcpy(label, "ms"); break; case 11: strcpy(label, "% Width"); break; case 12: strcpy(label, ""); break; diff --git a/src/mdaMultiBand.h b/src/mdaMultiBand.h index f91bd17..6f83c56 100644 --- a/src/mdaMultiBand.h +++ b/src/mdaMultiBand.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); diff --git a/src/mdaOverdrive.cpp b/src/mdaOverdrive.cpp index 2abe56d..6fd319b 100644 --- a/src/mdaOverdrive.cpp +++ b/src/mdaOverdrive.cpp @@ -1,7 +1,7 @@ #include "mdaOverdrive.h" -#include - +#include + AudioEffect *createEffectInstance(audioMasterCallback audioMaster) { @@ -22,12 +22,12 @@ mdaOverdrive::mdaOverdrive(audioMasterCallback audioMaster) : AudioEffectX(audio strcpy(programName, "Soft Overdrive"); filt1 = filt2 = 0.0f; - setParameter(0, 0.0f); + setParameter(0, 0.0f); } mdaOverdrive::~mdaOverdrive() { - + } bool mdaOverdrive::getProductString(char* text) { strcpy(text, "MDA Overdrive"); return true; } @@ -44,6 +44,16 @@ void mdaOverdrive::getProgramName(char *name) strcpy(name, programName); } +bool mdaOverdrive::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + void mdaOverdrive::setParameter(LvzInt32 index, float value) { switch(index) @@ -80,15 +90,15 @@ void mdaOverdrive::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void mdaOverdrive::getParameterDisplay(LvzInt32 index, char *text) { switch(index) { - case 0: long2string((long)(100 * fParam1 ), text); break; - case 1: long2string((long)(100 * fParam2 ), text); break; - case 2: long2string((long)( 40 * fParam3 - 20), text); break; + case 0: int2strng((LvzInt32)(100 * fParam1 ), text); break; + case 1: int2strng((LvzInt32)(100 * fParam2 ), text); break; + case 2: int2strng((LvzInt32)( 40 * fParam3 - 20), text); break; } } diff --git a/src/mdaOverdrive.h b/src/mdaOverdrive.h index a1fff23..a45eba7 100644 --- a/src/mdaOverdrive.h +++ b/src/mdaOverdrive.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); diff --git a/src/mdaPiano.cpp b/src/mdaPiano.cpp index 2fafaf5..ccaa9f5 100644 --- a/src/mdaPiano.cpp +++ b/src/mdaPiano.cpp @@ -9,7 +9,7 @@ #include #include - + //#include "AEffEditor.hpp" ////for GUI @@ -48,7 +48,7 @@ mdaPiano::mdaPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, if(programs) { //fill patches... - long i=0; + LvzInt32 i=0; fillpatch(i++, "MDA Piano", 0.500f, 0.500f, 0.500f, 0.5f, 0.803f, 0.251f, 0.376f, 0.500f, 0.330f, 0.500f, 0.246f, 0.500f); fillpatch(i++, "Plain Piano", 0.500f, 0.500f, 0.500f, 0.5f, 0.751f, 0.000f, 0.452f, 0.000f, 0.000f, 0.500f, 0.000f, 0.500f); fillpatch(i++, "Compressed Piano", 0.902f, 0.399f, 0.623f, 0.5f, 1.000f, 0.331f, 0.299f, 0.499f, 0.330f, 0.500f, 0.000f, 0.500f); @@ -92,7 +92,7 @@ mdaPiano::mdaPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, kgrp[14].root = 93; kgrp[14].high = 999; kgrp[14].pos = 574123; kgrp[14].end = 586343; kgrp[14].loop = 2399; //initialise... - for(long v=0; v 0.03f) width = 0.03f; - poly = 8 + (long)(24.9f * param[8]); + poly = 8 + (LvzInt32)(24.9f * param[8]); } @@ -145,25 +146,22 @@ void mdaPiano::resume() mdaPiano::~mdaPiano () //destroy any buffers... { if(programs) delete [] programs; - if(comb) delete[] comb; + if(comb) delete[] comb; } void mdaPiano::setProgram(LvzInt32 program) { - long i; - - mdaPianoProgram *p = &programs[program]; curProgram = program; - for(i=0; iparam[i]; - update(); + update(); + + // TODO: guiUpdate ??? } void mdaPiano::setParameter(LvzInt32 index, float value) { - mdaPianoProgram *p = &programs[curProgram]; - param[index] = p->param[index] = value; + programs[curProgram].param[index] = value; update(); // if(editor) editor->postUpdate(); //For GUI @@ -172,7 +170,7 @@ void mdaPiano::setParameter(LvzInt32 index, float value) } -void mdaPiano::fillpatch(long p, const char *name, float p0, float p1, float p2, float p3, float p4, +void mdaPiano::fillpatch(LvzInt32 p, char *name, float p0, float p1, float p2, float p3, float p4, float p5, float p6, float p7, float p8, float p9, float p10,float p11) { strcpy(programs[p].name, name); @@ -185,7 +183,7 @@ void mdaPiano::fillpatch(long p, const char *name, float p0, float p1, float p2, } -float mdaPiano::getParameter(LvzInt32 index) { return param[index]; } +float mdaPiano::getParameter(LvzInt32 index) { return programs[curProgram].param[index]; } void mdaPiano::setProgramName(char *name) { strcpy(programs[curProgram].name, name); } void mdaPiano::getProgramName(char *name) { strcpy(name, programs[curProgram].name); } void mdaPiano::setBlockSize(LvzInt32 blockSize) { AudioEffectX::setBlockSize(blockSize); } @@ -210,7 +208,7 @@ bool mdaPiano::getOutputProperties(LvzInt32 index, LvzPinProperties* properties) bool mdaPiano::getProgramNameIndexed(LvzInt32 category, LvzInt32 index, char* text) { - if(index -2.0f) || !(l < 2.0f)) { - printf("what is this shit? %ld, %f, %f\n", i, x, V->f0); + printf("what is this shit? %d, %f, %f\n", i, x, V->f0); l = 0.0f; } if(!(r > -2.0f) || !(r < 2.0f)) @@ -423,8 +422,8 @@ if(!(r > -2.0f) || !(r < 2.0f)) if(frame -2.0f) || !(r < 2.0f)) } -void mdaPiano::noteOn(long note, long velocity) +void mdaPiano::noteOn(LvzInt32 note, LvzInt32 velocity) { + float * param = programs[curProgram].param; float l=99.0f; - long v, vl=0, k, s; + LvzInt32 v, vl=0, k, s; if(velocity>0) { @@ -458,14 +458,14 @@ void mdaPiano::noteOn(long note, long velocity) if(note > 60) l += stretch * (float)k; //stretch s = size; - if(velocity > 40) s += (long)(sizevel * (float)(velocity - 40)); + if(velocity > 40) s += (LvzInt32)(sizevel * (float)(velocity - 40)); k = 0; while(note > (kgrp[k].high + s)) k++; //find keygroup l += (float)(note - kgrp[k].root); //pitch l = 22050.0f * iFs * (float)exp(0.05776226505 * l); - voice[vl].delta = (long)(65536.0f * l); + voice[vl].delta = (LvzInt32)(65536.0f * l); voice[vl].frac = 0; voice[vl].pos = kgrp[k].pos; voice[vl].end = kgrp[k].end; @@ -508,9 +508,9 @@ void mdaPiano::noteOn(long note, long velocity) LvzInt32 mdaPiano::processEvents(LvzEvents* ev) { - long npos=0; + LvzInt32 npos=0; - for (long i=0; inumEvents; i++) + for (LvzInt32 i=0; inumEvents; i++) { if((ev->events[i])->type != kLvzMidiType) continue; LvzMidiEvent* event = (LvzMidiEvent*)ev->events[i]; @@ -556,7 +556,7 @@ LvzInt32 mdaPiano::processEvents(LvzEvents* ev) default: //all notes off if(midiData[1]>0x7A) { - for(long v=0; v -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void float2strng(float value, char *string) { sprintf(string, "%.2f", value); } void mdaRezFilter::getParameterDisplay(LvzInt32 index, char *text) { switch(index) { - case 0: long2string((long)(100 * fParam0), text); break; - case 1: long2string((long)(100 * fParam1), text); break; - case 2: long2string((long)(40 *fParam2 - 20),text); break; - case 3: long2string((long)(200 * fParam3 - 100), text); break; + case 0: int2strng((LvzInt32)(100 * fParam0), text); break; + case 1: int2strng((LvzInt32)(100 * fParam1), text); break; + case 2: int2strng((LvzInt32)(40 *fParam2 - 20),text); break; + case 3: int2strng((LvzInt32)(200 * fParam3 - 100), text); break; case 4: float2strng((float)(-301.0301 / (getSampleRate() * log10(1.0 - att))),text); break; case 5: float2strng((float)(-301.0301 / (getSampleRate() * log10(rel))),text); break; - case 6: long2string((long)(200 * fParam6 - 100), text); break; + case 6: int2strng((LvzInt32)(200 * fParam6 - 100), text); break; case 7: float2strng((float)pow(10.0f, 4.f*fParam7 - 2.f), text); break; case 8: if(tthr==0.f) strcpy(text, "FREE RUN"); - else long2string((long)(20*log10(0.5*tthr)), text); break; - case 9: long2string((long)(100 * fParam9), text); break; + else int2strng((LvzInt32)(20*log10(0.5*tthr)), text); break; + case 9: int2strng((LvzInt32)(100 * fParam9), text); break; } } diff --git a/src/mdaRezFilter.h b/src/mdaRezFilter.h index 14deec3..a2579a0 100644 --- a/src/mdaRezFilter.h +++ b/src/mdaRezFilter.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); diff --git a/src/mdaRingMod.cpp b/src/mdaRingMod.cpp index 20a689f..259c597 100644 --- a/src/mdaRingMod.cpp +++ b/src/mdaRingMod.cpp @@ -45,6 +45,16 @@ void mdaRingMod::getProgramName(char *name) strcpy(name, programName); } +bool mdaRingMod::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + void mdaRingMod::setParameter(LvzInt32 index, float value) { switch(index) @@ -81,15 +91,15 @@ void mdaRingMod::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void mdaRingMod::getParameterDisplay(LvzInt32 index, char *text) { switch(index) { - case 0: long2string((long)(100. * floor(160. * fParam1)), text); break; - case 1: long2string((long)(100. * fParam2), text); break; - case 2: long2string((long)(100. * fParam3), text); break; + case 0: int2strng((LvzInt32)(100. * floor(160. * fParam1)), text); break; + case 1: int2strng((LvzInt32)(100. * fParam2), text); break; + case 2: int2strng((LvzInt32)(100. * fParam3), text); break; } } diff --git a/src/mdaRingMod.h b/src/mdaRingMod.h index d3934e2..5255f2b 100644 --- a/src/mdaRingMod.h +++ b/src/mdaRingMod.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); diff --git a/src/mdaRoundPan.cpp b/src/mdaRoundPan.cpp index f012e18..e040f2e 100644 --- a/src/mdaRoundPan.cpp +++ b/src/mdaRoundPan.cpp @@ -83,6 +83,16 @@ void mdaRoundPan::getProgramName(char *name) strcpy(name, programName); } +bool mdaRoundPan::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + float mdaRoundPan::getParameter(LvzInt32 index) { float v=0; @@ -105,14 +115,14 @@ void mdaRoundPan::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void mdaRoundPan::getParameterDisplay(LvzInt32 index, char *text) { switch(index) { - case 0: long2string((long)(360.0 * (fParam1 - 0.5)), text); break; - case 1: long2string((long)(57.296 * dphi * getSampleRate()), text); break; + case 0: int2strng((LvzInt32)(360.0 * (fParam1 - 0.5)), text); break; + case 1: int2strng((LvzInt32)(57.296 * dphi * getSampleRate()), text); break; } } diff --git a/src/mdaRoundPan.h b/src/mdaRoundPan.h index 0aa49f7..916dcaf 100644 --- a/src/mdaRoundPan.h +++ b/src/mdaRoundPan.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -33,7 +34,7 @@ protected: float phi, dphi; //float *buffer, *buffer2; - //long size, bufpos; + //LvzInt32 size, bufpos; char programName[32]; }; diff --git a/src/mdaShepard.cpp b/src/mdaShepard.cpp index c9b8ec1..0e21794 100644 --- a/src/mdaShepard.cpp +++ b/src/mdaShepard.cpp @@ -91,6 +91,16 @@ void mdaShepard::getProgramName(char *name) strcpy(name, programName); } +bool mdaShepard::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + float mdaShepard::getParameter(LvzInt32 index) { float v=0; @@ -115,7 +125,7 @@ void mdaShepard::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void mdaShepard::getParameterDisplay(LvzInt32 index, char *text) { @@ -127,8 +137,8 @@ void mdaShepard::getParameterDisplay(LvzInt32 index, char *text) case 1: strcpy(text, "RING MOD"); break; case 2: strcpy(text, "TONES+IN"); break; } break; - case 1: long2string((long)(200 * fParam1 - 100), text); break; - case 2: long2string((long)(40 * fParam2 - 20), text); break; + case 1: int2strng((LvzInt32)(200 * fParam1 - 100), text); break; + case 2: int2strng((LvzInt32)(40 * fParam2 - 20), text); break; } } @@ -153,7 +163,7 @@ void mdaShepard::process(float **inputs, float **outputs, LvzInt32 sampleFrames) float *out2 = outputs[1]; float a, b, c, d; float r=rate, dr=drate, o=out, p=pos, di; - long x=max, m=mode, i1, i2; + LvzInt32 x=max, m=mode, i1, i2; --in1; --in2; @@ -205,7 +215,7 @@ void mdaShepard::processReplacing(float **inputs, float **outputs, LvzInt32 samp float *out2 = outputs[1]; float a, b; float r=rate, dr=drate, o=out, p=pos, di; - long x=max, m=mode, i1, i2; + LvzInt32 x=max, m=mode, i1, i2; --in1; --in2; diff --git a/src/mdaShepard.h b/src/mdaShepard.h index 4347c6b..cce85d3 100644 --- a/src/mdaShepard.h +++ b/src/mdaShepard.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -32,7 +33,7 @@ protected: float level, pos, rate, drate, out, filt; float *buf1, *buf2; - long max, mode; + LvzInt32 max, mode; char programName[32]; }; diff --git a/src/mdaSpecMeter.cpp b/src/mdaSpecMeter.cpp index 7aae786..5a02c7c 100644 --- a/src/mdaSpecMeter.cpp +++ b/src/mdaSpecMeter.cpp @@ -22,8 +22,10 @@ createEffectInstance (audioMasterCallback audioMaster) mdaSpecMeterProgram::mdaSpecMeterProgram () { - param[_PARAM0] = 1.0; - strcpy (name, "MDA SpecMeter"); + param[_PARAM0] = 0.5; + param[_PARAM1] = 0.5; + param[_PARAM2] = 0.75; + strcpy (name, "default"); } @@ -83,9 +85,9 @@ mdaSpecMeter::suspend () lpeak = rpeak = lrms = rrms = corr = 0.0f; Lhold = Rhold = 0.0f; Lmin = Rmin = 0.0000001f; - for (long i = 0; i < 16; i++) { + for (LvzInt32 i = 0; i < 16; i++) { band[0][i] = band[1][i] = 0.0f; - for (long j = 0; j < 6; j++) + for (LvzInt32 j = 0; j < 6; j++) lpp[j][i] = rpp[j][i] = 0.0f; } @@ -93,20 +95,14 @@ mdaSpecMeter::suspend () } void -mdaSpecMeter::setSampleRate (float rate) +mdaSpecMeter::setSampleRate(float sampleRate) { - AudioEffectX::setSampleRate (rate); - if (rate > 64000) { - topband = 12; - kmax = 4096; - } else { - topband = 11; - kmax = 2048; - } - iK = 1.0f / (float) kmax; + AudioEffectX::setSampleRate(sampleRate); + if(sampleRate > 64000) { topband = 12; kmax = 4096; } + else { topband = 11; kmax = 2048; } + iK = 1.0f / (float)kmax; } - mdaSpecMeter::~mdaSpecMeter () { //if(buffer) delete [] buffer; @@ -127,10 +123,21 @@ mdaSpecMeter::getProgramName (char *name) strcpy (name, programs[curProgram].name); } + +bool +mdaSpecMeter::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if ((unsigned int)index < NPROGS) { + strcpy(name, programs[index].name); + return true; + } + return false; +} + float mdaSpecMeter::getParameter (LvzInt32 index) { - return param[index]; + return programs[curProgram].param[index]; } void @@ -148,12 +155,11 @@ mdaSpecMeter::setProgram (LvzInt32 program) void mdaSpecMeter::setParameter (LvzInt32 index, float value) { - mdaSpecMeterProgram *p = &programs[curProgram]; - param[index] = p->param[index] = value; + programs[curProgram].param[index] = value; switch (index) { case _PARAM0: - gain = (float) pow (10.0f, 2.0f * param[index] - 1.0f); + gain = (float)pow(10.0f, 2.0f * programs[curProgram].param[index] - 1.0f); break; default: @@ -181,13 +187,17 @@ void mdaSpecMeter::getParameterDisplay (LvzInt32 index, char *text) { char string[16]; + float * param = programs[curProgram].param; switch (index) { case _PARAM0: - sprintf (string, "%.1f", 40.0f * param[index] - 20.0f); + sprintf(string, "%.1f", 40.0f * param[index] - 20.0f); + break; + case _PARAM1: + strcpy (string, ""); break; default: - sprintf (string, "%.0f", 0.0f * param[index]); + sprintf(string, "%.0f", 100.0f * param[index]); } string[8] = 0; strcpy (text, (char *) string); @@ -199,7 +209,7 @@ mdaSpecMeter::getParameterLabel (LvzInt32 index, char *label) { switch (index) { case _PARAM0: - strcpy (label, "Gain"); + strcpy (label, ""); break; default: strcpy (label, ""); diff --git a/src/mdaSpecMeter.h b/src/mdaSpecMeter.h index 90111c4..e99137c 100644 --- a/src/mdaSpecMeter.h +++ b/src/mdaSpecMeter.h @@ -9,10 +9,15 @@ #include +#define NPROGS 4 //can hide decay settings in programs! fast...slow...peak hold #define SILENCE 0.00000001f enum { - _PARAM0, // gain + _PARAM0, //peak decay + _PARAM1, //RMS speed + _PARAM2, //spectrum speed + _PARAM3, //peak reset? + NPARAMS }; @@ -23,8 +28,6 @@ class mdaSpecMeterProgram friend class mdaSpecMeter; public: mdaSpecMeterProgram(); - ~mdaSpecMeterProgram() {} - private: float param[NPARAMS]; char name[24]; @@ -42,6 +45,7 @@ public: virtual void setProgram(LvzInt32 program); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -56,17 +60,16 @@ public: virtual LvzInt32 getVendorVersion() { return 1000; } //accessible from editor - long counter; + LvzInt32 counter; float Lpeak, Lhold, Lmin, Lrms, Rpeak, Rhold, Rmin, Rrms, Corr; // #11 #12 float band[2][16]; //8 16 31 64 125 250 500 1k 2k 4k 8k 16k 32k - + private: mdaSpecMeterProgram *programs; - float param[NPARAMS]; float iK, lpeak, lmin, lrms, rpeak, rmin, rrms, corr, den; float lpp[6][16], rpp[6][16]; - long topband, K, kmax; + LvzInt32 topband, K, kmax; float gain; }; diff --git a/src/mdaSpecMeterGUI.cpp b/src/mdaSpecMeterGUI.cpp index 7788ec1..dcee2a0 100644 --- a/src/mdaSpecMeterGUI.cpp +++ b/src/mdaSpecMeterGUI.cpp @@ -54,23 +54,29 @@ mdaSpecMeterGUI::close() void mdaSpecMeterGUI::idle() { - long xnow = ((mdaSpecMeter *) effect)->counter; - if (xnow != xtimer) { + LvzInt32 xnow = ((mdaSpecMeter *)effect)->counter; + if(xnow != xtimer) + { xtimer = xnow; - if (draw) { // copy data from effect (this can't be the best way!) - draw->Lpeak = ((mdaSpecMeter *) effect)->Lpeak; - draw->Lmin = ((mdaSpecMeter *) effect)->Lmin; - draw->Lrms = ((mdaSpecMeter *) effect)->Lrms; - draw->Rpeak = ((mdaSpecMeter *) effect)->Rpeak; - draw->Rmin = ((mdaSpecMeter *) effect)->Rmin; - draw->Rrms = ((mdaSpecMeter *) effect)->Rrms; - draw->Corr = ((mdaSpecMeter *) effect)->Corr; - for (long i = 0; i < 13; i++) { - draw->band[0][i] = ((mdaSpecMeter *) effect)->band[0][i]; - draw->band[1][i] = ((mdaSpecMeter *) effect)->band[1][i]; + //if(draw) temp = draw->temp; + //if(label) label->setLabel(xtimer); + + if(draw) //copy data from effect (this can't be the best way!) + { + draw->Lpeak = ((mdaSpecMeter *)effect)->Lpeak; + draw->Lmin = ((mdaSpecMeter *)effect)->Lmin; + draw->Lrms = ((mdaSpecMeter *)effect)->Lrms; + draw->Rpeak = ((mdaSpecMeter *)effect)->Rpeak; + draw->Rmin = ((mdaSpecMeter *)effect)->Rmin; + draw->Rrms = ((mdaSpecMeter *)effect)->Rrms; + draw->Corr = ((mdaSpecMeter *)effect)->Corr; + for(LvzInt32 i=0; i<13; i++) + { + draw->band[0][i] = ((mdaSpecMeter *)effect)->band[0][i]; + draw->band[1][i] = ((mdaSpecMeter *)effect)->band[1][i]; } - draw->setDirty(true); // trigger redraw + draw->setDirty(true); //trigger redraw } } @@ -78,131 +84,108 @@ mdaSpecMeterGUI::idle() } -CDraw::CDraw(CRect & size, float value, CBitmap * background): - CControl(size) +CDraw::CDraw(CRect & size, float value, CBitmap * background) : CControl(size) { bitmap = background; Lpeak = Lmin = Lrms = Rpeak = Rmin = Rrms = Corr = 0.0f; - for (long i = 0; i < 16; i++) + for (LvzInt32 i = 0; i < 16; i++) band[0][i] = band[1][i] = 0.0f; setValue(value); } + CDraw::~CDraw() { } + void -CDraw::draw(CDrawContext * pContext) +CDraw::draw(CDrawContext *pContext) { - long r, p; + LvzInt32 r, p; CRect block; CRect rect(0, 0, bitmap->getWidth(), bitmap->getHeight()); bitmap->draw(pContext, rect); - /* - pContext->setFillColor(kGreenCColor); - - p = x2pix(Lmin); - block(p - 3, 10, p - 1, 18); - pContext->fillRect(block); + pContext->setFillColor(kGreenCColor); - p = x2pix(Rmin); - block(p - 3, 18, p - 1, 26); - pContext->fillRect(block); - */ + p = x2pix(Lmin); + block(p - 3, 10, p - 1, 18); + pContext->fillRect(block); + p = x2pix(Rmin); + block(p - 3, 18, p - 1, 26); + pContext->fillRect(block); + */ pContext->setFillColor(kBlackCColor); - r = x22pix(Lrms); - if (r > 454) - r = 454; - - p = x2pix(Lpeak); - if (p > 454) - p = 454; - - block = CRect(r - 1, 10, p - 1, 18); + r = x22pix(Lrms); if(r > 454) r = 454; + p = x2pix(Lpeak); if(p > 454) p = 454; + block(r - 1, 10, p - 1, 18); pContext->fillRect(block); + block(p - 1, 10, 478, 18); + if(p < 454) pContext->fillRect(block); - block = CRect(p - 1, 10, 478, 18); - if (p < 454) - pContext->fillRect(block); - - r = x22pix(Rrms); - if (r > 454) - r = 454; - - p = x2pix(Rpeak); - if (p > 454) - p = 454; - - block = CRect(r - 1, 18, p - 1, 26); + r = x22pix(Rrms); if(r > 454) r = 454; + p = x2pix(Rpeak); if(p > 454) p = 454; + block(r - 1, 18, p - 1, 26); pContext->fillRect(block); - - block = CRect(p - 1, 18, 478, 26); - if (p < 454) - pContext->fillRect(block); + block(p - 1, 18, 478, 26); + if(p < 454) pContext->fillRect(block); //block(x2pix(Rpeak), 18, 478, 26); //buf->fillRect(block); - block = CRect(235, 42, 244, 134 - (long)(90 * Corr)); + block(235, 42, 244, 134 - (LvzInt32)(90 * Corr)); pContext->fillRect(block); - long i, x1 = 2, x2 = 256; // octave bands - for (i = 0; i < 13; i++) { - float dB = band[0][i]; - block = CRect(x1, 42, x1 + 18, 49 - (long)(20.0 * log(dB))); + LvzInt32 i, x1=2, x2=256; //octave bands + float dB; + for(i=0; i<13; i++) + { + dB = band[0][i]; + block(x1, 42, x1+18, 49 - (LvzInt32)(20.0 * log(dB))); pContext->fillRect(block); x1 += 17; dB = band[1][i]; - block = CRect(x2, 42, x2 + 18, 49 - (long)(20.0 * log(dB))); + block(x2, 42, x2+18, 49 - (LvzInt32)(20.0 * log(dB))); pContext->fillRect(block); x2 += 17; } } -long +LvzInt32 CDraw::x2pix(float x) { float dB = x; - long p = 478; + LvzInt32 p = 478; - if (x > 0.00000005f) - dB = 8.6858896f * (float)log(x); + if(x > 0.00000005f) dB = 8.6858896f * (float)log(x); else dB = -146.0f; + if(dB < -20.0) + p = 293 + (LvzInt32)(2.0f * dB); else - dB = -146.0f; - - if (dB < -20.0) - p = 293 + (long)(2.0f * dB); - else - p = 453 + (long)(10.0f * dB); + p = 453 + (LvzInt32)(10.0f * dB); return p; } -long -CDraw::x22pix(float x) // power version for squared summed +LvzInt32 +CDraw::x22pix(float x) //power version for squared summed { float dB = x; - long p = 478; + LvzInt32 p = 478; - if (x > 0.00000005f) - dB = 4.3429448f * (float)log(x); + if(x > 0.00000005f) dB = 4.3429448f * (float)log(x); else dB = -146.0f; + if(dB < -20.0) + p = 293 + (LvzInt32)(2.0f * dB); else - dB = -146.0f; - - if (dB < -20.0) - p = 293 + (long)(2.0f * dB); - else if (dB < 0.0f) - p = 453 + (long)(10.0f * dB); + if(dB < 0.0f) p = 453 + (LvzInt32)(10.0f * dB); return p; } diff --git a/src/mdaSpecMeterGUI.h b/src/mdaSpecMeterGUI.h index 99a71f7..bc0a232 100644 --- a/src/mdaSpecMeterGUI.h +++ b/src/mdaSpecMeterGUI.h @@ -1,43 +1,44 @@ -#ifndef _mdaSpecMeterGUI_h_ -#define _mdaSpecMeterGUI_h_ - -#include "vstgui.h" - - -class CDraw : public CControl -{ -public: - CDraw(CRect& size, float x, CBitmap* background); - ~CDraw(); - - void draw(CDrawContext* pContext); - long x2pix(float x); - long x22pix(float x); - - float Lpeak, Lrms, Lmin, Rpeak, Rrms, Rmin, Corr; - float band[2][16]; - -protected: - CBitmap* bitmap; -}; - - -class mdaSpecMeterGUI : public AEffGUIEditor -{ -public: - mdaSpecMeterGUI(AudioEffect* effect); - ~mdaSpecMeterGUI(); - - long open(void* ptr); - void idle(); - void close(); - -private: - CDraw* draw; - CBitmap* background; - long xtimer; -}; - - -#endif // _mdaSpecMeterGUI_h_ - +#ifndef _mdaSpecMeterGUI_h_ +#define _mdaSpecMeterGUI_h_ + +#include "vstgui.h" + + +class CDraw : public CControl +{ +public: + CDraw(CRect& size, float x, CBitmap* background); + ~CDraw(); + + void draw(CDrawContext *pContext); + LvzInt32 x2pix(float x); + LvzInt32 x22pix(float x); + + float Lpeak, Lrms, Lmin, Rpeak, Rrms, Rmin, Corr; + float band[2][16]; + LvzInt32 temp; + +protected: + CBitmap* bitmap; +}; + + +class mdaSpecMeterGUI : public AEffGUIEditor +{ +public: + mdaSpecMeterGUI(AudioEffect* effect); + ~mdaSpecMeterGUI(); + + long open(void* ptr); + void idle(); + void close(); + +private: + CDraw* draw; + CBitmap* background; + LvzInt32 xtimer; +}; + + +#endif // _mdaSpecMeterGUI_h_ + diff --git a/src/mdaSplitter.cpp b/src/mdaSplitter.cpp index 018f0c9..f0c4fd6 100644 --- a/src/mdaSplitter.cpp +++ b/src/mdaSplitter.cpp @@ -37,7 +37,7 @@ mdaSplitter::mdaSplitter(audioMasterCallback audioMaster): AudioEffectX(audioMas DECLARE_LVZ_DEPRECATED(canMono) (); canProcessReplacing(); - programs = new mdaSplitterProgram[numPrograms]; + programs = new mdaSplitterProgram[NPROGS]; setProgram(0); ///differences from default program... @@ -56,7 +56,7 @@ bool mdaSplitter::getEffectName(char* name) { strcpy(name, "Splitter"); retu void mdaSplitter::resume() ///update internal parameters... { - long tmp; + float * param = programs[curProgram].param; freq = param[1]; fdisp = (float)pow(10.0f, 2.0f + 2.0f * freq); //frequency @@ -64,7 +64,7 @@ void mdaSplitter::resume() ///update internal parameters... if(freq>1.0f) freq = 1.0f; ff = -1.0f; //above - tmp = (long)(2.9f * param[2]); //frequency switching + LvzInt32 tmp = (LvzInt32)(2.9f * param[2]); //frequency switching if(tmp==0) ff = 0.0f; //below if(tmp==1) freq = 0.001f; //all @@ -72,7 +72,7 @@ void mdaSplitter::resume() ///update internal parameters... level = (float)pow(10.0f, 0.05f * ldisp + 0.3f); ll = 0.0f; //above - tmp = (long)(2.9f * param[4]); //level switching + tmp = (LvzInt32)(2.9f * param[4]); //level switching if(tmp==0) ll = -1.0f; //below if(tmp==1) level = 0.0f; //all @@ -87,7 +87,7 @@ void mdaSplitter::resume() ///update internal parameters... i2l = i2r = o2l = o2r = (float)pow(10.0f, 2.0f * param[6] - 1.0f); //gain - mode = (long)(3.9f * param[0]); //output routing + mode = (LvzInt32)(3.9f * param[0]); //output routing switch(mode) { case 0: i2l = 0.0f; i2r = 0.0f; break; @@ -112,27 +112,30 @@ mdaSplitter::~mdaSplitter() ///destroy any buffers... void mdaSplitter::setProgram(LvzInt32 program) { - int i=0; - - mdaSplitterProgram *p = &programs[program]; curProgram = program; - setProgramName(p->name); - for(i=0; iparam[i]; resume(); } void mdaSplitter::setParameter(LvzInt32 index, float value) { - programs[curProgram].param[index] = param[index] = value; //bug was here! + programs[curProgram].param[index] = value; //bug was here! resume(); } -float mdaSplitter::getParameter(LvzInt32 index) { return param[index]; } -void mdaSplitter::setProgramName(char *name) { strcpy(programName, name); } -void mdaSplitter::getProgramName(char *name) { strcpy(name, programName); } - +float mdaSplitter::getParameter(LvzInt32 index) { return programs[curProgram].param[index]; } +void mdaSplitter::setProgramName(char *name) { strcpy(programs[curProgram].name, name); } +void mdaSplitter::getProgramName(char *name) { strcpy(name, programs[curProgram].name); } +bool mdaSplitter::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if ((unsigned int)index < NPROGS) + { + strcpy(name, programs[index].name); + return true; + } + return false; +} void mdaSplitter::getParameterName(LvzInt32 index, char *label) { @@ -152,6 +155,7 @@ void mdaSplitter::getParameterName(LvzInt32 index, char *label) void mdaSplitter::getParameterDisplay(LvzInt32 index, char *text) { char string[16]; + float * param = programs[curProgram].param; switch(index) { @@ -166,7 +170,7 @@ void mdaSplitter::getParameterDisplay(LvzInt32 index, char *text) case 3: sprintf(string, "%.0f", ldisp); break; case 5: sprintf(string, "%.0f", (float)pow(10.0f, 1.0f + 2.0f * param[index])); break; case 6: sprintf(string, "%.1f", 40.0f * param[index] - 20.0f); break; - default: switch((long)(2.9f * param[index])) + default: switch((LvzInt32)(2.9f * param[index])) { case 0: strcpy (string, "BELOW"); break; case 1: strcpy (string, "ALL"); break; diff --git a/src/mdaSplitter.h b/src/mdaSplitter.h index 0c4942b..dcb078c 100644 --- a/src/mdaSplitter.h +++ b/src/mdaSplitter.h @@ -13,8 +13,6 @@ class mdaSplitterProgram { public: mdaSplitterProgram(); - ~mdaSplitterProgram() {} - private: friend class mdaSplitter; float param[NPARAMS]; @@ -33,6 +31,7 @@ public: virtual void setProgram(LvzInt32 program); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -47,15 +46,13 @@ public: virtual LvzInt32 getVendorVersion() { return 1000; } protected: - float param[NPARAMS]; - char programName[32]; mdaSplitterProgram *programs; ///global internal variables float freq, fdisp, buf0, buf1, buf2, buf3; //filter float level, ldisp, env, att, rel; //level switch float ff, ll, pp, i2l, i2r, o2l, o2r; //routing (freq, level, phase, output) - long mode; + LvzInt32 mode; }; diff --git a/src/mdaStereo.cpp b/src/mdaStereo.cpp index 59fc105..eedc62b 100644 --- a/src/mdaStereo.cpp +++ b/src/mdaStereo.cpp @@ -136,6 +136,16 @@ void mdaStereo::getProgramName(char *name) strcpy(name, programName); } +bool mdaStereo::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + float mdaStereo::getParameter(LvzInt32 index) { float v=0; @@ -164,16 +174,16 @@ void mdaStereo::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void float2strng(float value, char *string) { sprintf(string, "%.2f", value); } void mdaStereo::getParameterDisplay(LvzInt32 index, char *text) { switch(index) { - case 0: long2string((long)(200.0 * fabs(fParam1 - 0.5)), text);break; + case 0: int2strng((LvzInt32)(200.0 * fabs(fParam1 - 0.5)), text);break; case 1: float2strng((float)(1000.0 * fdel / getSampleRate()), text); break; - case 2: long2string((long)(200.0 * (fParam3 - 0.5)), text); break; + case 2: int2strng((LvzInt32)(200.0 * (fParam3 - 0.5)), text); break; case 3: if(mod>0.f) float2strng((float)(1000.0 * mod / getSampleRate()), text); else strcpy(text, "OFF"); break; case 4: float2strng((float)pow(10.0,2.0 - 3.0 * fParam5), text); break; @@ -204,7 +214,7 @@ void mdaStereo::process(float **inputs, float **outputs, LvzInt32 sampleFrames) float *out2 = outputs[1]; float a, b, c, d; float li, ld, ri, rd, del, ph=phi, dph=dphi, mo=mod; - long tmp, bp = bufpos; + LvzInt32 tmp, bp = bufpos; li = fli; ld = fld; @@ -275,7 +285,7 @@ void mdaStereo::processReplacing(float **inputs, float **outputs, LvzInt32 sampl float *out2 = outputs[1]; float a, b, c, d; float li, ld, ri, rd, del, ph=phi, dph=dphi, mo=mod; - long tmp, bp = bufpos; + LvzInt32 tmp, bp = bufpos; li = fli; ld = fld; diff --git a/src/mdaStereo.h b/src/mdaStereo.h index 61609eb..ce6912e 100644 --- a/src/mdaStereo.h +++ b/src/mdaStereo.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -36,7 +37,7 @@ protected: float fli, fld, fri, frd, fdel, phi, dphi, mod; float *buffer; - long size, bufpos; + LvzInt32 size, bufpos; char programName[32]; }; diff --git a/src/mdaSubSynth.cpp b/src/mdaSubSynth.cpp index db8f0f8..4de2ac9 100644 --- a/src/mdaSubSynth.cpp +++ b/src/mdaSubSynth.cpp @@ -48,6 +48,16 @@ void mdaSubSynth::getProgramName(char *name) strcpy(name, programName); } +bool mdaSubSynth::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + void mdaSubSynth::setProgram(LvzInt32 program) { } @@ -112,11 +122,11 @@ void mdaSubSynth::getParameterDisplay(LvzInt32 index, char *text) switch(index) { - case 1: sprintf(string, "%ld", (long)(100.0f * wet)); break; - case 2: sprintf(string, "%ld", (long)(0.0726 * getSampleRate() * pow(10.0,-2.5 + (1.5 * fParam3)))); break; - case 3: sprintf(string, "%ld", (long)(100. * dry)); break; + case 1: sprintf(string, "%d", (LvzInt32)(100.0f * wet)); break; + case 2: sprintf(string, "%d", (LvzInt32)(0.0726 * getSampleRate() * pow(10.0,-2.5 + (1.5 * fParam3)))); break; + case 3: sprintf(string, "%d", (LvzInt32)(100. * dry)); break; case 4: sprintf(string, "%.1f", 60.0f * fParam5 - 60.0f); break; - case 5: sprintf(string, "%ld", (long)(-301.03 / (getSampleRate() * log10(rls)))); break; + case 5: sprintf(string, "%d", (LvzInt32)(-301.03 / (getSampleRate() * log10(rls)))); break; case 0: switch(typ) { diff --git a/src/mdaSubSynth.h b/src/mdaSubSynth.h index b0d3a8c..d2b3956 100644 --- a/src/mdaSubSynth.h +++ b/src/mdaSubSynth.h @@ -11,6 +11,7 @@ public: virtual void setProgram(LvzInt32 program); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); diff --git a/src/mdaTalkBox.cpp b/src/mdaTalkBox.cpp index 2d24d7b..1649f7a 100644 --- a/src/mdaTalkBox.cpp +++ b/src/mdaTalkBox.cpp @@ -44,7 +44,7 @@ mdaTalkBox::mdaTalkBox(audioMasterCallback audioMaster): AudioEffectX(audioMaste N = 1; //trigger window recalc K = 0; - programs = new mdaTalkBoxProgram[numPrograms]; + programs = new mdaTalkBoxProgram[NPROGS]; if(programs) { ///differences from default program... @@ -64,16 +64,17 @@ bool mdaTalkBox::getEffectName(char* name) { strcpy(name, "TalkBox"); return void mdaTalkBox::resume() ///update internal parameters... { float fs = getSampleRate(); + float * param = programs[curProgram].param; if(fs < 8000.0f) fs = 8000.0f; if(fs > 96000.0f) fs = 96000.0f; swap = (param[2] > 0.5f)? 1 : 0; - long n = (long)(0.01633f * fs); + LvzInt32 n = (LvzInt32)(0.01633f * fs); if(n > BUF_MAX) n = BUF_MAX; - //O = (long)(0.0005f * fs); - O = (long)((0.0001f + 0.0004f * param[3]) * fs); + //O = (LvzInt32)(0.0005f * fs); + O = (LvzInt32)((0.0001f + 0.0004f * param[3]) * fs); if(n != N) //recalc hanning window { @@ -120,25 +121,29 @@ mdaTalkBox::~mdaTalkBox() ///destroy any buffers... void mdaTalkBox::setProgram(LvzInt32 program) { - int i=0; - - mdaTalkBoxProgram *p = &programs[program]; curProgram = program; - for(i=0; iparam[i]; resume(); } void mdaTalkBox::setParameter(LvzInt32 index, float value) { - programs[curProgram].param[index] = param[index] = value; //bug was here! + programs[curProgram].param[index] = value; //bug was here! resume(); } -float mdaTalkBox::getParameter(LvzInt32 index) { return param[index]; } +float mdaTalkBox::getParameter(LvzInt32 index) { return programs[curProgram].param[index]; } void mdaTalkBox::setProgramName(char *name) { strcpy(programs[curProgram].name, name); } void mdaTalkBox::getProgramName(char *name) { strcpy(name, programs[curProgram].name); } - +bool mdaTalkBox::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if ((unsigned int)index < NPROGS) + { + strcpy(name, programs[index].name); + return true; + } + return false; +} void mdaTalkBox::getParameterName(LvzInt32 index, char *label) { @@ -156,6 +161,7 @@ void mdaTalkBox::getParameterName(LvzInt32 index, char *label) void mdaTalkBox::getParameterDisplay(LvzInt32 index, char *text) { char string[16]; + float * param = programs[curProgram].param; switch(index) { @@ -193,7 +199,7 @@ void mdaTalkBox::process(float **inputs, float **outputs, LvzInt32 sampleFrames) } float *out1 = outputs[0]; float *out2 = outputs[1]; - long p0=pos, p1 = (pos + N/2) % N; + LvzInt32 p0=pos, p1 = (pos + N/2) % N; float e=emphasis, w, o, x, c, d, dr, fx=FX; float p, q, h0=0.3f, h1=0.77f; @@ -266,7 +272,7 @@ void mdaTalkBox::processReplacing(float **inputs, float **outputs, LvzInt32 samp } float *out1 = outputs[0]; float *out2 = outputs[1]; - long p0=pos, p1 = (pos + N/2) % N; + LvzInt32 p0=pos, p1 = (pos + N/2) % N; float e=emphasis, w, o, x, dr, fx=FX; float p, q, h0=0.3f, h1=0.77f; @@ -325,10 +331,10 @@ void mdaTalkBox::processReplacing(float **inputs, float **outputs, LvzInt32 samp } -void mdaTalkBox::lpc(float *buf, float *car, long n, long o) +void mdaTalkBox::lpc(float *buf, float *car, LvzInt32 n, LvzInt32 o) { float z[ORD_MAX], r[ORD_MAX], k[ORD_MAX], G, x; - long i, j, nn=n; + LvzInt32 i, j, nn=n; for(j=0; j<=o; j++, nn--) //buf[] is already emphasized and windowed { diff --git a/src/mdaTalkBox.h b/src/mdaTalkBox.h index ab3e345..593e2b7 100644 --- a/src/mdaTalkBox.h +++ b/src/mdaTalkBox.h @@ -32,6 +32,7 @@ public: virtual void setProgram(LvzInt32 program); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -46,10 +47,9 @@ public: virtual LvzInt32 getVendorVersion() { return 1000; } protected: - float param[NPARAMS]; mdaTalkBoxProgram *programs; - void lpc(float *buf, float *car, long n, long o); + void lpc(float *buf, float *car, LvzInt32 n, LvzInt32 o); void lpc_durbin(float *r, int p, float *k, float *g); ///global internal variables @@ -58,7 +58,7 @@ protected: float *buf0, *buf1; float emphasis; - long K, N, O, pos, swap; + LvzInt32 K, N, O, pos, swap; float wet, dry, FX; float d0, d1, d2, d3, d4; diff --git a/src/mdaTestTone.cpp b/src/mdaTestTone.cpp index 5c6650e..4972940 100644 --- a/src/mdaTestTone.cpp +++ b/src/mdaTestTone.cpp @@ -55,8 +55,18 @@ void mdaTestTone::getProgramName(char *name) strcpy(name, programName); } +bool mdaTestTone::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void float2strng(float value, char *string) { sprintf(string, "%.2f", value); } void mdaTestTone::setParameter(LvzInt32 index, float value) @@ -72,49 +82,49 @@ void mdaTestTone::setParameter(LvzInt32 index, float value) case 5: fParam6 = value; break; case 7: fParam7 = value; break; } - - - //just update display text... - int this_mode = int(8.9 * fParam0); - float f, df=0.0f; - if(fParam4>0.6) df = 1.25f*fParam4 - 0.75f; - if(fParam4<0.4) df = 1.25f*fParam4 - 0.50f; - switch(this_mode) - { - case 0: //MIDI note - f = (float)floor(128.f*fParam3); - //long2string((long)f, disp1); //Semi - midi2string(f, disp1); //Semitones - long2string((long)(100.f*df), disp2); //Cents - break; - - case 1: //no frequency display - case 2: - case 3: - case 4: strcpy(disp1, "--"); - strcpy(disp2, "--"); break; - - case 5: //sine - f = 13.f + (float)floor(30.f*fParam3); - iso2string(f, disp1); //iso band freq - f=(float)pow(10.0f, 0.1f*(f+df)); - float2strng(f, disp2); //Hz - break; - - case 6: //log sweep & step - case 7: sw = 13.f + (float)floor(30.f*fParam3); - swx = 13.f + (float)floor(30.f*fParam4); - iso2string(sw, disp1); //start freq - iso2string(swx, disp2); //end freq - break; - - case 8: //lin sweep - sw = 200.f * (float)floor(100.f*fParam3); - swx = 200.f * (float)floor(100.f*fParam4); - long2string((long)sw, disp1); //start freq - long2string((long)swx, disp2); //end freq - break; - } + + + //just update display text... + mode = int(8.9 * fParam0); + float f, df=0.0f; + if(fParam4>0.6) df = 1.25f*fParam4 - 0.75f; + if(fParam4<0.4) df = 1.25f*fParam4 - 0.50f; + switch(mode) + { + case 0: //MIDI note + f = (float)floor(128.f*fParam3); + //int2strng((LvzInt32)f, disp1); //Semi + midi2string(f, disp1); //Semitones + int2strng((LvzInt32)(100.f*df), disp2); //Cents + break; + + case 1: //no frequency display + case 2: + case 3: + case 4: strcpy(disp1, "--"); + strcpy(disp2, "--"); break; + + case 5: //sine + f = 13.f + (float)floor(30.f*fParam3); + iso2string(f, disp1); //iso band freq + f=(float)pow(10.0f, 0.1f*(f+df)); + float2strng(f, disp2); //Hz + break; + + case 6: //log sweep & step + case 7: sw = 13.f + (float)floor(30.f*fParam3); + swx = 13.f + (float)floor(30.f*fParam4); + iso2string(sw, disp1); //start freq + iso2string(swx, disp2); //end freq + break; + + case 8: //lin sweep + sw = 200.f * (float)floor(100.f*fParam3); + swx = 200.f * (float)floor(100.f*fParam4); + int2strng((LvzInt32)sw, disp1); //start freq + int2strng((LvzInt32)swx, disp2); //end freq + break; + } updateTx++; } @@ -134,7 +144,7 @@ void mdaTestTone::update() if(fParam2<0.3f) right=0.f; else right=left; if(fParam2>0.6f) left=0.f; len = 1.f + 0.5f*(float)int(62*fParam6); - swt=(long)(len*getSampleRate()); + swt=(LvzInt32)(len*getSampleRate()); if(fParam7>0.8) //output level trim { @@ -162,9 +172,9 @@ void mdaTestTone::update() { case 0: //MIDI note f = (float)floor(128.f*fParam3); - //long2string((long)f, disp1); //Semi + //int2strng((LvzInt32)f, disp1); //Semi midi2string(f, disp1); //Semitones - long2string((long)(100.f*df), disp2); //Cents + int2strng((LvzInt32)(100.f*df), disp2); //Cents dphi = 51.37006f*(float)pow(1.0594631f,f+df)/getSampleRate(); break; @@ -190,19 +200,19 @@ void mdaTestTone::update() if(sw>swx) { swd=swx; swx=sw; sw=swd; } //only sweep up if(mode==7) swx += 1.f; swd = (swx-sw) / (len*getSampleRate()); - swt= 2 * (long)getSampleRate(); + swt= 2 * (LvzInt32)getSampleRate(); break; case 8: //lin sweep sw = 200.f * (float)floor(100.f*fParam3); swx = 200.f * (float)floor(100.f*fParam4); - long2string((long)sw, disp1); //start freq - long2string((long)swx, disp2); //end freq + int2strng((LvzInt32)sw, disp1); //start freq + int2strng((LvzInt32)swx, disp2); //end freq if(sw>swx) { swd=swx; swx=sw; sw=swd; } //only sweep up sw = twopi*sw/getSampleRate(); swx = twopi*swx/getSampleRate(); swd = (swx-sw) / (len*getSampleRate()); - swt= 2 * (long)getSampleRate(); + swt= 2 * (LvzInt32)getSampleRate(); break; } thru = (float)pow(10.0f, (0.05f * (float)int(40.f*fParam5)) - 2.f); @@ -335,7 +345,7 @@ void mdaTestTone::getParameterDisplay(LvzInt32 index, char *text) case 7: strcpy(text, "LOG STEP"); break; case 8: strcpy(text, "LIN SWP."); break; } break; - case 1: long2string((long)(int(60.f * fParam1) - 60.0 - calx), text); break; + case 1: int2strng((LvzInt32)(int(60.f * fParam1) - 60.0 - calx), text); break; case 2: if(fParam2>0.3f) { if(fParam2>0.7f) strcpy(text, "RIGHT"); else strcpy(text, "CENTRE"); } @@ -343,8 +353,8 @@ void mdaTestTone::getParameterDisplay(LvzInt32 index, char *text) case 3: strcpy(text, disp1); break; case 4: strcpy(text, disp2); break; case 6: if(fParam5==0) strcpy(text, "OFF"); - else long2string((long)(40 * fParam5 - 40), text); break; - case 5: long2string(1000 + 500*int(62*fParam6), text); break; + else int2strng((LvzInt32)(40 * fParam5 - 40), text); break; + case 5: int2strng(1000 + 500*int(62*fParam6), text); break; case 7: float2strng(cal, text); break; } } @@ -379,7 +389,7 @@ void mdaTestTone::process(float **inputs, float **outputs, LvzInt32 sampleFrames float z0=zz0, z1=zz1, z2=zz2, z3=zz3, z4=zz4, z5=zz5; float ph=phi, dph=dphi, l=left, r=right, t=thru; float s=sw, sx=swx, ds=swd, fsc=fscale; - long st=swt; + LvzInt32 st=swt; int m=mode; --in1; @@ -398,7 +408,7 @@ void mdaTestTone::process(float **inputs, float **outputs, LvzInt32 sampleFrames case 1: if(st>0) { st--; x=0.f; } else //impulse { x=1.f; - st=(long)(len*getSampleRate()); + st=(LvzInt32)(len*getSampleRate()); } break; @@ -470,7 +480,7 @@ void mdaTestTone::processReplacing(float **inputs, float **outputs, LvzInt32 sam float z0=zz0, z1=zz1, z2=zz2, z3=zz3, z4=zz4, z5=zz5; float ph=phi, dph=dphi, l=left, r=right, t=thru; float s=sw, sx=swx, ds=swd, fsc=fscale; - long st=swt; + LvzInt32 st=swt; int m=mode; --in1; @@ -487,7 +497,7 @@ void mdaTestTone::processReplacing(float **inputs, float **outputs, LvzInt32 sam case 1: if(st>0) { st--; x=0.f; } else //impulse { x=1.f; - st=(long)(len*getSampleRate()); + st=(LvzInt32)(len*getSampleRate()); } break; diff --git a/src/mdaTestTone.h b/src/mdaTestTone.h index f613678..4bf2317 100644 --- a/src/mdaTestTone.h +++ b/src/mdaTestTone.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -38,7 +39,7 @@ protected: float thru, left, right, len; float zz0, zz1, zz2, zz3, zz4, zz5, phi, dphi; float sw, swd, swx, fscale, cal, calx; - long swt; + LvzInt32 swt; int mode; char programName[32], disp1[16], disp2[16]; diff --git a/src/mdaThruZero.cpp b/src/mdaThruZero.cpp index 23b8afb..7bcd67f 100644 --- a/src/mdaThruZero.cpp +++ b/src/mdaThruZero.cpp @@ -35,7 +35,7 @@ mdaThruZero::mdaThruZero(audioMasterCallback audioMaster): AudioEffectX(audioMas DECLARE_LVZ_DEPRECATED(canMono) (); canProcessReplacing(); - programs = new mdaThruZeroProgram[numPrograms]; ///////////////TODO: programs + programs = new mdaThruZeroProgram[NPROGS]; ///////////////TODO: programs setProgram(0); ///differences from default program... @@ -72,6 +72,7 @@ bool mdaThruZero::getEffectName(char* name) { strcpy(name, "ThruZero"); retu void mdaThruZero::resume() ///update internal parameters... { + float * param = programs[curProgram].param; rat = (float)(pow(10.0f, 3.f * param[0] - 2.f) * 2.f / getSampleRate()); dep = 2000.0f * param[1] * param[1]; dem = dep - dep * param[4]; @@ -101,12 +102,7 @@ mdaThruZero::~mdaThruZero() ///destroy any buffers... void mdaThruZero::setProgram(LvzInt32 program) { - int i=0; - - mdaThruZeroProgram *p = &programs[program]; curProgram = program; - setProgramName(p->name); - for(i=0; iparam[i]; resume(); } @@ -114,14 +110,23 @@ void mdaThruZero::setProgram(LvzInt32 program) void mdaThruZero::setParameter(LvzInt32 index, float value) { if(index==3) phi=0.0f; //reset cycle - param[index] = value; resume(); + programs[curProgram].param[index] = value; + resume(); } -float mdaThruZero::getParameter(LvzInt32 index) { return param[index]; } -void mdaThruZero::setProgramName(char *name) { strcpy(programName, name); } -void mdaThruZero::getProgramName(char *name) { strcpy(name, programName); } - +float mdaThruZero::getParameter(LvzInt32 index) { return programs[curProgram].param[index]; } +void mdaThruZero::setProgramName(char *name) { strcpy(programs[curProgram].name, name); } +void mdaThruZero::getProgramName(char *name) { strcpy(name, programs[curProgram].name); } +bool mdaThruZero::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if ((unsigned int)index < NPROGS) + { + strcpy(name, programs[index].name); + return true; + } + return false; +} void mdaThruZero::getParameterName(LvzInt32 index, char *label) { @@ -139,6 +144,7 @@ void mdaThruZero::getParameterName(LvzInt32 index, char *label) void mdaThruZero::getParameterDisplay(LvzInt32 index, char *text) { char string[16]; + float * param = programs[curProgram].param; switch(index) { @@ -200,7 +206,7 @@ void mdaThruZero::processReplacing(float **inputs, float **outputs, LvzInt32 sam float *out2 = outputs[1]; float a, b, f=fb, f1=fb1, f2=fb2, ph=phi; float ra=rat, de=dep, we=wet, dr=dry, ds=deps, dm=dem; - long tmp, tmpi, bp=bufpos; + LvzInt32 tmp, tmpi, bp=bufpos; float tmpf, dpt; --in1; diff --git a/src/mdaThruZero.h b/src/mdaThruZero.h index f4ca0ee..d2e20fd 100644 --- a/src/mdaThruZero.h +++ b/src/mdaThruZero.h @@ -15,8 +15,6 @@ class mdaThruZeroProgram { public: mdaThruZeroProgram(); - ~mdaThruZeroProgram() {} - private: friend class mdaThruZero; float param[NPARAMS]; @@ -35,6 +33,7 @@ public: virtual void setProgram(LvzInt32 program); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -49,15 +48,13 @@ public: virtual LvzInt32 getVendorVersion() { return 1000; } protected: - float param[NPARAMS]; - char programName[32]; mdaThruZeroProgram *programs; ///global internal variables float rat, dep, wet, dry, fb, dem; //rate, depth, wet & dry mix, feedback, mindepth float phi, fb1, fb2, deps; //lfo & feedback buffers, depth change smoothing float *buffer, *buffer2; //maybe use 2D buffer? - long size, bufpos; + LvzInt32 size, bufpos; }; #endif diff --git a/src/mdaTracker.cpp b/src/mdaTracker.cpp index 0a8d028..815597e 100644 --- a/src/mdaTracker.cpp +++ b/src/mdaTracker.cpp @@ -28,7 +28,7 @@ mdaTracker::mdaTracker(audioMasterCallback audioMaster) : AudioEffectX(audioMast strcpy(programName, "Pitch Tracker"); dphi = 100.f/getSampleRate(); //initial pitch - min = (long)(getSampleRate()/30.0); //lower limit + min = (LvzInt32)(getSampleRate()/30.0); //lower limit res1 = (float)cos(0.01); //p res2 = (float)sin(0.01); //q @@ -53,7 +53,7 @@ void mdaTracker::setParameter(LvzInt32 index, float value) fo = filterFreq(50.f); fi = (1.f - fo)*(1.f - fo); ddphi = fParam4 * fParam4; thr = (float)pow(10.0, 3.0*fParam7 - 3.8); - max = (long)(getSampleRate() / pow(10.0f, 1.6f + 2.2f * fParam6)); + max = (LvzInt32)(getSampleRate() / pow(10.0f, 1.6f + 2.2f * fParam6)); trans = (float)pow(1.0594631,int(72.f*fParam5 - 36.f)); wet = (float)pow(10.0, 2.0*fParam8 - 1.0); if(mode<4) @@ -102,6 +102,16 @@ void mdaTracker::getProgramName(char *name) strcpy(name, programName); } +bool mdaTracker::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + float mdaTracker::getParameter(LvzInt32 index) { float v=0; @@ -136,7 +146,7 @@ void mdaTracker::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void mdaTracker::getParameterDisplay(LvzInt32 index, char *text) { @@ -150,13 +160,13 @@ void mdaTracker::getParameterDisplay(LvzInt32 index, char *text) case 3: strcpy(text, "RING"); break; case 4: strcpy(text, "EQ"); break; } break; - case 1: long2string((long)(100 * fParam2), text); break; - case 2: long2string((long)(100 * fParam3), text); break; - case 3: long2string((long)(100 * fParam4), text); break; - case 4: long2string((long)(72*fParam5 - 36), text); break; - case 5: long2string((long)(getSampleRate()/max), text); break; - case 6: long2string((long)(60*fParam7 - 60), text); break; - case 7: long2string((long)(40*fParam8 - 20), text); break; + case 1: int2strng((LvzInt32)(100 * fParam2), text); break; + case 2: int2strng((LvzInt32)(100 * fParam3), text); break; + case 3: int2strng((LvzInt32)(100 * fParam4), text); break; + case 4: int2strng((LvzInt32)(72*fParam5 - 36), text); break; + case 5: int2strng((LvzInt32)(getSampleRate()/max), text); break; + case 6: int2strng((LvzInt32)(60*fParam7 - 60), text); break; + case 7: int2strng((LvzInt32)(40*fParam8 - 20), text); break; } } @@ -187,7 +197,7 @@ void mdaTracker::process(float **inputs, float **outputs, LvzInt32 sampleFrames) float o=fo, i=fi, b1=buf1, b2=buf2, twopi=6.2831853f; float we=wet, dr=dry, bo=bold, r1=res1, r2=res2, b3=buf3, b4=buf4; float sw=saw, dsw=dsaw, dy=dyn, e=env, re=rel; - long m=max, n=num, s=sig, mn=min, mo=mode; + LvzInt32 m=max, n=num, s=sig, mn=min, mo=mode; --in1; --in2; @@ -271,7 +281,7 @@ void mdaTracker::processReplacing(float **inputs, float **outputs, LvzInt32 samp float o=fo, i=fi, b1=buf1, b2=buf2, twopi=6.2831853f; float we=wet, dr=dry, bo=bold, r1=res1, r2=res2, b3=buf3, b4=buf4; float sw=saw, dsw=dsaw, dy=dyn, e=env, re=rel; - long m=max, n=num, s=sig, mn=min, mo=mode; + LvzInt32 m=max, n=num, s=sig, mn=min, mo=mode; --in1; --in2; diff --git a/src/mdaTracker.h b/src/mdaTracker.h index 46fa15c..01f54b6 100644 --- a/src/mdaTracker.h +++ b/src/mdaTracker.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -39,7 +40,7 @@ protected: float buf1, buf2, dn, bold, wet, dry; float dyn, env, rel, saw, dsaw; float res1, res2, buf3, buf4; - long max, min, num, sig, mode; + LvzInt32 max, min, num, sig, mode; char programName[32]; }; diff --git a/src/mdaTransient.cpp b/src/mdaTransient.cpp index d35c9f5..ba27302 100644 --- a/src/mdaTransient.cpp +++ b/src/mdaTransient.cpp @@ -45,6 +45,16 @@ void mdaTransient::getProgramName(char *name) strcpy(name, programName); } +bool mdaTransient::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if (index == 0) + { + strcpy(name, programName); + return true; + } + return false; +} + void mdaTransient::setParameter(LvzInt32 index, float value) { switch(index) @@ -126,18 +136,18 @@ void mdaTransient::getParameterName(LvzInt32 index, char *label) } #include -void long2string(long value, char *string) { sprintf(string, "%ld", value); } +void int2strng(LvzInt32 value, char *string) { sprintf(string, "%d", value); } void mdaTransient::getParameterDisplay(LvzInt32 index, char *text) { switch(index) { - case 0: long2string((long)(200*fParam1 - 100),text); break; - case 1: long2string((long)(200*fParam2 - 100),text); break; - case 2: long2string((long)(40.0*fParam3 - 20.0),text); break; - case 3: long2string((long)(20*fParam4 - 10),text); break; - case 4: long2string((long)(100*fParam5),text); break; - case 5: long2string((long)(100*fParam6),text); break; + case 0: int2strng((LvzInt32)(200*fParam1 - 100),text); break; + case 1: int2strng((LvzInt32)(200*fParam2 - 100),text); break; + case 2: int2strng((LvzInt32)(40.0*fParam3 - 20.0),text); break; + case 3: int2strng((LvzInt32)(20*fParam4 - 10),text); break; + case 4: int2strng((LvzInt32)(100*fParam5),text); break; + case 5: int2strng((LvzInt32)(100*fParam6),text); break; } } diff --git a/src/mdaTransient.h b/src/mdaTransient.h index 0a1938a..d13a5ee 100644 --- a/src/mdaTransient.h +++ b/src/mdaTransient.h @@ -13,6 +13,7 @@ public: virtual void processReplacing(float **inputs, float **outputs, LvzInt32 sampleFrames); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); diff --git a/src/mdaVocInput.cpp b/src/mdaVocInput.cpp index ed9cf5c..f4372ea 100644 --- a/src/mdaVocInput.cpp +++ b/src/mdaVocInput.cpp @@ -48,10 +48,11 @@ bool mdaVocInput::getEffectName(char* name) { strcpy(name, "VocInput"); retu void mdaVocInput::resume() ///update internal parameters... { float fs, ifs; + float * param = programs[curProgram].param; fs = getSampleRate(); ifs = 1.0f / fs; - track = (long)(2.99f * param[0]); + track = (LvzInt32)(2.99f * param[0]); pmult = (float)pow(1.0594631f, floor(48.0f * param[1] - 24.0f)); if(track==0) pstep = 110.0f * pmult * ifs; @@ -79,21 +80,28 @@ mdaVocInput::~mdaVocInput() ///destroy any buffers... void mdaVocInput::setProgram(LvzInt32 program) { - int i=0; - - mdaVocInputProgram *p = &programs[program]; curProgram = program; - setProgramName(p->name); - for(i=0; iparam[i]; resume(); } -void mdaVocInput::setParameter(LvzInt32 index, float value) { param[index] = value; resume(); } -float mdaVocInput::getParameter(LvzInt32 index) { return param[index]; } -void mdaVocInput::setProgramName(char *name) { strcpy(programName, name); } -void mdaVocInput::getProgramName(char *name) { strcpy(name, programName); } - +void mdaVocInput::setParameter(LvzInt32 index, float value) +{ + programs[curProgram].param[index] = value; + resume(); +} +float mdaVocInput::getParameter(LvzInt32 index) { return programs[curProgram].param[index]; } +void mdaVocInput::setProgramName(char *name) { strcpy(programs[curProgram].name, name); } +void mdaVocInput::getProgramName(char *name) { strcpy(name, programs[curProgram].name); } +bool mdaVocInput::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if ((unsigned int)index < NPROGS) + { + strcpy(name, programs[index].name); + return true; + } + return false; +} void mdaVocInput::getParameterName(LvzInt32 index, char *label) { @@ -111,6 +119,7 @@ void mdaVocInput::getParameterName(LvzInt32 index, char *label) void mdaVocInput::getParameterDisplay(LvzInt32 index, char *text) { char string[16]; + float * param = programs[curProgram].param; switch(index) { @@ -118,10 +127,10 @@ void mdaVocInput::getParameterDisplay(LvzInt32 index, char *text) case 1: strcpy(string, "FREE"); break; case 2: strcpy(string, "QUANT"); } break; - case 1: if(track) sprintf(string, "%ld", (long)(48.0f * param[1] - 24.0f)); - else midi2string((long)(48.0f * param[1] + 21.0f), string); break; + case 1: if(track) sprintf(string, "%d", (LvzInt32)(48.0f * param[1] - 24.0f)); + else midi2string((LvzInt32)(48.0f * param[1] + 21.0f), string); break; - case 4: midi2string((long)(48.0f * param[4] + 45.0f), string); break; + case 4: midi2string((LvzInt32)(48.0f * param[4] + 45.0f), string); break; default: sprintf(string, "%.0f", 100.0f * param[index]); } @@ -142,10 +151,10 @@ void mdaVocInput::getParameterLabel(LvzInt32 index, char *label) } -void mdaVocInput::midi2string(long n, char *text) //show name of MIDI note number (60=C3) +void mdaVocInput::midi2string(LvzInt32 n, char *text) //show name of MIDI note number (60=C3) { char t[8]; - long o, s, p=0; + LvzInt32 o, s, p=0; t[p++] = ' '; t[p++] = ' '; @@ -189,7 +198,7 @@ void mdaVocInput::process(float **inputs, float **outputs, LvzInt32 sampleFrames float l0=lbuf0, l1=lbuf1, l2=lbuf2, l3=lbuf3; float le=lenv, he=henv, et=lfreq*0.1f, lf=lfreq, v=vuv, mn=minp, mx=maxp; float rootm=39.863137f; - long tr=track; + LvzInt32 tr=track; --in1; --in2; @@ -264,7 +273,7 @@ void mdaVocInput::processReplacing(float **inputs, float **outputs, LvzInt32 sam float l0=lbuf0, l1=lbuf1, l2=lbuf2, l3=lbuf3; float le=lenv, he=henv, et=lfreq*0.1f, lf=lfreq, v=vuv, mn=minp, mx=maxp; float rootm=39.863137f; - long tr=track; + LvzInt32 tr=track; --in1; --in2; diff --git a/src/mdaVocInput.h b/src/mdaVocInput.h index 5a8bdee..f8956e5 100644 --- a/src/mdaVocInput.h +++ b/src/mdaVocInput.h @@ -14,8 +14,6 @@ class mdaVocInputProgram { public: mdaVocInputProgram(); - ~mdaVocInputProgram() {} - private: friend class mdaVocInput; float param[NPARAMS]; @@ -34,12 +32,13 @@ public: virtual void setProgram(LvzInt32 program); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); virtual void getParameterDisplay(LvzInt32 index, char *text); virtual void getParameterName(LvzInt32 index, char *text); - virtual void midi2string(long n, char *text); + virtual void midi2string(LvzInt32 n, char *text); virtual void suspend(); virtual void resume(); @@ -49,12 +48,10 @@ public: virtual LvzInt32 getVendorVersion() { return 1000; } protected: - float param[NPARAMS]; - char programName[32]; mdaVocInputProgram *programs; ///global internal variables - long track; //track input pitch + LvzInt32 track; //track input pitch float pstep; //output sawtooth inc per sample float pmult; //tuning multiplier float sawbuf; diff --git a/src/mdaVocoder.cpp b/src/mdaVocoder.cpp index bf426b2..af9e8b0 100644 --- a/src/mdaVocoder.cpp +++ b/src/mdaVocoder.cpp @@ -38,7 +38,7 @@ mdaVocoder::mdaVocoder(audioMasterCallback audioMaster): AudioEffectX(audioMaste //canMono(); canProcessReplacing(); - programs = new mdaVocoderProgram[numPrograms]; + programs = new mdaVocoderProgram[NPROGS]; setProgram(0); ///differences from default program... @@ -65,10 +65,11 @@ bool mdaVocoder::getEffectName(char* name) { strcpy(name, "Vocoder"); return void mdaVocoder::resume() ///update internal parameters... { + float * param = programs[curProgram].param; double tpofs = 6.2831853/getSampleRate(); double rr, th, re; float sh; - long i; + LvzInt32 i; swap = 1; if(param[0]>0.5f) swap = 0; gain = (float)pow(10.0f, 2.0f * param[1] - 3.0f * param[5] - 2.0f); @@ -146,7 +147,7 @@ void mdaVocoder::resume() ///update internal parameters... void mdaVocoder::suspend() ///clear any buffers... { - long i, j; + LvzInt32 i, j; for(i=0; iname); - for(i=0; iparam[i]; resume(); } -void mdaVocoder::setParameter(LvzInt32 index, float value) { param[index] = value; resume(); } -float mdaVocoder::getParameter(LvzInt32 index) { return param[index]; } -void mdaVocoder::setProgramName(char *name) { strcpy(programName, name); } -void mdaVocoder::getProgramName(char *name) { strcpy(name, programName); } - +void mdaVocoder::setParameter(LvzInt32 index, float value) +{ + programs[curProgram].param[index] = value; + resume(); +} +float mdaVocoder::getParameter(LvzInt32 index) { return programs[curProgram].param[index]; } +void mdaVocoder::setProgramName(char *name) { strcpy(programs[curProgram].name, name); } +void mdaVocoder::getProgramName(char *name) { strcpy(name, programs[curProgram].name); } +bool mdaVocoder::getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name) +{ + if ((unsigned int)index < NPROGS) + { + strcpy(name, programs[index].name); + return true; + } + return false; +} void mdaVocoder::getParameterName(LvzInt32 index, char *label) { @@ -197,6 +205,7 @@ void mdaVocoder::getParameterName(LvzInt32 index, char *label) void mdaVocoder::getParameterDisplay(LvzInt32 index, char *text) { char string[16]; + float * param = programs[curProgram].param; switch(index) { @@ -235,7 +244,7 @@ void mdaVocoder::process(float **inputs, float **outputs, LvzInt32 sampleFrames) float *out1 = outputs[0]; float *out2 = outputs[1]; float a, b, c, d, o=0.0f, aa, bb, oo=kout, g=gain, ht=thru, hh=high, tmp; - long i, k=kval, sw=swap, nb=nbnd; + LvzInt32 i, k=kval, sw=swap, nb=nbnd; --in1; --in2; @@ -313,7 +322,7 @@ void mdaVocoder::processReplacing(float **inputs, float **outputs, LvzInt32 samp float *out1 = outputs[0]; float *out2 = outputs[1]; float a, b, o=0.0f, aa, bb, oo=kout, g=gain, ht=thru, hh=high, tmp; - long i, k=kval, sw=swap, nb=nbnd; + LvzInt32 i, k=kval, sw=swap, nb=nbnd; --in1; --in2; diff --git a/src/mdaVocoder.h b/src/mdaVocoder.h index 5aa36fd..71e29cc 100644 --- a/src/mdaVocoder.h +++ b/src/mdaVocoder.h @@ -15,8 +15,6 @@ class mdaVocoderProgram { public: mdaVocoderProgram(); - ~mdaVocoderProgram() {} - private: friend class mdaVocoder; float param[NPARAMS]; @@ -35,6 +33,7 @@ public: virtual void setProgram(LvzInt32 program); virtual void setProgramName(char *name); virtual void getProgramName(char *name); + virtual bool getProgramNameIndexed (LvzInt32 category, LvzInt32 index, char* name); virtual void setParameter(LvzInt32 index, float value); virtual float getParameter(LvzInt32 index); virtual void getParameterLabel(LvzInt32 index, char *label); @@ -49,17 +48,15 @@ public: virtual LvzInt32 getVendorVersion() { return 1000; } protected: - float param[NPARAMS]; - char programName[32]; mdaVocoderProgram *programs; ///global internal variables - long swap; //input channel swap + LvzInt32 swap; //input channel swap float gain; //output level float thru, high; //hf thru float kout; //downsampled output - long kval; //downsample counter - long nbnd; //number of bands + LvzInt32 kval; //downsample counter + LvzInt32 nbnd; //number of bands //filter coeffs and buffers - seems it's faster to leave this global than make local copy float f[NBANDS][13]; //[0-8][0 1 2 | 0 1 2 3 | 0 1 2 3 | val rate] -- cgit v1.2.1