FahlGrahn Audio v1.0.0
Loading...
Searching...
No Matches
EQView.h
1#pragma once
2#include <juce_gui_basics/juce_gui_basics.h>
3#include <juce_audio_processors/juce_audio_processors.h>
4
5#include "AnalyzerCurve.h"
6#include "CustomAudioParameterFloat.h"
7#include "PluginProcessor.h"
8#include <Filter.h>
9#include <Fonts.h>
10#include <array>
11
12// extern "C" {
13// size_t add(size_t left, size_t right);
14// typedef struct FFT FFT;
15// }
16
17class EQView : public juce::Component
18{
19 class Handle : public juce::Component
20 {
21 public:
22 static constexpr int handleSize = 20;
23 Handle(Filter::Type type, juce::RangedAudioParameter *bypassParam, juce::RangedAudioParameter *freqParam,
24 juce::RangedAudioParameter *filterOrder, juce::RangedAudioParameter *gainParam = nullptr,
25 juce::RangedAudioParameter *qParam = nullptr);
26
27 void paint(juce::Graphics &g) override;
28 void mouseDown(const juce::MouseEvent &event) override;
29 void mouseDrag(const juce::MouseEvent &event) override;
30 void mouseWheelMove(const juce::MouseEvent &event, const juce::MouseWheelDetails &wheel) override;
31 void updateFrequencyPositionFromParameter(float newValue);
32 void updateGainPositionFromParameter(float newValue);
33 void updateFilerOrderFromParameter(float newValue);
34
35 juce::RangedAudioParameter *mBypassParameter;
36 juce::RangedAudioParameter *mFreqParameter;
37 juce::RangedAudioParameter *mGainParameter;
38 juce::RangedAudioParameter *mQParameter;
39 juce::RangedAudioParameter *mFilterOrder;
40
41 std::unique_ptr<Filter> mFilter;
42
43 private:
44 juce::ComponentDragger dragger;
45 juce::ComponentBoundsConstrainer constrainer;
46
47 std::unique_ptr<juce::ParameterAttachment> mBypassAttachment{nullptr};
48 std::unique_ptr<juce::ParameterAttachment> mFilterOrderAttachment{nullptr};
49 std::unique_ptr<juce::ParameterAttachment> mFreqAttachment{nullptr};
50 std::unique_ptr<juce::ParameterAttachment> mGainAttachment{nullptr};
51 std::unique_ptr<juce::ParameterAttachment> mQAttachment{nullptr};
52
53 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(Handle)
54 };
55
56 public:
57 EQView(AudioPluginAudioProcessor &processor, juce::AudioProcessorValueTreeState &parameters);
58 ~EQView() override;
59 void resized() override;
60 void paint(juce::Graphics &g) override;
61
62 void drawGrid(juce::Graphics &g);
63 void drawTextLabels(juce::Graphics &g);
64 void drawVerticalLines(juce::Graphics &g);
65 void drawHorizontalLines(juce::Graphics &g);
66 void drawPlotCurve(juce::Graphics &g);
67 void updateFrequencyResponse();
68 std::vector<std::unique_ptr<Handle>> &getHandles()
69 {
70 return mHandles;
71 }
72
73 std::vector<float> getFrequencies();
74 std::vector<float> getXs(const std::vector<float> &freqs, float left, float width);
75 std::vector<int> getGains();
76
77 juce::Rectangle<int> getRenderArea();
78
79 private:
80 AudioPluginAudioProcessor &mProcessor;
81 juce::AudioProcessorValueTreeState &mParameters;
82 AnalyzerCurve mAnalyzerCurve;
83 juce::Path frequencyResponse;
84 int mSampleRate;
85 juce::Component handleContainer;
86 juce::Font deathMetalFont;
87 static constexpr int reducedSize = 30;
88
89 std::atomic<bool> parameterChanged{false};
90
91 std::vector<std::unique_ptr<Handle>> mHandles;
92
93 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EQView)
94};
Definition AnalyzerCurve.h:7
Definition PluginProcessor.h:9
Definition EQView.h:18