@@ -79,14 +79,15 @@ void biquad_reset(struct biquad_state *state)
79
79
void biquad_init_using_type (struct biquad_state * b , int type , double fs , double arg0 , double arg1 , double arg2 , double arg3 , int width_type )
80
80
{
81
81
double b0 = 1.0 , b1 = 0.0 , b2 = 0.0 , a0 = 1.0 , a1 = 0.0 , a2 = 0.0 ;
82
- if (type == BIQUAD_LINKWITZ_TRANSFORM ) {
82
+ if (type == BIQUAD_LOWPASS_TRANSFORM || type == BIQUAD_HIGHPASS_TRANSFORM ) {
83
83
const double fz = arg0 , qz = arg1 ;
84
84
const double fp = arg2 , qp = arg3 ;
85
85
86
86
const double w0z = 2 * M_PI * fz / fs , w0p = 2 * M_PI * fp / fs ;
87
87
const double cos_w0z = cos (w0z ), cos_w0p = cos (w0p );
88
88
const double alpha_z = sin (w0z ) / (2.0 * qz ), alpha_p = sin (w0p ) / (2.0 * qp );
89
- const double kz = 2.0 /(1.0 + cos_w0z ), kp = 2.0 /(1.0 + cos_w0p );
89
+ const double kz = (type == BIQUAD_LOWPASS_TRANSFORM ) ? 2.0 /(1.0 - cos_w0z ) : 2.0 /(1.0 + cos_w0z );
90
+ const double kp = (type == BIQUAD_LOWPASS_TRANSFORM ) ? 2.0 /(1.0 - cos_w0p ) : 2.0 /(1.0 + cos_w0p );
90
91
91
92
b0 = (1.0 + alpha_z )* kz ;
92
93
b1 = (-2.0 * cos_w0z )* kz ;
@@ -109,7 +110,7 @@ void biquad_init_using_type(struct biquad_state *b, int type, double fs, double
109
110
}
110
111
111
112
const double a = pow (10.0 , gain / 40.0 );
112
- const double w0 = 2.0 * M_PI * f0 / fs ;
113
+ const double w0 = 2 * M_PI * f0 / fs ;
113
114
const double sin_w0 = sin (w0 ), cos_w0 = cos (w0 );
114
115
115
116
switch (width_type ) {
@@ -422,8 +423,9 @@ struct effect * biquad_effect_init(const struct effect_info *ei, const struct st
422
423
if (ei -> effect_number == BIQUAD_PEAK ) CHECK_WIDTH_TYPE (BIQUAD_WIDTH_TEST_NO_SLOPE );
423
424
GET_ARG (arg2 , argv [3 ], "gain" );
424
425
break ;
425
- case BIQUAD_LINKWITZ_TRANSFORM :
426
- INIT_COMMON (4 , BIQUAD_LINKWITZ_TRANSFORM );
426
+ case BIQUAD_LOWPASS_TRANSFORM :
427
+ case BIQUAD_HIGHPASS_TRANSFORM :
428
+ INIT_COMMON (4 , ei -> effect_number );
427
429
GET_FREQ_ARG (arg0 , argv [1 ], "fz" );
428
430
GET_ARG (arg1 , argv [2 ], "qz" );
429
431
CHECK_RANGE (arg1 > 0.0 , "qz" , return NULL );
0 commit comments