12 std::tuple<std::shared_ptr<Filter>, juce::RangedAudioParameter *, juce::RangedAudioParameter *,
13 std::optional<juce::RangedAudioParameter *>, std::optional<juce::RangedAudioParameter *>,
14 std::optional<juce::RangedAudioParameter *>>;
21 void prepareToPlay(
double sampleRate,
int samplesPerBlock)
override;
22 void releaseResources()
override;
24 bool isBusesLayoutSupported(
const BusesLayout &layouts)
const override;
26 void processBlock(juce::AudioBuffer<float> &, juce::MidiBuffer &)
override;
27 using AudioProcessor::processBlock;
30 juce::AudioProcessorEditor *createEditor()
override;
31 bool hasEditor()
const override;
34 const juce::String getName()
const override;
36 bool acceptsMidi()
const override;
37 bool producesMidi()
const override;
38 bool isMidiEffect()
const override;
39 double getTailLengthSeconds()
const override;
42 int getNumPrograms()
override;
43 int getCurrentProgram()
override;
44 void setCurrentProgram(
int index)
override;
45 const juce::String getProgramName(
int index)
override;
46 void changeProgramName(
int index,
const juce::String &newName)
override;
49 void getStateInformation(juce::MemoryBlock &destData)
override;
50 void setStateInformation(
const void *data,
int sizeInBytes)
override;
52 juce::AudioProcessorValueTreeState::ParameterLayout createParameters();
54 void parameterChanged(
const juce::String ¶meter,
float newValue)
override;
57 juce::AudioProcessorValueTreeState &getVTSParameters()
62 juce::AudioBuffer<float> mAudioBuffer;
63 juce::AbstractFifo mRingBuffer{1};
64 std::atomic<bool> nextFFTBlockReady{
false};
67 juce::AudioProcessorValueTreeState mParameters;
68 std::vector<FilterTuple> mFilters;
69 std::atomic<bool> requiresUpdate{
true};