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 committed by Gitea
parent 8dce66125c
commit 7cb0e685fe
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();
}
iir_lowpass_init(&state->up.lp, filter_cutoff, high_samplerate, 2);
iir_lowpass_init(&state->down.lp, filter_cutoff, high_samplerate, 2);
state->filter_cutoff = filter_cutoff;
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;
}
@ -49,7 +52,8 @@ int samplerate_downsample(samplerate_t *state, sample_t *samples, int input_num)
sample_t last_sample;
/* 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 */
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;
/* 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) {
/* copy samples */

View File

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