45 lines
1.1 KiB
C
45 lines
1.1 KiB
C
#ifndef FX_EQUALIZER_H
|
|
#define FX_EQUALIZER_H
|
|
|
|
#include <stdbool.h>
|
|
|
|
#define FX_EQ_NUM_BANDS 10U
|
|
|
|
typedef struct
|
|
{
|
|
float freq_hz; /* frequence centrale de la bande */
|
|
float gain_db; /* -24.0 a +24.0 dB */
|
|
float q; /* facteur de qualite, typiquement 0.5 a 5.0 */
|
|
} FxEqBand;
|
|
|
|
typedef struct
|
|
{
|
|
bool enabled;
|
|
FxEqBand bands[FX_EQ_NUM_BANDS];
|
|
} FxEqualizerParams;
|
|
|
|
typedef struct
|
|
{
|
|
/* coefficients biquad mis en cache, recalcules seulement si les parametres changent */
|
|
float b0, b1, b2, a1, a2;
|
|
/* dernieres valeurs de parametres utilisees pour calculer les coefficients ci-dessus */
|
|
float last_freq_hz;
|
|
float last_gain_db;
|
|
float last_q;
|
|
} FxEqBandState;
|
|
|
|
typedef struct
|
|
{
|
|
FxEqBandState band_state[FX_EQ_NUM_BANDS];
|
|
/* etat du filtre (direct form 1), par bande */
|
|
float x1[FX_EQ_NUM_BANDS];
|
|
float x2[FX_EQ_NUM_BANDS];
|
|
float y1[FX_EQ_NUM_BANDS];
|
|
float y2[FX_EQ_NUM_BANDS];
|
|
} FxEqualizerState;
|
|
|
|
void FxEqualizer_Init(FxEqualizerState *state, FxEqualizerParams *params);
|
|
float FxEqualizer_Process(FxEqualizerState *state, const FxEqualizerParams *params, float input);
|
|
|
|
#endif /* FX_EQUALIZER_H */
|