Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import("math.lib");
- freqSlider = hslider("Freq", 1000.0, 1, 20000, 0.1);
- qSlider = hslider("Q", 0.1, 0.001, 1, 0.001);
- gainSlider = hslider("Volume", 1.0, 0.1, 6.0, 0.025);
- kLowPass = 0;
- kHighPass = 1;
- kBandPass = 2;
- kNotch = 3;
- kPeak = 4;
- kBell = 5;
- kLowPassShelf = 6;
- kHighPassShelf = 7;
- kNumModes = 8;
- modeSlider = hslider("Mode", 0, 0, kNumModes, 1);
- SAMPLERATE = 48000;
- M_PI = 3.1415926535897932384626433832795028841;
- class SVF(int mode, float freq, float Q, float gain){
- float mV1 = 0.;
- float mV2 = 0.;
- float mV3 = 0.;
- float mIc1eq = 0.;
- float mIc2eq = 0.;
- process(input){
- float w = tan(M_PI * freq / SAMPLERATE);
- float m_a1;
- float m_a2;
- float m_a3;
- float m_m0;
- float m_m1;
- float m_m2;
- if (mode == kLowPass)
- {
- float g = w;
- float k = 1. / Q;
- m_a1 = 1./(1. + g * (g + k));
- m_a2 = g * m_a1;
- m_a3 = g * m_a2;
- m_m0 = 0;
- m_m1 = 0;
- m_m2 = 1.;
- }
- else if (mode == kHighPass)
- {
- float g = w;
- float k = 1. / Q;
- m_a1 = 1./(1. + g * (g + k));
- m_a2 = g * m_a1;
- m_a3 = g * m_a2;
- m_m0 = 1.;
- m_m1 = -k;
- m_m2 = -1.;
- }
- else if (mode == kBandPass)
- {
- float g = w;
- float k = 1. / Q;
- m_a1 = 1./(1. + g * (g + k));
- m_a2 = g * m_a1;
- m_a3 = g * m_a2;
- m_m0 = 0.;
- m_m1 = 1.;
- m_m2 = 0.;
- }
- else if (mode == kNotch)
- {
- float g = w;
- float k = 1. / Q;
- m_a1 = 1./(1. + g * (g + k));
- m_a2 = g * m_a1;
- m_a3 = g * m_a2;
- m_m0 = 1.;
- m_m1 = -k;
- m_m2 = 0.;
- }
- else if (mode == kPeak)
- {
- float g = w;
- float k = 1. / Q;
- m_a1 = 1./(1. + g * (g + k));
- m_a2 = g * m_a1;
- m_a3 = g * m_a2;
- m_m0 = 1.;
- m_m1 = -k;
- m_m2 = -2.;
- }
- else if (mode == kBell)
- {
- float A = pow(10., gain/40.);
- float g = w;
- float k = 1 / Q;
- m_a1 = 1./(1. + g * (g + k));
- m_a2 = g * m_a1;
- m_a3 = g * m_a2;
- m_m0 = 1.;
- m_m1 = k * (A * A - 1.);
- m_m2 = 0.;
- }
- else if (mode == kLowPassShelf)
- {
- float A = pow(10., gain/40.);
- float g = w / sqrt(A);
- float k = 1. / Q;
- m_a1 = 1./(1. + g * (g + k));
- m_a2 = g * m_a1;
- m_a3 = g * m_a2;
- m_m0 = 1.;
- m_m1 = k * (A - 1.);
- m_m2 = (A * A - 1.);
- }
- else if (mode == kHighPassShelf)
- {
- float A = pow(10., gain/40.);
- float g = w / sqrt(A);
- float k = 1. / Q;
- m_a1 = 1./(1. + g * (g + k));
- m_a2 = g * m_a1;
- m_a3 = g * m_a2;
- m_m0 = A*A;
- m_m1 = k*(1. - A)*A;
- m_m2 = (1. - A*A);
- }
- float v0 = input;
- mV3 = v0 - mIc2eq;
- mV1 = m_a1 * mIc1eq + m_a2*mV3;
- mV2 = mIc2eq + m_a2 * mIc1eq + m_a3 * mV3;
- mIc1eq = 2. * mV1 - mIc1eq;
- mIc2eq = 2. * mV2 - mIc2eq;
- return m_m0 * v0 + m_m1 * mV1 + m_m2 * mV2;
- }
- }
- process = SVF(modeSlider, freqSlider, qSlider, gainSlider);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement