diff options
| author | vovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-06-23 16:48:01 +0000 |
|---|---|---|
| committer | vovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-06-23 16:48:01 +0000 |
| commit | 2d622fd9bcb8da9dd3f3206e296cd6a701fc9d12 (patch) | |
| tree | f92135e6cb831e46336dfd4ade47e03ef3a19ac5 /lib/equ/iir.c | |
| parent | 4b6a6720805c585c89f44fd276b3ace8670514d9 (diff) | |
| download | qmmp-2d622fd9bcb8da9dd3f3206e296cd6a701fc9d12.tar.gz qmmp-2d622fd9bcb8da9dd3f3206e296cd6a701fc9d12.tar.bz2 qmmp-2d622fd9bcb8da9dd3f3206e296cd6a701fc9d12.zip | |
moved into qmmp dir
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@12 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'lib/equ/iir.c')
| -rw-r--r-- | lib/equ/iir.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/equ/iir.c b/lib/equ/iir.c new file mode 100644 index 000000000..9d826b86c --- /dev/null +++ b/lib/equ/iir.c @@ -0,0 +1,85 @@ +/* + * PCM time-domain equalizer + * + * Copyright (C) 2002-2005 Felipe Rivera <liebremx at users sourceforge net> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * $Id: iir.c,v 1.15 2005/10/17 01:57:59 liebremx Exp $ + */ + +#include <math.h> +#include "iir.h" + +/* Coefficients */ +sIIRCoefficients *iir_cf; + +/* Volume gain + * values should be between 0.0 and 1.0 + * Use the preamp from XMMS for now + * */ +float preamp[EQ_CHANNELS]; + +#ifdef BENCHMARK +#include "benchmark.h" +double timex = 0.0; +int count = 0; +unsigned int blength = 0; +#endif + +/* + * Global vars + */ +int rate; +int band_count; + +void set_preamp(int chn, float val) +{ + preamp[chn] = val; +} + +/* Init the filters */ +void init_iir() +{ + calc_coeffs(); +#if 0 + band_count = cfg.band_num; +#endif + + band_count = 10; + + rate = 44100; + + iir_cf = get_coeffs(&band_count, rate); + clean_history(); +} + +#ifdef ARCH_X86 +/* Round function provided by Frank Klemm which saves around 100K + * CPU cycles in my PIII for each call to the IIR function with 4K samples + */ +__inline__ int round_trick(float floatvalue_to_round) +{ + float floattmp ; + int rounded_value ; + + floattmp = (int) 0x00FD8000L + (floatvalue_to_round); + rounded_value = *(int*)(&floattmp) - (int)0x4B7D8000L; + + if ( rounded_value != (short) rounded_value ) + rounded_value = ( rounded_value >> 31 ) ^ 0x7FFF; + return rounded_value; +} +#endif |
