aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/eq10dsp.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Winamp/eq10dsp.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Winamp/eq10dsp.h')
-rw-r--r--Src/Winamp/eq10dsp.h175
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