-
Notifications
You must be signed in to change notification settings - Fork 20
/
OJDProcessor.h
79 lines (60 loc) · 2.76 KB
/
OJDProcessor.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#pragma once
#include "../JuceLibraryCode/JuceHeader.h"
#include "OJDParameters.h"
#include "ToneStack.h"
#include "Waveshaper.h"
#include "Drawables.h"
class OJDAudioProcessor
: public jb::PluginAudioProcessorBase<OJDParameters>,
public juce::AudioProcessorValueTreeState::Listener
{
public:
//==============================================================================
OJDAudioProcessor();
//==============================================================================
void prepareResources (bool sampleRateChanged, bool maxBlockSizeChanged, bool numChannelsChanged) override;
bool isBusesLayoutSupported (const BusesLayout& layouts) const override;
void processBlock (juce::dsp::AudioBlock<float>& block) override;
void parameterChanged (const juce::String ¶meterID, float newValue) override;
juce::AudioProcessorEditor* createEditor() override;
Drawables drawables;
/** This processor will only process one channel */
static const int numChannels = 1;
private:
// References to all raw parameter values
const std::atomic<float>& rawValueDrive;
const std::atomic<float>& rawValueTone;
const std::atomic<float>& rawValueVolume;
const std::atomic<float>& rawValueHpLp;
// Signal path
enum SignalPath
{
hpf30,
biquadPreDriveBoost, // dependent on Drive setting
biquadPreDriveNotch, // dependent on Drive setting
preWaveshaperGain,
waveshaper,
biquadPostDriveBoost1, // dependent on HP/LP
biquadPostDriveBoost2, // dependent on Drive setting
biquadPostDriveBoost3, // dependent on HP/LP
lpf6_3k,
tone,
volume
};
using HPF = juce::dsp::IIR::Filter<float>;
using LPF = juce::dsp::IIR::Filter<float>;
using Biquad = juce::dsp::IIR::Filter<float>;
using Gain = juce::dsp::Gain<float>;
juce::dsp::ProcessorChain<HPF, Biquad, Biquad, Gain, Waveshaper, Biquad, Biquad, Biquad, LPF, ToneStack, Gain> chain;
// This lock is held for a short time when the drive changes & biquad coefficients are exchanged
juce::SpinLock biquadParameterLock;
std::atomic<bool> biquadParametersUpdated { false };
juce::dsp::IIR::Coefficients<float>::Ptr biquadPreDriveBoostCoeffs;
juce::dsp::IIR::Coefficients<float>::Ptr biquadPreDriveNotchCoeffs;
juce::dsp::IIR::Coefficients<float>::Ptr biquadPostDriveBoost1Coeffs;
juce::dsp::IIR::Coefficients<float>::Ptr biquadPostDriveBoost2Coeffs;
juce::dsp::IIR::Coefficients<float>::Ptr biquadPostDriveBoost3Coeffs;
void recalculateFilters();
void updateParametersForProcessorChain();
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OJDAudioProcessor)
};