osci-render/Source/audio/Effect.h

56 wiersze
2.0 KiB
C
Czysty Zwykły widok Historia

2023-03-25 20:24:10 +00:00
#pragma once
#include "../shape/OsciPoint.h"
#include <JuceHeader.h>
#include "EffectApplication.h"
#include "EffectParameter.h"
#include "BooleanParameter.h"
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);
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
OsciPoint apply(int index, OsciPoint input, double volume = 0.0);
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);
void updateSampleRate(int sampleRate);
std::vector<EffectParameter*> parameters;
BooleanParameter* enabled;
2023-07-17 13:37:36 +00:00
private:
juce::SpinLock listenerLock;
std::vector<std::atomic<double>> actualValues;
int precedence = -1;
2024-11-17 12:18:30 +00:00
std::atomic<int> sampleRate = 192000;
EffectApplicationType application;
std::shared_ptr<EffectApplication> effectApplication;
2023-07-20 20:41:53 +00:00
void animateValues(double volume);
2023-07-20 20:41:53 +00:00
float nextPhase(EffectParameter* parameter);
};