kopia lustrzana https://github.com/jameshball/osci-render
Significantly reduce required code for adding effects
rodzic
3056ae3997
commit
a032a16b66
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
|
@ -0,0 +1 @@
|
|||
#include "EffectApplication.h"
|
|
@ -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;
|
||||
};
|
|
@ -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"/>
|
||||
|
|
Ładowanie…
Reference in New Issue