diff options
Diffstat (limited to 'src/mdaDither.cpp')
-rw-r--r-- | src/mdaDither.cpp | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/src/mdaDither.cpp b/src/mdaDither.cpp index 23f9bdb..94c3a47 100644 --- a/src/mdaDither.cpp +++ b/src/mdaDither.cpp @@ -21,13 +21,13 @@ mdaDither::mdaDither(audioMasterCallback audioMaster) : AudioEffectX(audioMaster sh1 = sh2 = sh3 = sh4 = 0.0f; rnd1 = rnd3 = 0; - setNumInputs(2); - setNumOutputs(2); + setNumInputs(2); + setNumOutputs(2); setUniqueID("mdaDither"); // identify here - DECLARE_LVZ_DEPRECATED(canMono) (); - canProcessReplacing(); + DECLARE_LVZ_DEPRECATED(canMono) (); + canProcessReplacing(); strcpy(programName, "Dither & Noise Shaping"); - + setParameter(0, 0.5f); } @@ -47,7 +47,7 @@ void mdaDither::setParameter(LvzInt32 index, float value) } //calcs here gain = 1.0f; - bits = 8.0f + 2.0f * (float)floor(8.9f * fParam0); + bits = 8.0f + 2.0f * (float)floor(8.9f * fParam0); if(fParam4>0.1f) //zoom to 6 bit & fade out audio { @@ -55,16 +55,16 @@ void mdaDither::setParameter(LvzInt32 index, float value) gain = (1.0f - fParam4); gain*=gain; } else wlen = (float)pow(2.0f, bits - 1.0f); //word length in quanta - - //Using WaveLab 2.01 (unity gain) as a reference: + + //Using WaveLab 2.01 (unity gain) as a reference: // 16-bit output is (int)floor(floating_point_value*32768.0f) - + offs = (4.0f * fParam3 - 1.5f) / wlen; //DC offset (plus 0.5 to round dither not truncate) dith = 2.0f * fParam2 / (wlen * (float)32767); shap=0.0f; switch((long)(fParam1*3.9)) //dither mode - { + { case 0: dith = 0.0f; break; //off case 3: shap = 0.5f; break; //noise shaping default: break; //tri, hp-tri @@ -134,7 +134,7 @@ void mdaDither::getParameterDisplay(LvzInt32 index, char *text) } break; case 2: float2strng(4.0f * fParam2, text); break; case 3: float2strng(4.0f * fParam3 - 2.0f, text); break; - case 4: if(fParam4>0.1f) + case 4: if(fParam4>0.1f) if(gain<0.0001f) strcpy(text, "-80"); else long2string((long)(20.0 * log10(gain)), text); else strcpy(text, "OFF"); break; @@ -171,14 +171,14 @@ void mdaDither::process(float **inputs, float **outputs, LvzInt32 sampleFrames) long m=1; //dither mode if((long)(fParam1 * 3.9f)==1) m=0; //what is the fastest if(?) - --in1; - --in2; + --in1; + --in2; --out1; --out2; - + while(--sampleFrames >= 0) { - a = *++in1; + a = *++in1; b = *++in2; c = out1[1]; d = out2[1]; @@ -186,12 +186,12 @@ void mdaDither::process(float **inputs, float **outputs, LvzInt32 sampleFrames) r2=r1; r4=r3; if(m==0) { r4=rand() & 0x7FFF; r2=(r4 & 0x7F)<<8; } r1=rand() & 0x7FFF; r3=(r1 & 0x7F)<<8; - + 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); - s2 = s1; + s2 = s1; s1 = a - aa; b = g * b + sl * (s3 + s3 - s4); @@ -204,7 +204,7 @@ void mdaDither::process(float **inputs, float **outputs, LvzInt32 sampleFrames) *++out1 = c + aa; *++out2 = d + bb; } - + sh1=s1; sh2=s2; sh3=s3; sh4=s4; rnd1=r1; rnd3=r3; } @@ -224,8 +224,8 @@ void mdaDither::processReplacing(float **inputs, float **outputs, LvzInt32 sampl long m=1; //dither mode if((long)(fParam1 * 3.9f)==1) m=0; //what is the fastest if(?) - --in1; - --in2; + --in1; + --in2; --out1; --out2; @@ -237,12 +237,12 @@ void mdaDither::processReplacing(float **inputs, float **outputs, LvzInt32 sampl r2=r1; r4=r3; //HP-TRI dither (also used when noise shaping) if(m==0) { r4=rand() & 0x7FFF; r2=(r4 & 0x7F)<<8; } //TRI dither r1=rand() & 0x7FFF; r3=(r1 & 0x7F)<<8; //Assumes RAND_MAX=32767? - + a = g * a + sl * (s1 + s1 - s2); //target level + error feedback - aa = a + o + dl * (float)(r1 - r2); // + offset + dither + 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 - s2 = s1; + aa = wi * (float)(long)(w * aa); //truncate + s2 = s1; s1 = a - aa; //error feedback: 2nd order noise shaping b = g * b + sl * (s3 + s3 - s4); @@ -255,7 +255,7 @@ void mdaDither::processReplacing(float **inputs, float **outputs, LvzInt32 sampl *++out1 = aa; *++out2 = bb; } - + sh1=s1; sh2=s2; sh3=s3; sh4=s4; //doesn't actually matter if these are rnd1=r1; rnd3=r3; //saved or not as effect is so small ! } |