2023-03-25 20:24:10 +00:00
|
|
|
#pragma once
|
2024-10-23 11:44:31 +00:00
|
|
|
#include "../shape/OsciPoint.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"
|
|
|
|
|
2024-10-23 11:44:31 +00:00
|
|
|
typedef std::function<OsciPoint(int index, OsciPoint input, const std::vector<std::atomic<double>>& values, double sampleRate)> EffectApplicationType;
|
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);
|
2024-01-01 15:09:46 +00:00
|
|
|
Effect(EffectApplicationType application, const std::vector<EffectParameter*>& parameters);
|
|
|
|
Effect(EffectApplicationType application, EffectParameter* parameter);
|
2024-08-10 19:26:56 +00:00
|
|
|
Effect(const std::vector<EffectParameter*>& parameters);
|
|
|
|
Effect(EffectParameter* parameter);
|
2023-03-25 20:24:10 +00:00
|
|
|
|
2024-10-23 11:44:31 +00:00
|
|
|
OsciPoint apply(int index, OsciPoint input, double volume = 0.0);
|
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-12-21 21:33:05 +00:00
|
|
|
void updateSampleRate(int sampleRate);
|
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;
|
2024-08-26 17:09:29 +00:00
|
|
|
std::vector<std::atomic<double>> actualValues;
|
2023-03-28 12:44:46 +00:00
|
|
|
int precedence = -1;
|
2024-11-17 12:18:30 +00:00
|
|
|
std::atomic<int> sampleRate = 192000;
|
2024-01-01 15:09:46 +00:00
|
|
|
EffectApplicationType 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
|
|
|
|
2024-01-01 15:09:46 +00:00
|
|
|
void animateValues(double volume);
|
2023-07-20 20:41:53 +00:00
|
|
|
float nextPhase(EffectParameter* parameter);
|
2023-12-21 21:33:05 +00:00
|
|
|
};
|