changeset 6839:a94cde7ef947

fix (?) equalizer distortion problem
author pontscho
date Tue, 30 Jul 2002 11:48:18 +0000
parents a3867d6e2c11
children ed02bae611d5
files libao2/pl_eq.c
diffstat 1 files changed, 16 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libao2/pl_eq.c	Tue Jul 30 11:46:29 2002 +0000
+++ b/libao2/pl_eq.c	Tue Jul 30 11:48:18 2002 +0000
@@ -146,10 +146,12 @@
   // Reset buffers
   reset();
 
+#if 0
   // Reset gain factors
   for(c=0;c<pl_eq.channels;c++)
     for(k=0;k<pl_eq.K;k++)
       pl_eq.g[c][k]=0;
+#endif
 
   // Tell ao_plugin how much this plugin adds to the overall time delay
   ao_plugin_data.delay_fix-=2/((float)pl_eq.channels*(float)ao_plugin_data.rate);
@@ -185,6 +187,7 @@
       for(;k<pl_eq.K;k++){
 	// Pointer to circular buffer wq
 	register int16_t* wq = pl_eq.wq[ci][k];
+#if 0
 	// Calculate output from AR part of current filter
 	register int32_t xt = (x*pl_eq.b[k][0]) >> 4;
 	register int32_t w = xt + wq[0]*pl_eq.a[k][0] + wq[1]*pl_eq.a[k][1];
@@ -196,6 +199,19 @@
 
       // Calculate output 
       *out=(int16_t)(yt+x);
+#else
+	// Calculate output from AR part of current filter
+	register int32_t xt = (x*pl_eq.b[k][0]) / 48;
+	register int32_t w = xt + wq[0]*pl_eq.a[k][0] + wq[1]*pl_eq.a[k][1];
+	// Calculate output form MA part of current filter
+	yt+=(((w + wq[1]*pl_eq.b[k][1]) >> 10)*g[k]) >> 12;
+	// Update circular buffer
+	wq[1] = wq[0]; wq[0] = w / 24576;
+      }	
+
+      // Calculate output 
+      *out=(int16_t)(yt * 0.25 + x * 0.5);
+#endif
       out+=nch;
     }
   }