The JUCE cross-platform C++ framework, with DISTRHO/KXStudio specific changes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
3.0KB

  1. /*
  2. ==============================================================================
  3. This file is part of the JUCE library.
  4. Copyright (c) 2017 - ROLI Ltd.
  5. JUCE is an open source library subject to commercial or open-source
  6. licensing.
  7. By using JUCE, you agree to the terms of both the JUCE 5 End-User License
  8. Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
  9. 27th April 2017).
  10. End User License Agreement: www.juce.com/juce-5-licence
  11. Privacy Policy: www.juce.com/juce-5-privacy-policy
  12. Or: You may also use this code under the terms of the GPL v3 (see
  13. www.gnu.org/licenses).
  14. JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
  15. EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
  16. DISCLAIMED.
  17. ==============================================================================
  18. */
  19. #include "../DSPDemo.h"
  20. //==============================================================================
  21. // @@ START_DEMO
  22. struct OverdriveDemo
  23. {
  24. void prepare (const ProcessSpec& spec)
  25. {
  26. sampleRate = spec.sampleRate;
  27. auto& gainUp = overdrive.get<0>();
  28. gainUp.setGainDecibels (24);
  29. auto& bias = overdrive.get<1>();
  30. bias.setBias (0.4f);
  31. auto& wavShaper = overdrive.get<2>();
  32. wavShaper.functionToUse = std::tanh;
  33. auto& dcFilter = overdrive.get<3>();
  34. dcFilter.state = IIR::Coefficients<float>::makeHighPass (sampleRate, 5.0);
  35. auto& gainDown = overdrive.get<4>();
  36. gainDown.setGainDecibels (-18.0f);
  37. overdrive.prepare (spec);
  38. }
  39. void process (const ProcessContextReplacing<float>& context)
  40. {
  41. overdrive.process (context);
  42. }
  43. void reset()
  44. {
  45. overdrive.reset();
  46. }
  47. void updateParameters()
  48. {
  49. if (sampleRate != 0)
  50. {
  51. overdrive.get<0>().setGainDecibels (static_cast<float> (inGainParam.getCurrentValue()));
  52. overdrive.get<4>().setGainDecibels (static_cast<float> (outGainParam.getCurrentValue()));
  53. }
  54. }
  55. //==============================================================================
  56. using GainProcessor = Gain<float>;
  57. using BiasProcessor = Bias<float>;
  58. using DriveProcessor = WaveShaper<float>;
  59. using DCFilter = ProcessorDuplicator<IIR::Filter<float>,
  60. IIR::Coefficients<float>>;
  61. ProcessorChain<GainProcessor, BiasProcessor, DriveProcessor, DCFilter, GainProcessor> overdrive;
  62. SliderParameter inGainParam { { -100.0, 60.0 }, 3, 24.0, "Input Gain", "dB" };
  63. SliderParameter outGainParam { { -100.0, 20.0 }, 3, -18.0, "Output Gain", "dB" };
  64. std::vector<DSPDemoParameterBase*> parameters { &inGainParam, &outGainParam };
  65. double sampleRate = 0;
  66. };
  67. // @@ END_DEMO
  68. RegisterDSPDemo<OverdriveDemo> overdriveDemo ("Overdrive", BinaryData::OverdriveDemo_cpp);