@@ -45,17 +45,10 @@ double StateVariableFilter::Process(double dt, double input, double cutoff, bool
4545 return highPass ? high : low;
4646}
4747
48- void MultiFilter::UpdateFilterMixes (double dt)
49- {
50- filter1Mix += ((mode == FilterModes::onePole ? 1.0 : 0.0 ) - filter1Mix) * 100.0 * dt;
51- filter2Mix += ((mode == FilterModes::twoPole ? 1.0 : 0.0 ) - filter2Mix) * 100.0 * dt;
52- filter4Mix += ((mode == FilterModes::fourPole ? 1.0 : 0.0 ) - filter4Mix) * 100.0 * dt;
53- filterSvfMix += ((mode == FilterModes::stateVariable ? 1.0 : 0.0 ) - filterSvfMix) * 100.0 * dt;
54- }
55-
5648void MultiFilter::Process (double dt, double & l, double & r, double cutoff, bool highPass)
5749{
58- UpdateFilterMixes (dt);
50+ for (int i = 0 ; i < std::size (mix); i++)
51+ mix[i] += ((mode == i ? 1.0 : 0.0 ) - mix[i]) * 100.0 * dt;
5952
6053 auto inL = l;
6154 auto inR = r;
@@ -64,19 +57,10 @@ void MultiFilter::Process(double dt, double & l, double & r, double cutoff, bool
6457 l = 0.0 ;
6558 r = 0.0 ;
6659
67- filter1.Process (dt, inL, inR, cutoff, tempOutL, tempOutR, highPass);
68- l += tempOutL * filter1Mix;
69- r += tempOutR * filter1Mix;
70-
71- filter2.Process (dt, inL, inR, cutoff, tempOutL, tempOutR, highPass);
72- l += tempOutL * filter2Mix;
73- r += tempOutR * filter2Mix;
74-
75- filter4.Process (dt, inL, inR, cutoff, tempOutL, tempOutR, highPass);
76- l += tempOutL * filter4Mix;
77- r += tempOutR * filter4Mix;
78-
79- filterSvf.Process (dt, inL, inR, cutoff, tempOutL, tempOutR, highPass);
80- l += tempOutL * filterSvfMix;
81- r += tempOutR * filterSvfMix;
60+ for (int i = 0 ; i < std::size (filters); i++)
61+ {
62+ filters[i].Process (dt, inL, inR, cutoff, tempOutL, tempOutR, highPass);
63+ l += tempOutL * mix[i];
64+ r += tempOutR * mix[i];
65+ }
8266}
0 commit comments