On 11/30/2014 12:39 AM, Vesa wrote:
> On 11/30/2014 12:24 AM, Dave French wrote:
>> You want me pull to code into a class?
> No, I can do that...
Ok, it is now done (in master branch).
BasicFilters.h now contains the class BiQuad<ch_cnt_t channels>, where
ch_cnt_t is a typedef for int that signifies channel count. There's also
a convenience typedef StereoBiQuad which resolves to BiQuad<2>. That's
likely what you'll want to use (unless you want your EQ to have separate
controls for each channel, but I personally find that fairly pointless
in an EQ...)
To use a StereoBiQuad, #include "BasicFilters.h" and simply construct
your filter like thus:
StereoBiQuad sbq = StereoBiQuad();
StereoBiQuad * psbq = new StereoBiQuad();
To set coefficients:
sbq.setCoeffs( a1, a2, b0, b1, b2 );
Both channels will use the same coeffs.
To run the filter for one sampleframe, you have to call each channel
separately:
sampleFrame src, dst;
dst[0] = sbq.update( src[0], 0 );
dst[1] = sbq.update( src[1], 1 );
Now as for calculating coefficients, I'll leave that up to you, but
here's a decent-looking algorithm for calculating peak filter coeffs
that I found, adapted for LMMS:
// peak filter coefficients:
// input values (all should be floats):
// Fc = center freq
// Fs = sample rate
// Q = Q/resonance
// peakGain = peak gain in dBV
float a1, a2, b0, b1, b2; // coeffs to calculate
const float V = dbvToAmp( qAbs( peakGain ) ); // convert dBV to
absolute linear amp
const float K = tanf( F_PI * Fc / Fs );
const float norm = 1 / (1 + V/Q * K + K * K);
if ( peakGain >= 0.0f ) // >=0dBV gain
{
b0 = (1 + V/Q * K + K * K) * norm;
b1 = 2 * (K * K - 1) * norm;
b2 = (1 - V/Q * K + K * K) * norm;
a1 = b1;
a2 = (1 - 1/Q * K + K * K) * norm;
}
else // negative gain
{
b0 = (1 + 1/Q * K + K * K) * norm;
b1 = 2 * (K * K - 1) * norm;
b2 = (1 - 1/Q * K + K * K) * norm;
a1 = b1;
a2 = (1 - V/Q * K + K * K) * norm;
}
Let me know if you need shelf filters as well. Or you can just use your
own algorithms, if you find better/faster ones...
------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.clktrk
_______________________________________________
LMMS-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/lmms-devel