Resampling filter can now be turned off
Only linear filtering remains when off.
This commit is contained in:
@@ -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 */
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user