Resampling filter can now be turned off

Only linear filtering remains when off.
This commit is contained in:
Andreas Eversberg
2022-12-15 09:53:38 +01:00
parent 3d18361d2e
commit 7609e98b8f
2 changed files with 10 additions and 4 deletions

View File

@@ -34,8 +34,11 @@ int init_samplerate(samplerate_t *state, double low_samplerate, double high_samp
abort(); abort();
} }
iir_lowpass_init(&state->up.lp, filter_cutoff, high_samplerate, 2); state->filter_cutoff = filter_cutoff;
iir_lowpass_init(&state->down.lp, filter_cutoff, high_samplerate, 2); if (state->filter_cutoff) {
iir_lowpass_init(&state->up.lp, filter_cutoff, high_samplerate, 2);
iir_lowpass_init(&state->down.lp, filter_cutoff, high_samplerate, 2);
}
return 0; return 0;
} }
@@ -49,7 +52,8 @@ int samplerate_downsample(samplerate_t *state, sample_t *samples, int input_num)
sample_t last_sample; sample_t last_sample;
/* filter down */ /* filter down */
iir_process(&state->down.lp, samples, input_num); if (state->filter_cutoff)
iir_process(&state->down.lp, samples, input_num);
/* get last sample for interpolation */ /* get last sample for interpolation */
last_sample = state->down.last_sample; last_sample = state->down.last_sample;
@@ -185,7 +189,8 @@ void samplerate_upsample(samplerate_t *state, sample_t *input, int input_num, sa
state->up.in_index = in_index; state->up.in_index = in_index;
/* filter up */ /* filter up */
iir_process(&state->up.lp, samples, output_num); if (state->filter_cutoff)
iir_process(&state->up.lp, samples, output_num);
if (input == output) { if (input == output) {
/* copy samples */ /* copy samples */

View File

@@ -2,6 +2,7 @@
typedef struct samplerate { typedef struct samplerate {
double factor; double factor;
double filter_cutoff;
struct { struct {
iir_filter_t lp; iir_filter_t lp;
sample_t last_sample; sample_t last_sample;