Question:
Anyone give me Media players Graphic equalizer Source code and Algorithm?
2007-11-09 23:19:48 UTC
Plz can anyone give me Media players(WMP,Winamp,etc) Graphic equalizer Source code and Algorithm?

I don't need exactly the same Media players code but just a basic code for starting the design for Graphic Equalizers
(Visual C/c++ Language or VB or anyone)

What r the prerequisite knowledge to be had before goin to design graphic equalizer

Plz do also give a brief algorithm for it if possible

Thanks in advance
Four answers:
Dan M
2007-11-10 11:07:29 UTC
Google for IIR biquad filter (which is normally a good choice for this sort of thing).



You might also wish to look into pole/zero analysis in the S domain and the the Z transform for the gory detail of how to get a given filter behaviour, and the Parks/Mclaren algorithm for how to go from the Z plane equation to the recurrence relation you need to implement the filter.



Spending a minute in the music dsp mailing list archive turned the following 3 band C code up (converting to C++ should be trivial):



Code courtesy of : Neil C / Etanza Systems, 2006 :)

--------------------------------------------------------------------

Simple 3 band equaliser with adjustable low and high frequencies ...



Fairly fast algo, good quality output (seems to be accoustically transparent with all gains set to 1.0)



How to use ...



1. First you need to declare a state for your eq



EQSTATE eq;



2. Now initialise the state (we'll assume your output frequency is 48Khz)



set_3band_state(eq,880,5000,480000);



Your EQ bands are now as follows (approximatley!)



low band = 0Hz to 880Hz

mid band = 880Hz to 5000Hz

high band = 5000Hz to 24000Hz



3. Set the gains to some values ...



eq.lg = 1.5; // Boost bass by 50%

eq.mg = 0.75; // Cut mid by 25%

eq.hg = 1.0; // Leave high band alone



4. You can now EQ some samples



out_sample = do_3band(eq,in_sample)





Have fun and mail me if any problems ... etanza at lycos dot co dot uk





Neil C / Etanza Systems, 2006 :)







Code :

First the header file ....

//---------------------------------------------------------------------------

//

// 3 Band EQ :)

//

// EQ.H - Header file for 3 band EQ

//

// (c) Neil C / Etanza Systems / 2K6

//

// Shouts / Loves / Moans = etanza at lycos dot co dot uk

//

// This work is hereby placed in the public domain for all purposes, including

// use in commercial applications.

//

// The author assumes NO RESPONSIBILITY for any problems caused by the use of

// this software.

//

//----------------------------------------------------------------------------



#ifndef __EQ3BAND__

#define __EQ3BAND__





// ------------

//| Structures |

// ------------



typedef struct

{

// Filter #1 (Low band)



double lf; // Frequency

double f1p0; // Poles ...

double f1p1;

double f1p2;

double f1p3;



// Filter #2 (High band)



double hf; // Frequency

double f2p0; // Poles ...

double f2p1;

double f2p2;

double f2p3;



// Sample history buffer



double sdm1; // Sample data minus 1

double sdm2; // 2

double sdm3; // 3



// Gain Controls



double lg; // low gain

double mg; // mid gain

double hg; // high gain



} EQSTATE;





// ---------

//| Exports |

// ---------



extern void init_3band_state(EQSTATE* es, int lowfreq, int highfreq, int mixfreq);

extern double do_3band(EQSTATE* es, double sample);





#endif // #ifndef __EQ3BAND__

//---------------------------------------------------------------------------



Now the source ...

//----------------------------------------------------------------------------

//

// 3 Band EQ :)

//

// EQ.C - Main Source file for 3 band EQ

//

// (c) Neil C / Etanza Systems / 2K6

//

// Shouts / Loves / Moans = etanza at lycos dot co dot uk

//

// This work is hereby placed in the public domain for all purposes, including

// use in commercial applications.

//

// The author assumes NO RESPONSIBILITY for any problems caused by the use of

// this software.

//

//----------------------------------------------------------------------------



// NOTES :

//

// - Original filter code by Paul Kellet (musicdsp.pdf)

//

// - Uses 4 first order filters in series, should give 24dB per octave

//

// - Now with P4 Denormal fix :)





//----------------------------------------------------------------------------



// ----------

//| Includes |

// ----------



#include

#include "eq.h"





// -----------

//| Constants |

// -----------



static double vsa = (1.0 / 4294967295.0); // Very small amount (Denormal Fix)





