28 SampleType lfo = std::sin(SampleType{2.0f} * pi * phase_) *
29 SampleType{0.5f} + SampleType{0.5f};
30 phase_ += rate_ / sample_rate_;
31 if (phase_ >= SampleType{1.0f}) phase_ -= SampleType{1.0f};
34 SampleType min_freq = SampleType{200.0f};
35 SampleType max_freq = SampleType{5000.0f};
36 SampleType freq = min_freq + lfo * depth_ * (max_freq - min_freq);
39 SampleType w0 = SampleType{2.0f} * pi * freq / sample_rate_;
40 SampleType coeff = (SampleType{1.0f} - std::tan(w0 * SampleType{0.5f})) /
41 (SampleType{1.0f} + std::tan(w0 * SampleType{0.5f}));
44 SampleType x = input + feedback_state_ * feedback_;
45 for (
int i = 0;
i < stages_; ++
i) {
46 SampleType y = coeff * (x - ap_state_[
i * 2 + 1]) + ap_state_[
i * 2];
48 ap_state_[
i * 2 + 1] = y;
55 return input * (SampleType{1.0f} - mix_) + x * mix_;