diff src/audacious/equalizer_flow.c @ 4314:e548627b2004

EQ pregain works. nobody uses it though
author Eugene Zagidullin <e.asphyx@gmail.com>
date Mon, 03 Mar 2008 22:13:27 +0300
parents cfaecedace4e
children
line wrap: on
line diff
--- a/src/audacious/equalizer_flow.c	Sun Mar 02 22:04:03 2008 +0300
+++ b/src/audacious/equalizer_flow.c	Mon Mar 03 22:13:27 2008 +0300
@@ -20,6 +20,7 @@
 /*#define AUD_DEBUG*/
 
 #include <glib.h>
+#include <math.h>
 #include "main.h"
 #include "plugin.h"
 #include "flow.h"
@@ -81,14 +82,27 @@
 {
     int i;
     af_control_ext_t ctl;
+    gfloat b[10];
+    gfloat adj = 0.0;
     AUDDBG("\n");
     
     if(eq == NULL) {
         eq = g_malloc(sizeof(af_instance_t));
         equalizer_open(eq);
     }
-    
-    ctl.arg = bands;
+
+    for(i = 0; i < 10; i++)
+        b[i] = bands[i] + pre;
+
+    for(i = 0; i < 10; i++)
+        if(fabsf(b[i]) > fabsf(adj)) adj = b[i];
+
+    if(fabsf(adj) > EQUALIZER_MAX_GAIN) {
+        adj = adj > 0.0 ? EQUALIZER_MAX_GAIN - adj : -EQUALIZER_MAX_GAIN - adj;
+        for(i = 0; i < 10; i++) b[i] += adj;
+    }
+
+    ctl.arg = b;
     for(i = 0; i < AF_NCH; i++) {
         ctl.ch = i;
         eq->control(eq, AF_CONTROL_EQUALIZER_GAIN | AF_CONTROL_SET, &ctl);