update CSpot + clear audio buffer when changing track

This commit is contained in:
philippe44
2022-08-23 17:06:59 -07:00
parent 36f18fc069
commit 0222dbd6de
22 changed files with 383 additions and 93 deletions

View File

@@ -17,6 +17,59 @@ private:
public:
BiquadFilter(){};
// Generates coefficients for a high pass biquad filter
void generateHighPassCoEffs(float f, float q){
if (q <= 0.0001) {
q = 0.0001;
}
float Fs = 1;
float w0 = 2 * M_PI * f / Fs;
float c = cosf(w0);
float s = sinf(w0);
float alpha = s / (2 * q);
float b0 = (1 + c) / 2;
float b1 = -(1 + c);
float b2 = b0;
float a0 = 1 + alpha;
float a1 = -2 * c;
float a2 = 1 - alpha;
coeffs[0] = b0 / a0;
coeffs[1] = b1 / a0;
coeffs[2] = b2 / a0;
coeffs[3] = a1 / a0;
coeffs[4] = a2 / a0;
}
// Generates coefficients for a low pass biquad filter
void generateLowPassCoEffs(float f, float q){
if (q <= 0.0001) {
q = 0.0001;
}
float Fs = 1;
float w0 = 2 * M_PI * f / Fs;
float c = cosf(w0);
float s = sinf(w0);
float alpha = s / (2 * q);
float b0 = (1 - c) / 2;
float b1 = 1 - c;
float b2 = b0;
float a0 = 1 + alpha;
float a1 = -2 * c;
float a2 = 1 - alpha;
coeffs[0] = b0 / a0;
coeffs[1] = b1 / a0;
coeffs[2] = b2 / a0;
coeffs[3] = a1 / a0;
coeffs[4] = a2 / a0;
}
// Generates coefficients for a high shelf biquad filter
void generateHighShelfCoEffs(float f, float gain, float q)
{
if (q <= 0.0001)
@@ -106,6 +159,119 @@ public:
coeffs[4] = a2 / a0;
}
// Generates coefficients for a peaking biquad filter
void generatePeakCoEffs(float f, float gain, float q)
{
if (q <= 0.0001) {
q = 0.0001;
}
float Fs = 1;
float w0 = 2 * M_PI * f / Fs;
float c = cosf(w0);
float s = sinf(w0);
float alpha = s / (2 * q);
float b0 = alpha;
float b1 = 0;
float b2 = -alpha;
float a0 = 1 + alpha;
float a1 = -2 * c;
float a2 = 1 - alpha;
coeffs[0] = b0 / a0;
coeffs[1] = b1 / a0;
coeffs[2] = b2 / a0;
coeffs[3] = a1 / a0;
coeffs[4] = a2 / a0;
}
// Generates coefficients for a peaking EQ biquad filter
void generatePeakingEqCoEffs(float f, float gain, float q)
{
// formular taken from: https://webaudio.github.io/Audio-EQ-Cookbook/audio-eq-cookbook.html
if (q <= 0.0001) {
q = 0.0001;
}
float Fs = 1;
float w0 = 2 * M_PI * f / Fs;
float c = cosf(w0);
float s = sinf(w0);
float alpha = s / (2 * q);
float A = sqrtf(pow(10, (double)gain / 20.0));
float b0 = 1 + (alpha*A);
float b1 = (-2*c);
float b2 = 1 - (alpha*A);
float a0 = 1 + (alpha/A);
float a1 = b1;
float a2 = 1 - (alpha/A);
coeffs[0] = b0 / a0;
coeffs[1] = b1 / a0;
coeffs[2] = b2 / a0;
coeffs[3] = a1 / a0;
coeffs[4] = a2 / a0;
}
// Generates coefficients for an all pass 180° biquad filter
void generateAllPass180CoEffs(float f, float q)
{
if (q <= 0.0001) {
q = 0.0001;
}
float Fs = 1;
float w0 = 2 * M_PI * f / Fs;
float c = cosf(w0);
float s = sinf(w0);
float alpha = s / (2 * q);
float b0 = 1 - alpha;
float b1 = -2 * c;
float b2 = 1 + alpha;
float a0 = 1 + alpha;
float a1 = -2 * c;
float a2 = 1 - alpha;
coeffs[0] = b0 / a0;
coeffs[1] = b1 / a0;
coeffs[2] = b2 / a0;
coeffs[3] = a1 / a0;
coeffs[4] = a2 / a0;
}
// Generates coefficients for an all pass 360° biquad filter
void generateAllPass360CoEffs(float f, float q)
{
if (q <= 0.0001) {
q = 0.0001;
}
float Fs = 1;
float w0 = 2 * M_PI * f / Fs;
float c = cosf(w0);
float s = sinf(w0);
float alpha = s / (2 * q);
float b0 = 1 - alpha;
float b1 = -2 * c;
float b2 = 1 + alpha;
float a0 = 1 + alpha;
float a1 = -2 * c;
float a2 = 1 - alpha;
coeffs[0] = b0 / a0;
coeffs[1] = b1 / a0;
coeffs[2] = b2 / a0;
coeffs[3] = a1 / a0;
coeffs[4] = a2 / a0;
}
void processSamples(float *input, int numSamples)
{
std::scoped_lock lock(processMutex);
@@ -125,4 +291,4 @@ public:
}
};
#endif
#endif