kopia lustrzana https://github.com/jameshball/osci-render
56 wiersze
2.0 KiB
C++
56 wiersze
2.0 KiB
C++
#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;
|
|
|
|
class Effect {
|
|
public:
|
|
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);
|
|
Effect(const std::vector<EffectParameter*>& parameters);
|
|
Effect(EffectParameter* parameter);
|
|
|
|
OsciPoint apply(int index, OsciPoint input, double volume = 0.0);
|
|
|
|
void apply();
|
|
double getValue(int index);
|
|
double getValue();
|
|
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;
|
|
|
|
private:
|
|
|
|
juce::SpinLock listenerLock;
|
|
std::vector<std::atomic<double>> actualValues;
|
|
int precedence = -1;
|
|
std::atomic<int> sampleRate = 192000;
|
|
EffectApplicationType application;
|
|
|
|
std::shared_ptr<EffectApplication> effectApplication;
|
|
|
|
void animateValues(double volume);
|
|
float nextPhase(EffectParameter* parameter);
|
|
};
|