#pragma once #include "../shape/Vector2.h" #include #include "EffectApplication.h" #include "EffectParameter.h" #include "BooleanParameter.h" class Effect { public: Effect(std::shared_ptr effectApplication, std::vector parameters); Effect(std::shared_ptr effectApplication, EffectParameter* parameter); Effect(std::function&, double)> application, std::vector parameters); Effect(std::function&, double)> application, EffectParameter* parameter); Vector2 apply(int index, Vector2 input); void apply(); double getValue(int index); double getValue(); void setValue(int index, double value); void setValue(double value); int getPrecedence(); void setPrecedence(int precedence); void addListener(int index, juce::AudioProcessorParameter::Listener* listener); void removeListener(int index, juce::AudioProcessorParameter::Listener* listener); void markEnableable(bool enabled); juce::String getId(); juce::String getName(); std::vector parameters; BooleanParameter* enabled; private: juce::SpinLock listenerLock; std::vector smoothValues; double frequency = 1.0; int precedence = -1; int sampleRate = 192000; std::function&, double)> application; std::shared_ptr effectApplication; };