osci-render/Source/audio/Effect.h

51 wiersze
1.7 KiB
C
Czysty Zwykły widok Historia

2023-03-25 20:24:10 +00:00
#pragma once
#include "../shape/Vector2.h"
#include <JuceHeader.h>
#include "EffectApplication.h"
#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
Vector2 apply(int index, Vector2 input);
2023-07-20 20:41:53 +00:00
void apply();
double getValue(int index);
double getValue();
2023-08-28 21:06:21 +00:00
double getActualValue(int index);
double getActualValue();
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();
void save(juce::XmlElement* xml);
void load(juce::XmlElement* xml);
EffectParameter* getParameter(juce::String id);
std::vector<EffectParameter*> parameters;
BooleanParameter* enabled;
2023-07-17 13:37:36 +00:00
private:
juce::SpinLock listenerLock;
2023-07-20 20:41:53 +00:00
std::vector<double> actualValues;
int precedence = -1;
int sampleRate = 192000;
std::function<Vector2(int, Vector2, const std::vector<double>&, double)> application;
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
};