Significantly reduce required code for adding effects

pull/170/head
James Ball 2023-03-28 13:44:46 +01:00
rodzic 3056ae3997
commit a032a16b66
12 zmienionych plików z 80 dodań i 105 usunięć

Wyświetl plik

@ -9,7 +9,7 @@ EffectsComponent::EffectsComponent(OscirenderAudioProcessor& p) : audioProcessor
frequency.slider.setRange(0.0, 12000.0);
frequency.slider.setSkewFactorFromMidPoint(500.0);
frequency.slider.setTextValueSuffix("Hz");
frequency.slider.setValue(440.0);
frequency.slider.setValue(audioProcessor.frequency, juce::dontSendNotification);
frequency.slider.onValueChange = [this] {
audioProcessor.frequency = frequency.slider.getValue();
@ -21,7 +21,7 @@ EffectsComponent::EffectsComponent(OscirenderAudioProcessor& p) : audioProcessor
auto effects = audioProcessor.allEffects;
for (int i = 0; i < effects.size(); i++) {
auto effect = effects[i];
effect->setValue(0.5);
effect->setValue(effect->getValue());
audioProcessor.enableEffect(effect);
itemData.data.push_back(effect);
}

Wyświetl plik

@ -26,8 +26,8 @@ OscirenderAudioProcessor::OscirenderAudioProcessor()
, producer(std::make_unique<FrameProducer>(*this, parser)) {
producer->startThread();
allEffects.push_back(std::make_shared<BitCrushEffect>());
allEffects.push_back(std::make_shared<BulgeEffect>());
allEffects.push_back(std::make_shared<Effect>(std::make_unique<BitCrushEffect>(), "Bit Crush", "bitCrush"));
allEffects.push_back(std::make_shared<Effect>(std::make_unique<BulgeEffect>(), "Bulge", "bulge"));
}
OscirenderAudioProcessor::~OscirenderAudioProcessor()

Wyświetl plik

@ -65,7 +65,7 @@ public:
void setStateInformation (const void* data, int sizeInBytes) override;
float noteOnVel;
float frequency = 0.0f;
float frequency = 440.0f;
double currentSampleRate = 0.0;

Wyświetl plik

@ -5,7 +5,7 @@ BitCrushEffect::BitCrushEffect() {}
BitCrushEffect::~BitCrushEffect() {}
// algorithm from https://www.kvraudio.com/forum/viewtopic.php?t=163880
Vector2 BitCrushEffect::apply(int index, Vector2 input) {
Vector2 BitCrushEffect::apply(int index, Vector2 input, double value) {
// change rage of value from 0-1 to 0.0-0.78
double rangedValue = value * 0.78;
double powValue = pow(2.0f, 1.0 - rangedValue) - 1.0;
@ -15,31 +15,3 @@ Vector2 BitCrushEffect::apply(int index, Vector2 input) {
double dequant = 1.0f / quant;
return Vector2(dequant * (int)(input.x * quant), dequant * (int)(input.y * quant));
}
double BitCrushEffect::getValue() {
return value;
}
void BitCrushEffect::setValue(double value) {
this->value = value;
}
void BitCrushEffect::setFrequency(double frequency) {
this->frequency = frequency;
}
int BitCrushEffect::getPrecedence() {
return precedence;
}
void BitCrushEffect::setPrecedence(int precedence) {
this->precedence = precedence;
}
juce::String BitCrushEffect::getName() {
return juce::String("Bit Crush");
}
juce::String BitCrushEffect::getId() {
return juce::String("bitCrush");
}

Wyświetl plik

@ -1,23 +1,11 @@
#pragma once
#include "Effect.h"
#include "EffectApplication.h"
#include "../shape/Vector2.h"
class BitCrushEffect : public Effect {
class BitCrushEffect : public EffectApplication {
public:
BitCrushEffect();
~BitCrushEffect();
Vector2 apply(int index, Vector2 input) override;
double getValue() override;
void setValue(double value) override;
void setFrequency(double frequency) override;
int getPrecedence() override;
void setPrecedence(int precedence) override;
juce::String getName() override;
juce::String getId() override;
private:
double value = 0.0;
double frequency = 1.0;
int precedence = -1;
Vector2 apply(int index, Vector2 input, double value) override;
};

Wyświetl plik

@ -4,7 +4,7 @@ BulgeEffect::BulgeEffect() {}
BulgeEffect::~BulgeEffect() {}
Vector2 BulgeEffect::apply(int index, Vector2 input) {
Vector2 BulgeEffect::apply(int index, Vector2 input, double value) {
double translatedBulge = -value + 1;
double r = input.magnitude();
@ -13,31 +13,3 @@ Vector2 BulgeEffect::apply(int index, Vector2 input) {
return Vector2(rn * cos(theta), rn * sin(theta));
}
double BulgeEffect::getValue() {
return value;
}
void BulgeEffect::setValue(double value) {
this->value = value;
}
void BulgeEffect::setFrequency(double frequency) {
this->frequency = frequency;
}
int BulgeEffect::getPrecedence() {
return precedence;
}
void BulgeEffect::setPrecedence(int precedence) {
this->precedence = precedence;
}
juce::String BulgeEffect::getName() {
return juce::String("Bulge");
}
juce::String BulgeEffect::getId() {
return juce::String("bulge");
}

Wyświetl plik

@ -1,23 +1,11 @@
#pragma once
#include "Effect.h"
#include "EffectApplication.h"
#include "../shape/Vector2.h"
class BulgeEffect : public Effect {
class BulgeEffect : public EffectApplication {
public:
BulgeEffect();
~BulgeEffect();
Vector2 apply(int index, Vector2 input) override;
double getValue() override;
void setValue(double value) override;
void setFrequency(double frequency) override;
int getPrecedence() override;
void setPrecedence(int precedence) override;
juce::String getName() override;
juce::String getId() override;
private:
double value = 0.0;
double frequency = 1.0;
int precedence = -1;
Vector2 apply(int index, Vector2 input, double value) override;
};

Wyświetl plik

@ -1,6 +1,37 @@
#include "Effect.h"
Effect::Effect() {
Effect::Effect(std::unique_ptr<EffectApplication> effectApplication, juce::String name, juce::String id) : name(name), id(id) {
this->effectApplication = std::move(effectApplication);
}
Vector2 Effect::apply(int index, Vector2 input) {
return effectApplication->apply(index, input, value);
}
double Effect::getValue() {
return value;
}
void Effect::setValue(double value) {
this->value = value;
}
void Effect::setFrequency(double frequency) {
this->frequency = frequency;
}
int Effect::getPrecedence() {
return precedence;
}
void Effect::setPrecedence(int precedence) {
this->precedence = precedence;
}
juce::String Effect::getName() {
return name;
}
juce::String Effect::getId() {
return id;
}

Wyświetl plik

@ -1,17 +1,26 @@
#pragma once
#include "../shape/Vector2.h"
#include <JuceHeader.h>
#include "EffectApplication.h"
class Effect {
public:
Effect();
Effect(std::unique_ptr<EffectApplication> effectApplication, juce::String name, juce::String id);
virtual Vector2 apply(int index, Vector2 input) = 0;
virtual double getValue() = 0;
virtual void setValue(double value) = 0;
virtual void setFrequency(double frequency) = 0;
virtual int getPrecedence() = 0;
virtual void setPrecedence(int precedence) = 0;
virtual juce::String getName() = 0;
virtual juce::String getId() = 0;
Vector2 apply(int index, Vector2 input);
double getValue();
void setValue(double value);
void setFrequency(double frequency);
int getPrecedence();
void setPrecedence(int precedence);
juce::String getName();
juce::String getId();
private:
double value = 0.0;
double frequency = 1.0;
int precedence = -1;
juce::String name;
juce::String id;
std::unique_ptr<EffectApplication> effectApplication;
};

Wyświetl plik

@ -0,0 +1 @@
#include "EffectApplication.h"

Wyświetl plik

@ -0,0 +1,10 @@
#pragma once
#include "../shape/Vector2.h"
#include <JuceHeader.h>
class EffectApplication {
public:
EffectApplication() {};
virtual Vector2 apply(int index, Vector2 input, double value) = 0;
};

Wyświetl plik

@ -26,6 +26,10 @@
<FILE id="lOXxYe" name="BulgeEffect.h" compile="0" resource="0" file="Source/audio/BulgeEffect.h"/>
<FILE id="mP5lpY" name="Effect.cpp" compile="1" resource="0" file="Source/audio/Effect.cpp"/>
<FILE id="LKeNnY" name="Effect.h" compile="0" resource="0" file="Source/audio/Effect.h"/>
<FILE id="ca2VrC" name="EffectApplication.cpp" compile="1" resource="0"
file="Source/audio/EffectApplication.cpp"/>
<FILE id="MIYJ9y" name="EffectApplication.h" compile="0" resource="0"
file="Source/audio/EffectApplication.h"/>
</GROUP>
<GROUP id="{E81B1D7B-B0F7-1967-B271-71B3F838720F}" name="txt">
<FILE id="vIYWRG" name="TextParser.cpp" compile="1" resource="0" file="Source/txt/TextParser.cpp"/>