// ---------------

//| Initialise EQ |

// ---------------



// Recommended frequencies are ...

//

// lowfreq = 880 Hz

// highfreq = 5000 Hz

//

// Set mixfreq to whatever rate your system is using (eg 48Khz)



void init_3band_state(EQSTATE* es, int lowfreq, int highfreq, int mixfreq)

{

// Clear state



memset(es,0,sizeof(EQSTATE));



// Set Low/Mid/High gains to unity



es->lg = 1.0;

es->mg = 1.0;

es->hg = 1.0;



// Calculate filter cutoff frequencies



es->lf = 2 * sin(M_PI * ((double)lowfreq / (double)mixfreq));

es->hf = 2 * sin(M_PI * ((double)highfreq / (double)mixfreq));

}





// ---------------

//| EQ one sample |

// ---------------



// - sample can be any range you like :)

//

// Note that the output will depend on the gain settings for each band

// (especially the bass) so may require clipping before output, but you

// knew that anyway :)



double do_3band(EQSTATE* es, double sample)

{

// Locals



double l,m,h; // Low / Mid / High - Sample Values



// Filter #1 (lowpass)



es->f1p0 += (es->lf * (sample - es->f1p0)) + vsa;

es->f1p1 += (es->lf * (es->f1p0 - es->f1p1));

es->f1p2 += (es->lf * (es->f1p1 - es->f1p2));

es->f1p3 += (es->lf * (es->f1p2 - es->f1p3));



l = es->f1p3;



// Filter #2 (highpass)



es->f2p0 += (es->hf * (sample - es->f2p0)) + vsa;

es->f2p1 += (es->hf * (es->f2p0 - es->f2p1));

es->f2p2 += (es->hf * (es->f2p1 - es->f2p2));

es->f2p3 += (es->hf * (es->f2p2 - es->f2p3));



h = es->sdm3 - es->f2p3;



// Calculate midrange (signal - (low + high))



m = es->sdm3 - (h + l);



// Scale, Combine and store



l *= es->lg;

m *= es->mg;

h *= es->hg;



// Shuffle history buffer



es->sdm3 = es->sdm2;

es->sdm2 = es->sdm1;

es->sdm1 = sample;



// Return result



return(l + m + h);

}



Hope that gives the idea.



Regards, Dan.
smallidge
2016-10-02 04:39:24 UTC
The bars each and each characterize a frequency area. Human listening to usually tiers from 20 Hz ~ 20,000 Hz (or 20 KHz). while the quantity administration merely amplifies or de-amplifies the full audio, an equalizer can rather independently administration the quantity of a constrained variety of frequencies. Take for occasion, regular voice variety is from approximately 3 hundred Hz ~ 3 KHz. a lot of people rather will no longer be able to take heed to something exterior of the 250 Hz ~ 15 KHz variety. Others can, yet are no longer as comfortable. and that's what EQ's are ultimate for. boost the utmost and lowest finally ends up mutually as leaving the middle ones nearer to middle point. in fact, your EQ settings will appear as if a smiley face. do no longer boost any of them each and each of how as much as the authentic, because of the fact then you rather're additionally distorting the frequencies in those tiers. EQ's are rather merely a posh tone administration on stereos and desktops. advantageous, yet no longer rather that important. rather, they extra distort the audio than rather advance it, yet a lot of people like it that way. the authentic objective of an equalizer is to make up for the acoustical deficiencies of the room. Say for a carpeted room, it is going to swallow the intense frequencies, leaving a muffled sounding bassy audio. Or demanding partitions will replicate intense frequencies, drowning out the bass and sounding form of tinny. by utilising producing pink noise (even distribution static), you may view a spectrum analyzer that's linked to a intense-high quality microphone and reflects the frequencies that fall off or replicate because of room deficiencies. In that way, an equalizer might nicely be adjusted to atone for those frequency areas. for my area, that pathetic equalizer featuring Media participant, alongside with elementary regular computing device audio device, is a geek's device that has no fee. I save mine at flat point.
Blackcompe
2007-11-09 23:26:47 UTC
you can start by learning recursive algorithms. You tell by looking at the repeating and mirrored shapes and lines. Winamp and wmv graphics are recursive graphic algorithms, but i doubt if anyone will throw their code in your face. That stuff takes time and effort.
Kablob
2007-11-09 23:22:19 UTC
google it


This content was originally posted on Y! Answers, a Q&A website that shut down in 2021.
Loading...