Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class SuperLove_BP6 : public FMDFilter
- {
- public:
- SuperLove_BP6()
- {
- filter.setMode(RAPT::rsLadderFilter<double, double>::BP_6_6);
- resonanceGraph.addNode(0, -0.2);
- resonanceGraph.addNode(1, +1.3);
- resonanceGraph.setNodeShapeType(1, rsFunctionNode<double>::EXPONENTIAL);
- resonanceGraph.setNodeShapeParameter(1, -0.85);
- setShape(0.5);
- setPhase(0);
- setResonance(0);
- }
- void setInputAmplitude(double v) override
- {
- inputAmplitude = v;
- }
- void setOutputAmplitude(double v) override
- {
- outputAmplitude = v;
- }
- void setFrequency(double v) override
- {
- frequency = elan::pitchToFreq(jmap(v, -12.0, +135.0));
- filter.setCutoff(clip(frequency, 0.0, 0.5 * sampleRate)); // 1 to 41860
- }
- void setResonance(double v) override
- {
- mod = resonanceGraph.getValue(v);
- }
- void setChaosAmount(double v) override
- {
- setShape(v);
- }
- void setShape(double v)
- {
- shape = 1 - v;
- }
- void setPhase(double v)
- {
- phase = v + 0.75;
- }
- void setSampleRate(double v) override
- {
- sampleRate = v;
- filter.setSampleRate(v);
- }
- double getSample(double in) override
- {
- // input and feedback signal
- feedbackSignal = mod * feedbackSignal + in * inputAmplitude;
- // resonator
- double oscValue = -waveshape::trisaw(feedbackSignal + phase, shape);
- // feedback filter
- feedbackSignal = filter.getSample(oscValue*.1);
- feedbackSignal *= 10;
- // final out
- return feedbackSignal * outputAmplitude;
- }
- protected:
- RAPT::rsLadderFilter<double, double> filter;
- RAPT::rsNodeBasedFunction<double> resonanceGraph;
- double phase;
- double shape;
- double mod;
- double feedbackSignal = 0;
- };
Advertisement
Add Comment
Please, Sign In to add comment