#pragma once #include #include #include "PluginProcessor.h" class SpectrumDisplay : public juce::Component, private juce::Timer { public: explicit SpectrumDisplay (HorizontAudioProcessor&); ~SpectrumDisplay() override; void paint (juce::Graphics&) override; void setScaleFactor (float scale); private: void timerCallback() override; HorizontAudioProcessor& processor; static constexpr int fftOrder = 10; static constexpr int fftSize = 1 << fftOrder; static constexpr int numBins = 48; void computeLevels (const float* samples, int got, std::array& out); juce::Path makeCurve (const juce::Rectangle& graph, const std::array& data) const; juce::dsp::FFT fft { fftOrder }; std::vector fftData = std::vector (2 * fftSize, 0.0f); std::vector window; std::array level {}; std::array display {}; std::array peak {}; std::array dryLevel {}; std::array dryDisplay {}; std::array dryPeak {}; float scaleFactor = 1.0f; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SpectrumDisplay) };