Advertisement
Guest User

Untitled

a guest
Jul 20th, 2018
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.00 KB | None | 0 0
  1. import("math.lib");
  2.  
  3.  
  4. freqSlider = hslider("Freq", 1000.0, 1, 20000, 0.1);
  5. qSlider = hslider("Q", 0.1, 0.001, 1, 0.001);
  6. gainSlider = hslider("Volume", 1.0, 0.1, 6.0, 0.025);
  7.  
  8. kLowPass = 0;
  9. kHighPass = 1;
  10. kBandPass = 2;
  11. kNotch = 3;
  12. kPeak = 4;
  13. kBell = 5;
  14. kLowPassShelf = 6;
  15. kHighPassShelf = 7;
  16. kNumModes = 8;
  17.  
  18. modeSlider = hslider("Mode", 0, 0, kNumModes, 1);
  19.  
  20. SAMPLERATE = 48000;
  21. M_PI = 3.1415926535897932384626433832795028841;
  22.  
  23. class SVF(int mode, float freq, float Q, float gain){
  24.    
  25.     float mV1 = 0.;
  26.     float mV2 = 0.;
  27.     float mV3 = 0.;
  28.     float mIc1eq = 0.;
  29.     float mIc2eq = 0.;
  30.    
  31.     process(input){
  32.  
  33.  
  34.         float w = tan(M_PI * freq / SAMPLERATE);
  35.  
  36.         float m_a1;
  37.         float m_a2;
  38.         float m_a3;
  39.         float m_m0;
  40.         float m_m1;
  41.         float m_m2;
  42.  
  43.         if (mode == kLowPass)
  44.             {
  45.                 float g = w;
  46.                 float k = 1. / Q;
  47.                 m_a1 = 1./(1. + g * (g + k));
  48.                 m_a2 = g * m_a1;
  49.                 m_a3 = g * m_a2;
  50.                 m_m0 = 0;
  51.                 m_m1 = 0;
  52.                 m_m2 = 1.;
  53.             }
  54.        
  55.         else if (mode == kHighPass)
  56.             {
  57.                 float g = w;
  58.                 float k = 1. / Q;
  59.                 m_a1 = 1./(1. + g * (g + k));
  60.                 m_a2 = g * m_a1;
  61.                 m_a3 = g * m_a2;
  62.                 m_m0 = 1.;
  63.                 m_m1 = -k;
  64.                 m_m2 = -1.;
  65.             }
  66.        
  67.        
  68.         else if (mode == kBandPass)
  69.             {
  70.                 float g = w;
  71.                 float k = 1. / Q;
  72.                 m_a1 = 1./(1. + g * (g + k));
  73.                 m_a2 = g * m_a1;
  74.                 m_a3 = g * m_a2;
  75.                 m_m0 = 0.;
  76.                 m_m1 = 1.;
  77.                 m_m2 = 0.;
  78.             }
  79.        
  80.         else if (mode == kNotch)
  81.             {
  82.                 float g = w;
  83.                 float k = 1. / Q;
  84.                 m_a1 = 1./(1. + g * (g + k));
  85.                 m_a2 = g * m_a1;
  86.                 m_a3 = g * m_a2;
  87.                 m_m0 = 1.;
  88.                 m_m1 = -k;
  89.                 m_m2 = 0.;
  90.             }
  91.  
  92.         else if (mode == kPeak)
  93.             {
  94.                 float g = w;
  95.                 float k = 1. / Q;
  96.                 m_a1 = 1./(1. + g * (g + k));
  97.                 m_a2 = g * m_a1;
  98.                 m_a3 = g * m_a2;
  99.                 m_m0 = 1.;
  100.                 m_m1 = -k;
  101.                 m_m2 = -2.;
  102.             }
  103.  
  104.         else if (mode == kBell)
  105.             {
  106.                 float A = pow(10., gain/40.);
  107.                 float g = w;
  108.                 float k = 1 / Q;
  109.                 m_a1 = 1./(1. + g * (g + k));
  110.                 m_a2 = g * m_a1;
  111.                 m_a3 = g * m_a2;
  112.                 m_m0 = 1.;
  113.                 m_m1 = k * (A * A - 1.);
  114.                 m_m2 = 0.;
  115.             }
  116.  
  117.         else if (mode == kLowPassShelf)
  118.             {
  119.                 float A = pow(10., gain/40.);
  120.                 float g = w / sqrt(A);
  121.                 float k = 1. / Q;
  122.                 m_a1 = 1./(1. + g * (g + k));
  123.                 m_a2 = g * m_a1;
  124.                 m_a3 = g * m_a2;
  125.                 m_m0 = 1.;
  126.                 m_m1 = k * (A - 1.);
  127.                 m_m2 = (A * A - 1.);
  128.             }
  129.  
  130.         else if (mode == kHighPassShelf)
  131.             {
  132.                 float A = pow(10., gain/40.);
  133.                 float g = w / sqrt(A);
  134.                 float k = 1. / Q;
  135.                 m_a1 = 1./(1. + g * (g + k));
  136.                 m_a2 = g * m_a1;
  137.                 m_a3 = g * m_a2;
  138.                 m_m0 = A*A;
  139.                 m_m1 = k*(1. - A)*A;
  140.                 m_m2 = (1. - A*A);
  141.             }
  142.  
  143.         float v0 = input;
  144.  
  145.         mV3 = v0 - mIc2eq;
  146.         mV1 = m_a1 * mIc1eq + m_a2*mV3;
  147.         mV2 = mIc2eq + m_a2 * mIc1eq + m_a3 * mV3;
  148.         mIc1eq = 2. * mV1 - mIc1eq;
  149.         mIc2eq = 2. * mV2 - mIc2eq;
  150.  
  151.         return m_m0 * v0 + m_m1 * mV1 + m_m2 * mV2;
  152.     }
  153.  
  154. }
  155.  
  156. process = SVF(modeSlider, freqSlider, qSlider, gainSlider);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement