I grab all my DSP stuff from Jesusonic effects (Included with REAPER). IMO, jsfx's are a goldmine of really cool algorithms. Most of the eq's Ive seen refer to RBJ's cookbook which is here:
http://www.musicdsp.org/files/Audio-EQ-Cookbook.txtIve attached a 12 band eq (written in Jesusonic) which was extended from a 7 band eq. It shouldn't be too hard to convert to Pascal. Ive also attached my implementation of RBJ's stuff, (again in JS), which should be easy to convert to Pascal.
There are various implementations of RBJ's Cookbook in Pascal and C++. Here is one:
https://github.com/TaylorHanayik/StimSync/blob/master/osciLaz/source/filter_rbj.pasOnce you have a working RBJ library. Its easy to apply peak EQ's for each frequency band.
Another idea is to support VST effects, which can be done via the ASIOVST library. Problem is, the only FreePascal version Ive found is in the CodeTyphon libraries. So you need the typhon src (which contains more that you need)
http://www.pilotlogic.com/codetyphon/current/src/typhon_src.7zhttp://www.pilotlogic.com/sitejoom/index.php/forums/installation-setup/2963-sourcefilemanager-pasASIOVST has a _lot_ of filters.
** EDIT **
Just a quick implementation guide. I recently finished a guitar distortion effect, which included a 5 band EQ. With a RBJ library, the code came down to:
Initilization. For each band, I have the frequency, gain and bandwidth. (For a graphical EQ, frequency & bandwidth would be constant)
p0.RBJ.SetFG2BW1(slider20, slider10, slider30); p0.RBJ.PeakEq();
p1.RBJ.SetFG2BW1(slider21, slider11, slider31); p1.RBJ.PeakEq();
p2.RBJ.SetFG2BW1(slider22, slider12, slider32); p2.RBJ.PeakEq();
p3.RBJ.SetFG2BW1(slider23, slider13, slider33); p3.RBJ.PeakEq();
p4.RBJ.SetFG2BW1(slider24, slider14, slider34); p4.RBJ.PeakEq();
And, then for each sample (spl0), I have this.
slider10 ? spl0 = p0.RBJ.Sample(spl0);
slider11 ? spl0 = p1.RBJ.Sample(spl0);
slider12 ? spl0 = p2.RBJ.Sample(spl0);
slider13 ? spl0 = p3.RBJ.Sample(spl0);
slider14 ? spl0 = p4.RBJ.Sample(spl0);
The (slider1x ?) code is just to check for zero gain bands, so it skips code that doesn't need to be called.
So, in Pascal, you would have an array of 50 x 2 filters. (ie 100 filters), which are initialized to frequencies/bandwidth and gain. Then a for/loop to apply each filter to the 2 channels. You need separate filters for left and right because filters store history data.
Actually, on second thought. I think you need to update the 12 band eq. I dont think 50 peak eq's is what you are after.