/*-------------------------------------------------*/ void filter_set_window_type(Filter* self, filter_window_t window) { if(window == self->window_type) return; self->window_type = window; void (*init_window)(Filter*) = NULL; switch(self->window_type) { case FILTER_WINDOW_RECT : init_window = filter_init_rect_window; break; case FILTER_WINDOW_HANN: init_window = filter_init_hann_window; break; case FILTER_WINDOW_HAMMING: init_window = filter_init_hamming_window; break; case FILTER_WINDOW_BLACKMANN: init_window = filter_init_blackmann_window; break; default:break; } if(init_window != NULL) init_window(self); filter_set_cutoff(self, self->cutoff); }
static void set_parameter_osc_all_cutoff (synth_parameter_union_t value, voice_t *voice) { for (int i = 0; i < NUM_OSCILLATORS; i++) { filter_set_cutoff (&voice->a_filters[i], value.real_value); } }
/*-------------------------------------------------*/ void filter_set_sample_rate(Filter* self, float sample_rate) { self->sample_rate = sample_rate; filter_set_cutoff(self, self->cutoff); }
/*-------------------------------------------------*/ void filter_set_filter_type(Filter* self, filter_type_t type) { if((self->type == type) || (type < 0) || (type >= FILTER_NUMBER_OF_TYPES)) return; filter_set_cutoff(self, self->cutoff); }