X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=filter.h;h=a4a3a1349e035b97c592b7d6b5b2e265c0908772;hb=45aa08dd2f81037860fdd3c5d1115736f7acf1a8;hp=5e455d2fff840704a7ab3ae44cca24105f89a8d7;hpb=12f9082b06c037b76dc3a653643bdaeaea89f2d2;p=nageru diff --git a/filter.h b/filter.h index 5e455d2..a4a3a13 100644 --- a/filter.h +++ b/filter.h @@ -32,6 +32,11 @@ enum FilterType FILTER_BPF, FILTER_NOTCH, FILTER_APF, + + // EQ filters. + FILTER_PEAKING_EQ, + FILTER_LOW_SHELF, + FILTER_HIGH_SHELF, }; #define FILTER_MAX_ORDER 4 @@ -69,6 +74,12 @@ public: resonance = new_resonance; } + // For EQ filters only. + void set_dbgain_normalized(float db_gain_div_40) + { + A = pow(10.0f, db_gain_div_40); + } + #ifdef __SSE__ // We don't need the stride argument for SSE, as StereoFilter // has its own SSE implementations. @@ -81,6 +92,7 @@ public: private: float omega; //which is 2*Pi*frequency /SAMPLE_RATE float resonance; + float A; // which is 10^(db_gain / 40) public: unsigned filter_order; @@ -104,7 +116,7 @@ class StereoFilter public: void init(FilterType type, int new_order); - void render(float *inout_left_ptr, unsigned n_samples, float cutoff, float resonance); + void render(float *inout_left_ptr, unsigned n_samples, float cutoff, float resonance, float dbgain_normalized = 0.0f); #ifndef NDEBUG #ifdef __SSE__ void debug() { parm_filter.debug(); }