diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Winamp/eq10dsp.h | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Winamp/eq10dsp.h')
-rw-r--r-- | Src/Winamp/eq10dsp.h | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/Src/Winamp/eq10dsp.h b/Src/Winamp/eq10dsp.h new file mode 100644 index 00000000..5d752a82 --- /dev/null +++ b/Src/Winamp/eq10dsp.h @@ -0,0 +1,175 @@ +/***************************************** + + EQ10 library version 1.0 + Copyright (C)2002 4Front Technologies + Written by George Yohng + + http://www.opensound.com + + Proprietary software. + + *****************************************/ + + +#ifndef EQ10DSP_H_INCLUDED +#define EQ10DSP_H_INCLUDED +#ifdef __cplusplus +extern "C" { +#endif + +/* used for volume detectors. for instance, if you want to plot + frequency response, you can use "detect" variable of needed + subband to query level of that frequency band. + + release time - is the time in seconds in which detector falls back + to zero, if no peaks detected */ + + +// #define EQ10_DETECTOR_CODE /* uncomment this to */ +// #define EQ10_DETECTOR_RELEASE 1.0f /* enable band detector */ + + +/* Dynamic limiter, which prevents EQ from distortion. In no case you + can overflow EQ and cause it to clip */ + +#define EQ10_TRIM_CODE 0.930 /* trim at -0.6dB */ +#define EQ10_TRIM_RELEASE 0.700 /* trim release, in seconds */ + + +#define EQ10_NOFBANDS 10 /* want more bands? not a problem */ + +#define EQ10_Q 1.41 /* global `Q' factor */ + +/* if you want separate Q per each band, comment global Q and uncomment + the following array */ + +//#define EQ10_DQ {1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4,1.4} + +/* frequency table compatible to Q10 standard */ + + + + +typedef +struct eq10band_s +{ + double gain; /* gain of current band. Do not use this value, + use eq10_setgain instead */ + +#ifdef EQ10_DETECTOR_CODE + double detect; /* band detector value, do not use. + use eq10_detect to read detector value in dB */ + + double detectdecay; /* internal - do not use */ +#endif + + double ua0,ub1,ub2; /* internal - do not use */ + double da0,db1,db2; /* internal - do not use */ + double x1,x2,y1,y2; /* internal - do not use */ + +} eq10band_t; + + +typedef +struct eq10_s +{ + double rate; /* sample rate; do not modify */ + /* use eq10_setup to change */ + + eq10band_t band[EQ10_NOFBANDS]; /* bands of equalizer */ + + double detect; /* global detector value. do not use */ + double detectdecay; /* internal - do not use */ + +} eq10_t; + + + +double eq10_db2gain(double gain_dB); /* converts decibels to internal gain value*/ +double eq10_gain2db(double gain); /* converts internal gain value to decibels*/ + + +/* prepare eq array for processing, + + eq - pointer to array, + eqs - number of elements in array (number of audio channels) + rate - sample rate + + WARNING! this function resets all data in eq and sets all gains to 0dB +*/ +void eq10_setup(eq10_t *eq, int eqs, double rate); + + + +/* set band gain */ +/* + eq - pointer to array, + eqs - number of elements in array (number of audio channels) + bandnr - # of band (0...EQ_NOFBANDS-1) +*/ +void eq10_setgain(eq10_t *eq,int eqs,int bandnr,double gain_dB); + + +/* get current band gain */ +/* eq - pointer to element, possible to read gain on each channel + separately */ +double eq10_getgain(eq10_t *eq,int bandnr); + + +/* get detector value */ +/* eq - pointer to element, possible to read detector value on + each channel separately */ +double eq10_detect(eq10_t *eq,int bandnr); + + +/* process function + + eq - pointer to eq structure, corresponding to wanted channel + buf - input buffer (interleaved multichannel) + outbuf - output buffer + sz - number of samples in input buffer + idx - index of processed channel (0...N-1) + step - total number of channels in interleaved stream (N) + +*/ + +void eq10_processf(eq10_t *eq,float *buf,float *outbuf,int sz,int idx,int step); + + +/* + +Example: + + #define NCHAN 6 + + ... + + eq10_t eq[NCHAN]; // we process 5.1 data, thus 6 channels + int t; + eq10_t *peq; + + ... + + eq10_setup(eq,NCHAN,44100); // initialize + + ... + + eq10_setgain(eq,NCHAN, 5, -10.0f ); // set -10dB for gain6 (nr's from zero) + ... + + while (bla bla bla) // inner loop + { + for(t=0, peq=eq; t<NCHAN; t++, peq++) + { + eq10_processf(peq, input_buf, output_buf, cSamples, t, NCHAN); + } + } + + ... + +*/ + +#ifdef __cplusplus +} +#endif +#endif //EQ10DSP_H_INCLUDED |