2023-03-25 20:24:10 +00:00
|
|
|
#pragma once
|
|
|
|
#include "../shape/Vector2.h"
|
2023-03-28 12:12:41 +00:00
|
|
|
#include <JuceHeader.h>
|
2023-03-28 12:44:46 +00:00
|
|
|
#include "EffectApplication.h"
|
2023-07-18 16:25:09 +00:00
|
|
|
#include "EffectParameter.h"
|
|
|
|
#include "BooleanParameter.h"
|
|
|
|
|
2023-03-25 20:24:10 +00:00
|
|
|
|
|
|
|
class Effect {
|
|
|
|
public:
|
2023-12-17 21:32:56 +00:00
|
|
|
Effect(std::shared_ptr<EffectApplication> effectApplication, const std::vector<EffectParameter*>& parameters);
|
|
|
|
Effect(std::shared_ptr<EffectApplication> effectApplication, EffectParameter* parameter);
|
|
|
|
Effect(std::function<Vector2(int, Vector2, const std::vector<double>&, double)> application, const std::vector<EffectParameter*>& parameters);
|
|
|
|
Effect(std::function<Vector2(int, Vector2, const std::vector<double>&, double)> application, EffectParameter* parameter);
|
2023-03-25 20:24:10 +00:00
|
|
|
|
2023-03-28 12:44:46 +00:00
|
|
|
Vector2 apply(int index, Vector2 input);
|
2023-07-20 20:41:53 +00:00
|
|
|
|
2023-07-05 11:02:28 +00:00
|
|
|
void apply();
|
2023-07-11 12:32:52 +00:00
|
|
|
double getValue(int index);
|
2023-03-28 12:44:46 +00:00
|
|
|
double getValue();
|
2023-08-28 21:06:21 +00:00
|
|
|
double getActualValue(int index);
|
|
|
|
double getActualValue();
|
2023-07-11 12:32:52 +00:00
|
|
|
void setValue(int index, double value);
|
2023-03-28 12:44:46 +00:00
|
|
|
void setValue(double value);
|
|
|
|
int getPrecedence();
|
|
|
|
void setPrecedence(int precedence);
|
2023-07-18 17:28:09 +00:00
|
|
|
void addListener(int index, juce::AudioProcessorParameter::Listener* listener);
|
|
|
|
void removeListener(int index, juce::AudioProcessorParameter::Listener* listener);
|
2023-07-18 18:20:54 +00:00
|
|
|
void markEnableable(bool enabled);
|
2023-03-28 12:44:46 +00:00
|
|
|
juce::String getId();
|
2023-07-11 12:32:52 +00:00
|
|
|
juce::String getName();
|
2023-07-25 11:23:27 +00:00
|
|
|
void save(juce::XmlElement* xml);
|
2023-07-25 13:09:21 +00:00
|
|
|
void load(juce::XmlElement* xml);
|
|
|
|
EffectParameter* getParameter(juce::String id);
|
2023-07-11 12:32:52 +00:00
|
|
|
|
2023-07-18 18:20:54 +00:00
|
|
|
std::vector<EffectParameter*> parameters;
|
|
|
|
BooleanParameter* enabled;
|
2023-07-17 13:37:36 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
|
2023-07-18 17:28:09 +00:00
|
|
|
juce::SpinLock listenerLock;
|
2023-07-20 20:41:53 +00:00
|
|
|
std::vector<double> actualValues;
|
2023-03-28 12:44:46 +00:00
|
|
|
int precedence = -1;
|
2023-03-28 13:33:56 +00:00
|
|
|
int sampleRate = 192000;
|
2023-07-14 14:34:24 +00:00
|
|
|
std::function<Vector2(int, Vector2, const std::vector<double>&, double)> application;
|
2023-03-28 12:44:46 +00:00
|
|
|
|
2023-07-11 12:32:52 +00:00
|
|
|
std::shared_ptr<EffectApplication> effectApplication;
|
2023-07-20 20:41:53 +00:00
|
|
|
|
|
|
|
void animateValues();
|
|
|
|
float nextPhase(EffectParameter* parameter);
|
2023-03-25 20:24:10 +00:00
|
|
|
};
|