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.

112 lines
4.7KB

  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. #pragma once
  20. #include "../JuceLibraryCode/JuceHeader.h"
  21. //==============================================================================
  22. /**
  23. This class handles the audio processing for the DSP module plugin demo.
  24. */
  25. class DspModulePluginDemoAudioProcessor : public AudioProcessor
  26. {
  27. public:
  28. //==============================================================================
  29. DspModulePluginDemoAudioProcessor();
  30. ~DspModulePluginDemoAudioProcessor();
  31. //==============================================================================
  32. #ifndef JucePlugin_PreferredChannelConfigurations
  33. bool isBusesLayoutSupported (const BusesLayout& layouts) const override;
  34. #endif
  35. void prepareToPlay (double sampleRate, int samplesPerBlock) override;
  36. void releaseResources() override;
  37. void processBlock (AudioSampleBuffer&, MidiBuffer&) override;
  38. void reset() override;
  39. //==============================================================================
  40. bool hasEditor() const override;
  41. AudioProcessorEditor* createEditor() override;
  42. //==============================================================================
  43. bool acceptsMidi() const override;
  44. bool producesMidi() const override;
  45. const String getName() const override { return JucePlugin_Name; }
  46. double getTailLengthSeconds() const override { return 0.0; }
  47. //==============================================================================
  48. int getNumPrograms() override { return 1; }
  49. int getCurrentProgram() override { return 0; }
  50. void setCurrentProgram (int /*index*/) override {}
  51. const String getProgramName (int /*index*/) override { return {}; }
  52. void changeProgramName (int /*index*/, const String& /*newName*/) override {}
  53. //==============================================================================
  54. void getStateInformation (MemoryBlock& /*destData*/) override {}
  55. void setStateInformation (const void* /*data*/, int /*sizeInBytes*/) override {}
  56. //==============================================================================
  57. void updateParameters();
  58. static inline float clip(float x) { return jmax(-1.f, jmin(1.f, x)); }
  59. //==============================================================================
  60. AudioParameterFloat* inputVolumeParam;
  61. AudioParameterFloat* outputVolumeParam;
  62. AudioParameterFloat* lowPassFilterFreqParam;
  63. AudioParameterFloat* highPassFilterFreqParam;
  64. AudioParameterChoice* stereoParam;
  65. AudioParameterChoice* slopeParam;
  66. AudioParameterChoice* waveshaperParam;
  67. AudioParameterChoice* cabinetTypeParam;
  68. AudioParameterBool* cabinetSimParam;
  69. private:
  70. //==============================================================================
  71. void process (dsp::ProcessContextReplacing<float>) noexcept;
  72. //==============================================================================
  73. dsp::ProcessorDuplicator<dsp::IIR::Filter<float>, dsp::IIR::Coefficients<float>> lowPassFilter, highPassFilter;
  74. dsp::Convolution convolution;
  75. static constexpr size_t numWaveShapers = 2;
  76. dsp::WaveShaper<float> waveShapers[numWaveShapers];
  77. dsp::WaveShaper<float> clipping;
  78. dsp::Gain<float> inputVolume, outputVolume;
  79. Atomic<int> cabinetType;
  80. bool cabinetIsBypassed = false;
  81. //==============================================================================
  82. JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DspModulePluginDemoAudioProcessor)
  83. };