[SCM] calf/master: + Reverb: Added missing "denormal killer" to lowpass filters + Reverb: Moved tap lengths and feedback coeffs into member variables
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:36:54 UTC 2013
The following commit has been merged in the master branch:
commit b3697c9c92f698b4624ad7033d3e21a2d1dda9db
Author: kfoltman <kfoltman at 78b06b96-2940-0410-b7fc-879d825d01d8>
Date: Sat Jan 5 17:20:46 2008 +0000
+ Reverb: Added missing "denormal killer" to lowpass filters
+ Reverb: Moved tap lengths and feedback coeffs into member variables
git-svn-id: https://calf.svn.sourceforge.net/svnroot/calf/trunk@76 78b06b96-2940-0410-b7fc-879d825d01d8
diff --git a/src/calf/audio_fx.h b/src/calf/audio_fx.h
index 3f60321..0b5ab3b 100644
--- a/src/calf/audio_fx.h
+++ b/src/calf/audio_fx.h
@@ -254,6 +254,9 @@ class reverb: public audio_effect
onepole<T> lp_left, lp_right;
T old_left, old_right;
float time, fb, cutoff;
+ int tl[6], tr[6];
+ float ldec[6], rdec[6];
+
int sr;
public:
reverb()
@@ -269,6 +272,21 @@ public:
set_cutoff(cutoff);
phase = 0.0;
dphase = 0.5*128/sr;
+
+ tl[0] = 697 << 16, tr[0] = 783 << 16;
+ tl[1] = 957 << 16, tr[1] = 929 << 16;
+ tl[2] = 649 << 16, tr[2] = 531 << 16;
+ tl[3] = 1249 << 16, tr[3] = 1377 << 16;
+ tl[4] = 1573 << 16, tr[4] = 1671 << 16;
+ tl[5] = 1877 << 16, tr[5] = 1781 << 16;
+
+ float fDec=1700.f;
+ ldec[0]=exp(-697.f/fDec), rdec[0]=exp(-783.f/fDec);
+ ldec[1]=exp(-975.f/fDec), rdec[1]=exp(-929.f/fDec);
+ ldec[2]=exp(-649.f/fDec), rdec[2]=exp(-531.f/fDec);
+ ldec[3]=exp(-1249.f/fDec), rdec[3]=exp(-1377.f/fDec);
+ ldec[4]=exp(-1573.f/fDec), rdec[4]=exp(-1671.f/fDec);
+ ldec[5]=exp(-1877.f/fDec), rdec[5]=exp(-1781.f/fDec);
}
float get_time() {
return time;
@@ -307,20 +325,6 @@ public:
}
void process(T &left, T &right)
{
- const int tl1 = 697 << 16, tr1 = 783 << 16;
- const int tl2 = 957 << 16, tr2 = 929 << 16;
- const int tl3 = 649 << 16, tr3 = 531 << 16;
- const int tl4 = 1249 << 16, tr4 = 1377 << 16;
- const int tl5 = 1573 << 16, tr5 = 1671 << 16;
- const int tl6 = 1877 << 16, tr6 = 1781 << 16;
- static const float fDec=1700.f;
- static const float l1dec=exp(-697.f/fDec), r1dec=exp(-783.f/fDec);
- static const float l2dec=exp(-975.f/fDec), r2dec=exp(-929.f/fDec);
- static const float l3dec=exp(-649.f/fDec), r3dec=exp(-531.f/fDec);
- static const float l4dec=exp(-1249.f/fDec), r4dec=exp(-1377.f/fDec);
- static const float l5dec=exp(-1573.f/fDec), r5dec=exp(-1671.f/fDec);
- static const float l6dec=exp(-1877.f/fDec), r6dec=exp(-1781.f/fDec);
-
unsigned int ipart = phase.ipart();
// the interpolated LFO might be an overkill here
@@ -333,29 +337,34 @@ public:
phase += dphase;
left += old_right;
- left = apL1.process_allpass_comb_lerp16(left, tl1 - 45*lfo, l1dec);
- left = apL2.process_allpass_comb_lerp16(left, tl2 + 47*lfo, l2dec);
+ left = apL1.process_allpass_comb_lerp16(left, tl[0] - 45*lfo, ldec[0]);
+ left = apL2.process_allpass_comb_lerp16(left, tl[1] + 47*lfo, ldec[1]);
float out_left = left;
- left = apL3.process_allpass_comb_lerp16(left, tl3 + 54*lfo, l3dec);
- left = apL4.process_allpass_comb_lerp16(left, tl4 - 69*lfo, l4dec);
- left = apL5.process_allpass_comb_lerp16(left, tl5 - 69*lfo, l5dec);
- left = apL6.process_allpass_comb_lerp16(left, tl6 - 46*lfo, l6dec);
+ left = apL3.process_allpass_comb_lerp16(left, tl[2] + 54*lfo, ldec[2]);
+ left = apL4.process_allpass_comb_lerp16(left, tl[3] - 69*lfo, ldec[3]);
+ left = apL5.process_allpass_comb_lerp16(left, tl[4] - 69*lfo, ldec[4]);
+ left = apL6.process_allpass_comb_lerp16(left, tl[5] - 46*lfo, ldec[5]);
old_left = lp_left.process(left * fb);
sanitize(old_left);
right += old_left;
- right = apR1.process_allpass_comb_lerp16(right, tr1 - 45*lfo, r1dec);
- right = apR2.process_allpass_comb_lerp16(right, tr2 + 47*lfo, r2dec);
+ right = apR1.process_allpass_comb_lerp16(right, tr[0] - 45*lfo, rdec[0]);
+ right = apR2.process_allpass_comb_lerp16(right, tr[1] + 47*lfo, rdec[1]);
float out_right = right;
- right = apR3.process_allpass_comb_lerp16(right, tr3 + 54*lfo, r3dec);
- right = apR4.process_allpass_comb_lerp16(right, tr4 - 69*lfo, r4dec);
- right = apR5.process_allpass_comb_lerp16(right, tr5 - 69*lfo, r5dec);
- right = apR6.process_allpass_comb_lerp16(right, tr6 - 46*lfo, r6dec);
+ right = apR3.process_allpass_comb_lerp16(right, tr[2] + 54*lfo, rdec[2]);
+ right = apR4.process_allpass_comb_lerp16(right, tr[3] - 69*lfo, rdec[3]);
+ right = apR5.process_allpass_comb_lerp16(right, tr[4] - 69*lfo, rdec[4]);
+ right = apR6.process_allpass_comb_lerp16(right, tr[5] - 46*lfo, rdec[5]);
old_right = lp_right.process(right * fb);
sanitize(old_right);
left = out_left, right = out_right;
}
+ void extra_sanitize()
+ {
+ lp_left.sanitize();
+ lp_right.sanitize();
+ }
};
#if 0
diff --git a/src/calf/modules.h b/src/calf/modules.h
index 4eb8a1f..041b93b 100644
--- a/src/calf/modules.h
+++ b/src/calf/modules.h
@@ -151,6 +151,7 @@ public:
outs[0][i] = l + wet*rl;
outs[1][i] = r + wet*rr;
}
+ reverb.extra_sanitize();
return outputs_mask;
}
};
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list