elanhickler

FMD Filter - Superlove BP6

Feb 25th, 2020
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. class SuperLove_BP6 : public FMDFilter
  2. {
  3. public:
  4.     SuperLove_BP6()
  5.     {
  6.         filter.setMode(RAPT::rsLadderFilter<double, double>::BP_6_6);
  7.  
  8.         resonanceGraph.addNode(0, -0.2);
  9.         resonanceGraph.addNode(1, +1.3);
  10.         resonanceGraph.setNodeShapeType(1, rsFunctionNode<double>::EXPONENTIAL);
  11.         resonanceGraph.setNodeShapeParameter(1, -0.85);
  12.  
  13.         setShape(0.5);
  14.         setPhase(0);
  15.         setResonance(0);
  16.     }
  17.     void setInputAmplitude(double v) override
  18.     {
  19.         inputAmplitude = v;
  20.     }
  21.  
  22.     void setOutputAmplitude(double v) override
  23.     {
  24.         outputAmplitude = v;
  25.     }
  26.  
  27.     void setFrequency(double v) override
  28.     {
  29.         frequency = elan::pitchToFreq(jmap(v, -12.0, +135.0));
  30.         filter.setCutoff(clip(frequency, 0.0, 0.5 * sampleRate));  // 1 to 41860
  31.     }
  32.  
  33.     void setResonance(double v) override
  34.     {
  35.         mod = resonanceGraph.getValue(v);
  36.     }
  37.  
  38.     void setChaosAmount(double v) override
  39.     {
  40.         setShape(v);
  41.     }
  42.  
  43.     void setShape(double v)
  44.     {
  45.         shape = 1 -  v;
  46.     }
  47.  
  48.     void setPhase(double v)
  49.     {
  50.         phase = v + 0.75;
  51.     }
  52.  
  53.     void setSampleRate(double v) override
  54.     {
  55.         sampleRate = v;
  56.  
  57.         filter.setSampleRate(v);
  58.     }
  59.  
  60.     double getSample(double in) override
  61.     {
  62.         // input and feedback signal
  63.         feedbackSignal = mod * feedbackSignal + in * inputAmplitude;
  64.  
  65.         // resonator
  66.         double oscValue = -waveshape::trisaw(feedbackSignal + phase, shape);
  67.  
  68.         // feedback filter
  69.         feedbackSignal = filter.getSample(oscValue*.1);
  70.         feedbackSignal *= 10;
  71.  
  72.         // final out
  73.         return feedbackSignal * outputAmplitude;
  74.     }
  75.  
  76. protected:
  77.  
  78.     RAPT::rsLadderFilter<double, double> filter;
  79.     RAPT::rsNodeBasedFunction<double> resonanceGraph;
  80.  
  81.     double phase;
  82.     double shape;
  83.     double mod;
  84.  
  85.     double feedbackSignal = 0;
  86. };
Advertisement
Add Comment
Please, Sign In to add comment