Add smooth effect

pull/170/head
James Ball 2023-03-28 15:52:51 +01:00
rodzic e6c9cee6b1
commit 4cf64c9654
4 zmienionych plików z 53 dodań i 0 usunięć

Wyświetl plik

@ -13,6 +13,7 @@
#include "audio/RotateEffect.h"
#include "audio/VectorCancellingEffect.h"
#include "audio/DistortEffect.h"
#include "audio/SmoothEffect.h"
//==============================================================================
OscirenderAudioProcessor::OscirenderAudioProcessor()
@ -35,6 +36,7 @@ OscirenderAudioProcessor::OscirenderAudioProcessor()
allEffects.push_back(std::make_shared<Effect>(std::make_unique<VectorCancellingEffect>(), "Vector cancelling", "vectorCancelling"));
allEffects.push_back(std::make_shared<Effect>(std::make_unique<DistortEffect>(true), "Vertical shift", "verticalDistort"));
allEffects.push_back(std::make_shared<Effect>(std::make_unique<DistortEffect>(false), "Horizontal shift", "horizontalDistort"));
allEffects.push_back(std::make_shared<Effect>(std::make_unique<SmoothEffect>(), "Smoothing", "smoothing"));
}
OscirenderAudioProcessor::~OscirenderAudioProcessor()

Wyświetl plik

@ -0,0 +1,32 @@
#include "SmoothEffect.h"
SmoothEffect::SmoothEffect() {
this->window = std::vector<Vector2>(MAX_WINDOW_SIZE);
}
SmoothEffect::~SmoothEffect() {}
Vector2 SmoothEffect::apply(int index, Vector2 input, double value, double frequency, double sampleRate) {
int newWindowSize = (int)(256 * value);
windowSize = std::max(1, std::min(MAX_WINDOW_SIZE, newWindowSize));
window[head++] = input;
if (head >= MAX_WINDOW_SIZE) {
head = 0;
}
double totalX = 0;
double totalY = 0;
int newHead = head - 1;
for (int i = 0; i < windowSize; i++) {
if (newHead < 0) {
newHead = MAX_WINDOW_SIZE - 1;
}
totalX += window[newHead].x;
totalY += window[newHead].y;
newHead--;
}
return Vector2(totalX / windowSize, totalY / windowSize);
}

Wyświetl plik

@ -0,0 +1,16 @@
#pragma once
#include "EffectApplication.h"
#include "../shape/Vector2.h"
class SmoothEffect : public EffectApplication {
public:
SmoothEffect();
~SmoothEffect();
Vector2 apply(int index, Vector2 input, double value, double frequency, double sampleRate) override;
private:
const int MAX_WINDOW_SIZE = 2048;
std::vector<Vector2> window;
int windowSize = 1;
int head = 0;
};

Wyświetl plik

@ -36,6 +36,9 @@
<FILE id="PbbNqz" name="RotateEffect.cpp" compile="1" resource="0"
file="Source/audio/RotateEffect.cpp"/>
<FILE id="tUwNZV" name="RotateEffect.h" compile="0" resource="0" file="Source/audio/RotateEffect.h"/>
<FILE id="iUEfwT" name="SmoothEffect.cpp" compile="1" resource="0"
file="Source/audio/SmoothEffect.cpp"/>
<FILE id="Vwjht7" name="SmoothEffect.h" compile="0" resource="0" file="Source/audio/SmoothEffect.h"/>
<FILE id="VBskjq" name="VectorCancellingEffect.cpp" compile="1" resource="0"
file="Source/audio/VectorCancellingEffect.cpp"/>
<FILE id="Be21D0" name="VectorCancellingEffect.h" compile="0" resource="0"