123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- /*****************************************
- 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
|