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.

79 lines
2.9KB

  1. #ifndef PLUGINPROCESSOR_H_INCLUDED
  2. #define PLUGINPROCESSOR_H_INCLUDED
  3. #include "../JuceLibraryCode/JuceHeader.h"
  4. #include <array>
  5. // A simple Inter-App Audio plug-in with a gain control and some meters.
  6. class IAAEffectProcessor : public AudioProcessor
  7. {
  8. public:
  9. IAAEffectProcessor();
  10. ~IAAEffectProcessor();
  11. //==============================================================================
  12. void prepareToPlay (double sampleRate, int samplesPerBlock) override;
  13. void releaseResources() override;
  14. bool isBusesLayoutSupported (const BusesLayout& layouts) const override;
  15. void processBlock (AudioSampleBuffer&, MidiBuffer&) override;
  16. //==============================================================================
  17. AudioProcessorEditor* createEditor() override;
  18. bool hasEditor() const override;
  19. //==============================================================================
  20. const String getName() const override;
  21. bool acceptsMidi() const override;
  22. bool producesMidi() const override;
  23. double getTailLengthSeconds() const override;
  24. //==============================================================================
  25. int getNumPrograms() override;
  26. int getCurrentProgram() override;
  27. void setCurrentProgram (int index) override;
  28. const String getProgramName (int index) override;
  29. void changeProgramName (int index, const String& newName) override;
  30. //==============================================================================
  31. void getStateInformation (MemoryBlock& destData) override;
  32. void setStateInformation (const void* data, int sizeInBytes) override;
  33. //==============================================================================
  34. bool updateCurrentTimeInfoFromHost (AudioPlayHead::CurrentPositionInfo&);
  35. // Allow an IAAAudioProcessorEditor to register as a listener to receive new
  36. // meter values directly from the audio thread.
  37. struct MeterListener
  38. {
  39. virtual ~MeterListener() {};
  40. virtual void handleNewMeterValue (int, float) = 0;
  41. };
  42. void addMeterListener (MeterListener& listener) { meterListeners.add (&listener); };
  43. void removeMeterListener (MeterListener& listener) { meterListeners.remove (&listener); };
  44. private:
  45. //==============================================================================
  46. AudioProcessorValueTreeState parameters;
  47. float previousGain = 0.0;
  48. std::array <float, 2> meterValues = { { 0, 0 } };
  49. // This keeps a copy of the last set of timing info that was acquired during an
  50. // audio callback - the UI component will display this.
  51. AudioPlayHead::CurrentPositionInfo lastPosInfo;
  52. ListenerList<MeterListener> meterListeners;
  53. JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (IAAEffectProcessor)
  54. };
  55. #endif // PLUGINPROCESSOR_H_INCLUDED