Add delay effect and refactor effects to allow multiple values per effect

pull/170/head
James Ball 2023-07-11 13:32:52 +01:00
rodzic 67d8e942ad
commit a369adb6ae
22 zmienionych plików z 312 dodań i 207 usunięć

Wyświetl plik

@ -36,13 +36,20 @@ OscirenderAudioProcessor::OscirenderAudioProcessor()
juce::SpinLock::ScopedLockType lock(effectsLock);
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"));
allEffects.push_back(std::make_shared<Effect>(std::make_unique<RotateEffect>(), "2D Rotate Speed", "rotateSpeed"));
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"));
allEffects.push_back(std::make_shared<Effect>(std::make_shared<BitCrushEffect>(), "Bit Crush", "bitCrush"));
allEffects.push_back(std::make_shared<Effect>(std::make_shared<BulgeEffect>(), "Bulge", "bulge"));
allEffects.push_back(std::make_shared<Effect>(std::make_shared<RotateEffect>(), "2D Rotate Speed", "rotateSpeed"));
allEffects.push_back(std::make_shared<Effect>(std::make_shared<VectorCancellingEffect>(), "Vector cancelling", "vectorCancelling"));
allEffects.push_back(std::make_shared<Effect>(std::make_shared<DistortEffect>(true), "Vertical shift", "verticalDistort"));
allEffects.push_back(std::make_shared<Effect>(std::make_shared<DistortEffect>(false), "Horizontal shift", "horizontalDistort"));
allEffects.push_back(std::make_shared<Effect>(std::make_shared<SmoothEffect>(), "Smoothing", "smoothing"));
allEffects.push_back(std::make_shared<Effect>(
delayEffect,
std::vector<EffectDetails>{
EffectDetails{ "Delay Decay", "delayDecay", 0 },
EffectDetails{ "Delay Length", "delayEchoLength", 0.5 }
}
));
allEffects.push_back(traceMax);
allEffects.push_back(traceMin);
@ -166,7 +173,7 @@ void OscirenderAudioProcessor::addLuaSlider() {
sliderNum = (sliderNum - mod) / 26;
}
luaEffects.push_back(std::make_shared<Effect>(std::make_unique<LuaEffect>(sliderName, *this), "Lua " + sliderName, "lua" + sliderName));
luaEffects.push_back(std::make_shared<Effect>(std::make_shared<LuaEffect>(sliderName, *this), "Lua " + sliderName, "lua" + sliderName));
}
// effectsLock should be held when calling this

Wyświetl plik

@ -17,6 +17,7 @@
#include <numbers>
#include "concurrency/BufferProducer.h"
#include "audio/AudioWebSocketServer.h"
#include "audio/DelayEffect.h"
//==============================================================================
/**
@ -77,7 +78,7 @@ public:
std::vector<std::shared_ptr<Effect>> luaEffects;
// TODO see if there is a way to move this code to .cpp
std::function<Vector2(int, Vector2, double, double, int)> onRotationChange = [this](int index, Vector2 input, double value, double frequency, double sampleRate) {
std::function<Vector2(int, Vector2, std::vector<EffectDetails>, double, int)> onRotationChange = [this](int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
if (getCurrentFileIndex() != -1) {
auto obj = getCurrentFileParser()->getObject();
if (obj == nullptr) return input;
@ -91,11 +92,11 @@ public:
};
Effect focalLength{
[this](int index, Vector2 input, double value, double frequency, double sampleRate) {
[this](int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
if (getCurrentFileIndex() != -1) {
auto camera = getCurrentFileParser()->getCamera();
if (camera == nullptr) return input;
camera->setFocalLength(value);
camera->setFocalLength(details[0].value);
}
return input;
},
@ -107,11 +108,11 @@ public:
Effect rotateY{onRotationChange, "Rotate y", "rotateY", 1};
Effect rotateZ{onRotationChange, "Rotate z", "rotateZ", 0};
Effect currentRotateX{
[this](int index, Vector2 input, double value, double frequency, double sampleRate) {
[this](int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
if (getCurrentFileIndex() != -1) {
auto obj = getCurrentFileParser()->getObject();
if (obj == nullptr) return input;
obj->setCurrentRotationX(value * std::numbers::pi);
obj->setCurrentRotationX(details[0].value * std::numbers::pi);
}
return input;
},
@ -120,11 +121,11 @@ public:
0
};
Effect currentRotateY{
[this](int index, Vector2 input, double value, double frequency, double sampleRate) {
[this](int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
if (getCurrentFileIndex() != -1) {
auto obj = getCurrentFileParser()->getObject();
if (obj == nullptr) return input;
obj->setCurrentRotationY(value * std::numbers::pi);
obj->setCurrentRotationY(details[0].value * std::numbers::pi);
}
return input;
},
@ -133,24 +134,24 @@ public:
0
};
Effect currentRotateZ{
[this](int index, Vector2 input, double value, double frequency, double sampleRate) {
[this](int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
if (getCurrentFileIndex() != -1) {
auto obj = getCurrentFileParser()->getObject();
if (obj == nullptr) return input;
obj->setCurrentRotationZ(value * std::numbers::pi);
obj->setCurrentRotationZ(details[0].value * std::numbers::pi);
}
return input;
},
},
"Current Rotate z",
"currentRotateZ",
0
};
Effect rotateSpeed{
[this](int index, Vector2 input, double value, double frequency, double sampleRate) {
[this](int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
if (getCurrentFileIndex() != -1) {
auto obj = getCurrentFileParser()->getObject();
if (obj == nullptr) return input;
obj->setRotationSpeed(value);
obj->setRotationSpeed(details[0].value);
}
return input;
},
@ -161,6 +162,8 @@ public:
std::atomic<bool> fixedRotateX = false;
std::atomic<bool> fixedRotateY = false;
std::atomic<bool> fixedRotateZ = false;
std::shared_ptr<DelayEffect> delayEffect = std::make_shared<DelayEffect>();
juce::SpinLock parsersLock;
std::vector<std::shared_ptr<FileParser>> parsers;
@ -207,7 +210,7 @@ private:
bool invalidateFrameBuffer = false;
std::shared_ptr<Effect> traceMax = std::make_shared<Effect>(
[this](int index, Vector2 input, double value, double frequency, double sampleRate) {
[this](int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
traceMaxEnabled = true;
return input;
},
@ -216,7 +219,7 @@ private:
1
);
std::shared_ptr<Effect> traceMin = std::make_shared<Effect>(
[this](int index, Vector2 input, double value, double frequency, double sampleRate) {
[this](int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
traceMinEnabled = true;
return input;
},

Wyświetl plik

@ -5,7 +5,8 @@ BitCrushEffect::BitCrushEffect() {}
BitCrushEffect::~BitCrushEffect() {}
// algorithm from https://www.kvraudio.com/forum/viewtopic.php?t=163880
Vector2 BitCrushEffect::apply(int index, Vector2 input, double value, double frequency, double sampleRate) {
Vector2 BitCrushEffect::apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
double value = details[0].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;

Wyświetl plik

@ -7,5 +7,5 @@ public:
BitCrushEffect();
~BitCrushEffect();
Vector2 apply(int index, Vector2 input, double value, double frequency, double sampleRate) override;
Vector2 apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) override;
};

Wyświetl plik

@ -4,7 +4,8 @@ BulgeEffect::BulgeEffect() {}
BulgeEffect::~BulgeEffect() {}
Vector2 BulgeEffect::apply(int index, Vector2 input, double value, double frequency, double sampleRate) {
Vector2 BulgeEffect::apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
double value = details[0].value;
double translatedBulge = -value + 1;
double r = input.magnitude();

Wyświetl plik

@ -7,5 +7,5 @@ public:
BulgeEffect();
~BulgeEffect();
Vector2 apply(int index, Vector2 input, double value, double frequency, double sampleRate) override;
Vector2 apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) override;
};

Wyświetl plik

@ -0,0 +1,38 @@
#include "DelayEffect.h"
DelayEffect::DelayEffect() {}
DelayEffect::~DelayEffect() {}
Vector2 DelayEffect::apply(int index, Vector2 vector, std::vector<EffectDetails> details, double frequency, double sampleRate) {
double decay = details[0].value;
double decayLength = details[1].value;
int delayBufferLength = (int)(sampleRate * decayLength);
if (head >= delayBuffer.size()){
head = 0;
}
if (position >= delayBuffer.size()){
position = 0;
}
if (samplesSinceLastDelay >= delayBufferLength) {
samplesSinceLastDelay = 0;
position = head - delayBufferLength;
if (position < 0) {
position += delayBuffer.size();
}
}
Vector2 echo = delayBuffer[position];
vector = Vector2(
vector.x + echo.x * decay,
vector.y + echo.y * decay
);
delayBuffer[head] = vector;
head++;
position++;
samplesSinceLastDelay++;
return vector;
}

Wyświetl plik

@ -0,0 +1,18 @@
#pragma once
#include "EffectApplication.h"
#include "../shape/Vector2.h"
class DelayEffect : public EffectApplication {
public:
DelayEffect();
~DelayEffect();
Vector2 apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) override;
private:
const static int MAX_DELAY = 192000 * 10;
std::vector<Vector2> delayBuffer = std::vector<Vector2>(MAX_DELAY);
int head = 0;
int position = 0;
int samplesSinceLastDelay = 0;
};

Wyświetl plik

@ -4,7 +4,8 @@ DistortEffect::DistortEffect(bool vertical) : vertical(vertical) {}
DistortEffect::~DistortEffect() {}
Vector2 DistortEffect::apply(int index, Vector2 input, double value, double frequency, double sampleRate) {
Vector2 DistortEffect::apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
double value = details[0].value;
int vertical = (int)this->vertical;
if (index % 2 == 0) {
input.translate((1 - vertical) * value, vertical * value);

Wyświetl plik

@ -7,7 +7,7 @@ public:
DistortEffect(bool vertical);
~DistortEffect();
Vector2 apply(int index, Vector2 input, double value, double frequency, double sampleRate) override;
Vector2 apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) override;
private:
bool vertical;
};

Wyświetl plik

@ -1,22 +1,32 @@
#include "Effect.h"
Effect::Effect(std::unique_ptr<EffectApplication> effectApplication, juce::String name, juce::String id) : name(name), id(id) {
this->effectApplication = std::move(effectApplication);
Effect::Effect(std::shared_ptr<EffectApplication> effectApplication, std::vector<EffectDetails> details) : effectApplication(effectApplication), details(details) {}
Effect::Effect(std::function<Vector2(int, Vector2, std::vector<EffectDetails>, double, int)> application, std::vector<EffectDetails> details) : application(application), details(details) {}
Effect::Effect(std::shared_ptr<EffectApplication> effectApplication, juce::String name, juce::String id) {
this->effectApplication = effectApplication;
details = std::vector<EffectDetails>(1, EffectDetails{name, id, 0.0});
}
Effect::Effect(juce::String name, juce::String id) : name(name), id(id) {}
Effect::Effect(juce::String name, juce::String id, double value) {
details = std::vector<EffectDetails>(1, EffectDetails{name, id, value});
}
Effect::Effect(juce::String name, juce::String id, double value) : name(name), id(id), value(value) {}
Effect::Effect(juce::String name, juce::String id) {
details = std::vector<EffectDetails>(1, EffectDetails{name, id, 0.0});
}
Effect::Effect(std::function<Vector2(int, Vector2, double, double, int)> application, juce::String name, juce::String id, double value) : Effect(name, id, value) {
Effect::Effect(std::function<Vector2(int, Vector2, std::vector<EffectDetails> values, double, int)> application, juce::String name, juce::String id, double value) {
details = std::vector<EffectDetails>(1, EffectDetails{name, id, value});
this->application = application;
};
Vector2 Effect::apply(int index, Vector2 input) {
if (application) {
return application(index, input, value, frequency, sampleRate);
return application(index, input, details, frequency, sampleRate);
} else if (effectApplication != nullptr) {
return effectApplication->apply(index, input, value, frequency, sampleRate);
return effectApplication->apply(index, input, details, frequency, sampleRate);
}
return input;
}
@ -25,12 +35,24 @@ void Effect::apply() {
apply(0, Vector2());
}
double Effect::getValue(int index) {
return details[index].value;
}
double Effect::getValue() {
return value;
return getValue(0);
}
std::vector<EffectDetails> Effect::getDetails() {
return details;
}
void Effect::setValue(int index, double value) {
details[index].value = value;
}
void Effect::setValue(double value) {
this->value = value;
setValue(0, value);
}
void Effect::setFrequency(double frequency) {
@ -45,10 +67,10 @@ void Effect::setPrecedence(int precedence) {
this->precedence = precedence;
}
juce::String Effect::getName() {
return name;
juce::String Effect::getId() {
return details[0].id;
}
juce::String Effect::getId() {
return id;
juce::String Effect::getName() {
return details[0].name;
}

Wyświetl plik

@ -5,28 +5,32 @@
class Effect {
public:
Effect(std::unique_ptr<EffectApplication> effectApplication, juce::String name, juce::String id);
Effect(juce::String name, juce::String id);
Effect(std::shared_ptr<EffectApplication> effectApplication, std::vector<EffectDetails> details);
Effect(std::function<Vector2(int, Vector2, std::vector<EffectDetails>, double, int)> application, std::vector<EffectDetails> details);
Effect(std::shared_ptr<EffectApplication> effectApplication, juce::String name, juce::String id);
Effect(juce::String name, juce::String id, double value);
Effect(std::function<Vector2(int, Vector2, double, double, int)> application, juce::String name, juce::String id, double value);
Effect(juce::String name, juce::String id);
Effect(std::function<Vector2(int, Vector2, std::vector<EffectDetails>, double, int)> application, juce::String name, juce::String id, double value);
Vector2 apply(int index, Vector2 input);
void apply();
double getValue(int index);
double getValue();
std::vector<EffectDetails> getDetails();
void setValue(int index, double value);
void setValue(double value);
void setFrequency(double frequency);
int getPrecedence();
void setPrecedence(int precedence);
juce::String getName();
juce::String getId();
juce::String getName();
private:
double value = 0.0;
std::vector<EffectDetails> details;
double frequency = 1.0;
int precedence = -1;
int sampleRate = 192000;
juce::String name;
juce::String id;
std::function<Vector2(int, Vector2, double, double, int)> application;
std::function<Vector2(int, Vector2, std::vector<EffectDetails>, double, int)> application;
std::unique_ptr<EffectApplication> effectApplication;
std::shared_ptr<EffectApplication> effectApplication;
};

Wyświetl plik

@ -2,11 +2,17 @@
#include "../shape/Vector2.h"
#include <JuceHeader.h>
struct EffectDetails {
juce::String name;
juce::String id;
double value;
};
class EffectApplication {
public:
EffectApplication() {};
virtual Vector2 apply(int index, Vector2 input, double value, double frequency, double sampleRate) = 0;
virtual Vector2 apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) = 0;
void resetPhase();
double nextPhase(double frequency, double sampleRate);

Wyświetl plik

@ -1,14 +1,14 @@
#include "LuaEffect.h"
#include "../lua/LuaParser.h"
Vector2 LuaEffect::apply(int index, Vector2 input, double value, double frequency, double sampleRate) {
Vector2 LuaEffect::apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
int fileIndex = audioProcessor.getCurrentFileIndex();
if (fileIndex == -1) {
return input;
}
std::shared_ptr<LuaParser> parser = audioProcessor.getCurrentFileParser()->getLua();
if (parser != nullptr) {
parser->setVariable("slider_" + name.toLowerCase(), value);
parser->setVariable("slider_" + name.toLowerCase(), details[0].value);
}
return input;
}

Wyświetl plik

@ -8,7 +8,7 @@ class LuaEffect : public EffectApplication {
public:
LuaEffect(juce::String name, OscirenderAudioProcessor& p) : audioProcessor(p), name(name) {};
Vector2 apply(int index, Vector2 input, double value, double frequency, double sampleRate) override;
Vector2 apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) override;
private:
OscirenderAudioProcessor& audioProcessor;
juce::String name;

Wyświetl plik

@ -4,7 +4,7 @@ RotateEffect::RotateEffect() {}
RotateEffect::~RotateEffect() {}
Vector2 RotateEffect::apply(int index, Vector2 input, double value, double frequency, double sampleRate) {
input.rotate(nextPhase(value, sampleRate));
Vector2 RotateEffect::apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
input.rotate(nextPhase(details[0].value, sampleRate));
return input;
}

Wyświetl plik

@ -7,5 +7,5 @@ public:
RotateEffect();
~RotateEffect();
Vector2 apply(int index, Vector2 input, double value, double frequency, double sampleRate) override;
Vector2 apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) override;
};

Wyświetl plik

@ -6,7 +6,8 @@ SmoothEffect::SmoothEffect() {
SmoothEffect::~SmoothEffect() {}
Vector2 SmoothEffect::apply(int index, Vector2 input, double value, double frequency, double sampleRate) {
Vector2 SmoothEffect::apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
double value = details[0].value;
int newWindowSize = (int)(256 * value);
windowSize = std::max(1, std::min(MAX_WINDOW_SIZE, newWindowSize));

Wyświetl plik

@ -7,7 +7,7 @@ public:
SmoothEffect();
~SmoothEffect();
Vector2 apply(int index, Vector2 input, double value, double frequency, double sampleRate) override;
Vector2 apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) override;
private:
const int MAX_WINDOW_SIZE = 2048;
std::vector<Vector2> window;

Wyświetl plik

@ -4,7 +4,8 @@ VectorCancellingEffect::VectorCancellingEffect() {}
VectorCancellingEffect::~VectorCancellingEffect() {}
Vector2 VectorCancellingEffect::apply(int index, Vector2 input, double value, double frequency, double sampleRate) {
Vector2 VectorCancellingEffect::apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) {
double value = details[0].value;
if (value < 0.001) {
return input;
}

Wyświetl plik

@ -7,7 +7,7 @@ public:
VectorCancellingEffect();
~VectorCancellingEffect();
Vector2 apply(int index, Vector2 input, double value, double frequency, double sampleRate) override;
Vector2 apply(int index, Vector2 input, std::vector<EffectDetails> details, double frequency, double sampleRate) override;
private:
int lastIndex = 0;
double nextInvert = 0;

Wyświetl plik

@ -26,6 +26,94 @@
</GROUP>
</GROUP>
<GROUP id="{75439074-E50C-362F-1EDF-8B4BE9011259}" name="Source">
<GROUP id="{85A33213-D880-BD92-70D8-1901DA6D23F0}" name="audio">
<FILE id="WDV6eI" name="AudioWebSocketServer.cpp" compile="1" resource="0"
file="Source/audio/AudioWebSocketServer.cpp"/>
<FILE id="RD41Jd" name="AudioWebSocketServer.h" compile="0" resource="0"
file="Source/audio/AudioWebSocketServer.h"/>
<FILE id="NWuowi" name="BitCrushEffect.cpp" compile="1" resource="0"
file="Source/audio/BitCrushEffect.cpp"/>
<FILE id="Bc8UeW" name="BitCrushEffect.h" compile="0" resource="0"
file="Source/audio/BitCrushEffect.h"/>
<FILE id="ATOFA9" name="BulgeEffect.cpp" compile="1" resource="0" file="Source/audio/BulgeEffect.cpp"/>
<FILE id="lOXxYe" name="BulgeEffect.h" compile="0" resource="0" file="Source/audio/BulgeEffect.h"/>
<FILE id="e6SZox" name="DelayEffect.cpp" compile="1" resource="0" file="Source/audio/DelayEffect.cpp"/>
<FILE id="kpI9pv" name="DelayEffect.h" compile="0" resource="0" file="Source/audio/DelayEffect.h"/>
<FILE id="DiIoN4" name="DistortEffect.cpp" compile="1" resource="0"
file="Source/audio/DistortEffect.cpp"/>
<FILE id="ux2dO2" name="DistortEffect.h" compile="0" resource="0" file="Source/audio/DistortEffect.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"/>
<FILE id="uhyh7T" name="LuaEffect.cpp" compile="1" resource="0" file="Source/audio/LuaEffect.cpp"/>
<FILE id="jqDcZq" name="LuaEffect.h" compile="0" resource="0" file="Source/audio/LuaEffect.h"/>
<FILE id="t2bsR8" name="PitchDetector.cpp" compile="1" resource="0"
file="Source/audio/PitchDetector.cpp"/>
<FILE id="rQC2gX" name="PitchDetector.h" compile="0" resource="0" file="Source/audio/PitchDetector.h"/>
<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"
file="Source/audio/VectorCancellingEffect.h"/>
</GROUP>
<GROUP id="{2A41BAF3-5E83-B018-5668-39D89ABFA00C}" name="chinese_postman">
<FILE id="LcDpwe" name="BinaryHeap.cpp" compile="1" resource="0" file="Source/chinese_postman/BinaryHeap.cpp"/>
<FILE id="UYdaXR" name="BinaryHeap.h" compile="0" resource="0" file="Source/chinese_postman/BinaryHeap.h"/>
<FILE id="UnjMQ4" name="ChinesePostman.h" compile="0" resource="0"
file="Source/chinese_postman/ChinesePostman.h"/>
<FILE id="ItJWxN" name="Dijkstra.h" compile="0" resource="0" file="Source/chinese_postman/Dijkstra.h"/>
<FILE id="PFBBHM" name="Example.cpp" compile="1" resource="0" file="Source/chinese_postman/Example.cpp"/>
<FILE id="r66okI" name="Globals.h" compile="0" resource="0" file="Source/chinese_postman/Globals.h"/>
<FILE id="GN3vkN" name="Graph.cpp" compile="1" resource="0" file="Source/chinese_postman/Graph.cpp"/>
<FILE id="tpPZBV" name="Graph.h" compile="0" resource="0" file="Source/chinese_postman/Graph.h"/>
<FILE id="rAjVkN" name="LICENSE" compile="0" resource="1" file="Source/chinese_postman/LICENSE"/>
<FILE id="hz1Tov" name="Matching.cpp" compile="1" resource="0" file="Source/chinese_postman/Matching.cpp"/>
<FILE id="CdKZCg" name="Matching.h" compile="0" resource="0" file="Source/chinese_postman/Matching.h"/>
</GROUP>
<GROUP id="{CD81913A-7F0E-5898-DA77-5EBEB369DEB1}" name="components">
<FILE id="poPVxL" name="DraggableListBox.cpp" compile="1" resource="0"
file="Source/components/DraggableListBox.cpp"/>
<FILE id="Y9NEGn" name="DraggableListBox.h" compile="0" resource="0"
file="Source/components/DraggableListBox.h"/>
<FILE id="xLAEHK" name="EffectComponent.cpp" compile="1" resource="0"
file="Source/components/EffectComponent.cpp"/>
<FILE id="u4UCwb" name="EffectComponent.h" compile="0" resource="0"
file="Source/components/EffectComponent.h"/>
<FILE id="JG4NCF" name="EffectsListComponent.cpp" compile="1" resource="0"
file="Source/components/EffectsListComponent.cpp"/>
<FILE id="dcLchL" name="EffectsListComponent.h" compile="0" resource="0"
file="Source/components/EffectsListComponent.h"/>
<FILE id="qIxm1z" name="LuaListComponent.cpp" compile="1" resource="0"
file="Source/components/LuaListComponent.cpp"/>
<FILE id="x0Syav" name="LuaListComponent.h" compile="0" resource="0"
file="Source/components/LuaListComponent.h"/>
<FILE id="y3UiR0" name="VisualiserComponent.cpp" compile="1" resource="0"
file="Source/components/VisualiserComponent.cpp"/>
<FILE id="ZueyNl" name="VisualiserComponent.h" compile="0" resource="0"
file="Source/components/VisualiserComponent.h"/>
<FILE id="s8EVcE" name="VolumeComponent.cpp" compile="1" resource="0"
file="Source/components/VolumeComponent.cpp"/>
<FILE id="MWkfTv" name="VolumeComponent.h" compile="0" resource="0"
file="Source/components/VolumeComponent.h"/>
</GROUP>
<GROUP id="{9F5970A9-8094-E7F3-7AC1-812AE5589B9F}" name="concurrency">
<FILE id="WQ2W15" name="BufferConsumer.h" compile="0" resource="0"
file="Source/concurrency/BufferConsumer.h"/>
<FILE id="yWTiQQ" name="BufferProducer.h" compile="0" resource="0"
file="Source/concurrency/BufferProducer.h"/>
</GROUP>
<FILE id="I44EdJ" name="EffectsComponent.cpp" compile="1" resource="0"
file="Source/EffectsComponent.cpp"/>
<FILE id="qxxNX3" name="EffectsComponent.h" compile="0" resource="0"
file="Source/EffectsComponent.h"/>
<GROUP id="{D0D95F57-3D9D-46D9-C126-25C3C7459AC5}" name="ixwebsocket">
<FILE id="pPOkoj" name="IXBase64.h" compile="0" resource="0" file="Source/ixwebsocket/IXBase64.h"/>
<FILE id="qVI3x2" name="IXBench.cpp" compile="1" resource="0" file="Source/ixwebsocket/IXBench.cpp"/>
@ -185,19 +273,6 @@
<FILE id="eAqAle" name="IXWebSocketVersion.h" compile="0" resource="0"
file="Source/ixwebsocket/IXWebSocketVersion.h"/>
</GROUP>
<GROUP id="{9F5970A9-8094-E7F3-7AC1-812AE5589B9F}" name="concurrency">
<FILE id="WQ2W15" name="BufferConsumer.h" compile="0" resource="0"
file="Source/concurrency/BufferConsumer.h"/>
<FILE id="yWTiQQ" name="BufferProducer.h" compile="0" resource="0"
file="Source/concurrency/BufferProducer.h"/>
</GROUP>
<FILE id="JceyXh" name="Util.h" compile="0" resource="0" file="Source/Util.h"/>
<FILE id="RHHuXP" name="ObjComponent.cpp" compile="1" resource="0"
file="Source/ObjComponent.cpp"/>
<FILE id="mliVoS" name="ObjComponent.h" compile="0" resource="0" file="Source/ObjComponent.h"/>
<FILE id="X26RjJ" name="LuaComponent.cpp" compile="1" resource="0"
file="Source/LuaComponent.cpp"/>
<FILE id="g5xRHT" name="LuaComponent.h" compile="0" resource="0" file="Source/LuaComponent.h"/>
<GROUP id="{75F6236A-68A5-85DA-EDAE-23D1621601DB}" name="lua">
<FILE id="X5i9iw" name="lapi.c" compile="1" resource="0" file="Source/lua/lapi.c"/>
<FILE id="J62WSE" name="lapi.h" compile="0" resource="0" file="Source/lua/lapi.h"/>
@ -267,76 +342,60 @@
<FILE id="vYPcZP" name="lzio.h" compile="0" resource="0" file="Source/lua/lzio.h"/>
<FILE id="ktpcF1" name="onelua.c" compile="1" resource="0" file="Source/lua/onelua.c"/>
</GROUP>
<GROUP id="{CD81913A-7F0E-5898-DA77-5EBEB369DEB1}" name="components">
<FILE id="poPVxL" name="DraggableListBox.cpp" compile="1" resource="0"
file="Source/components/DraggableListBox.cpp"/>
<FILE id="Y9NEGn" name="DraggableListBox.h" compile="0" resource="0"
file="Source/components/DraggableListBox.h"/>
<FILE id="xLAEHK" name="EffectComponent.cpp" compile="1" resource="0"
file="Source/components/EffectComponent.cpp"/>
<FILE id="u4UCwb" name="EffectComponent.h" compile="0" resource="0"
file="Source/components/EffectComponent.h"/>
<FILE id="JG4NCF" name="EffectsListComponent.cpp" compile="1" resource="0"
file="Source/components/EffectsListComponent.cpp"/>
<FILE id="dcLchL" name="EffectsListComponent.h" compile="0" resource="0"
file="Source/components/EffectsListComponent.h"/>
<FILE id="qIxm1z" name="LuaListComponent.cpp" compile="1" resource="0"
file="Source/components/LuaListComponent.cpp"/>
<FILE id="x0Syav" name="LuaListComponent.h" compile="0" resource="0"
file="Source/components/LuaListComponent.h"/>
<FILE id="y3UiR0" name="VisualiserComponent.cpp" compile="1" resource="0"
file="Source/components/VisualiserComponent.cpp"/>
<FILE id="ZueyNl" name="VisualiserComponent.h" compile="0" resource="0"
file="Source/components/VisualiserComponent.h"/>
<FILE id="s8EVcE" name="VolumeComponent.cpp" compile="1" resource="0"
file="Source/components/VolumeComponent.cpp"/>
<FILE id="MWkfTv" name="VolumeComponent.h" compile="0" resource="0"
file="Source/components/VolumeComponent.h"/>
<FILE id="X26RjJ" name="LuaComponent.cpp" compile="1" resource="0"
file="Source/LuaComponent.cpp"/>
<FILE id="g5xRHT" name="LuaComponent.h" compile="0" resource="0" file="Source/LuaComponent.h"/>
<FILE id="GKBQ8j" name="MainComponent.cpp" compile="1" resource="0"
file="Source/MainComponent.cpp"/>
<FILE id="RU8fGr" name="MainComponent.h" compile="0" resource="0" file="Source/MainComponent.h"/>
<GROUP id="{E6ED85A9-3843-825F-EF48-BCF81E38F8AD}" name="obj">
<FILE id="Tyz6WY" name="Camera.cpp" compile="1" resource="0" file="Source/obj/Camera.cpp"/>
<FILE id="ix12FT" name="Camera.h" compile="0" resource="0" file="Source/obj/Camera.h"/>
<FILE id="JJTNO9" name="Line3D.cpp" compile="1" resource="0" file="Source/obj/Line3D.cpp"/>
<FILE id="TMrur0" name="Line3D.h" compile="0" resource="0" file="Source/obj/Line3D.h"/>
<FILE id="a4ILpa" name="tiny_obj_loader.cpp" compile="1" resource="0"
file="Source/obj/tiny_obj_loader.cpp"/>
<FILE id="YdfYbM" name="tiny_obj_loader.h" compile="0" resource="0"
file="Source/obj/tiny_obj_loader.h"/>
<FILE id="YNsbe9" name="WorldObject.cpp" compile="1" resource="0" file="Source/obj/WorldObject.cpp"/>
<FILE id="SZBVI9" name="WorldObject.h" compile="0" resource="0" file="Source/obj/WorldObject.h"/>
</GROUP>
<GROUP id="{85A33213-D880-BD92-70D8-1901DA6D23F0}" name="audio">
<FILE id="WDV6eI" name="AudioWebSocketServer.cpp" compile="1" resource="0"
file="Source/audio/AudioWebSocketServer.cpp"/>
<FILE id="RD41Jd" name="AudioWebSocketServer.h" compile="0" resource="0"
file="Source/audio/AudioWebSocketServer.h"/>
<FILE id="NWuowi" name="BitCrushEffect.cpp" compile="1" resource="0"
file="Source/audio/BitCrushEffect.cpp"/>
<FILE id="Bc8UeW" name="BitCrushEffect.h" compile="0" resource="0"
file="Source/audio/BitCrushEffect.h"/>
<FILE id="ATOFA9" name="BulgeEffect.cpp" compile="1" resource="0" file="Source/audio/BulgeEffect.cpp"/>
<FILE id="lOXxYe" name="BulgeEffect.h" compile="0" resource="0" file="Source/audio/BulgeEffect.h"/>
<FILE id="DiIoN4" name="DistortEffect.cpp" compile="1" resource="0"
file="Source/audio/DistortEffect.cpp"/>
<FILE id="ux2dO2" name="DistortEffect.h" compile="0" resource="0" file="Source/audio/DistortEffect.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"/>
<FILE id="uhyh7T" name="LuaEffect.cpp" compile="1" resource="0" file="Source/audio/LuaEffect.cpp"/>
<FILE id="jqDcZq" name="LuaEffect.h" compile="0" resource="0" file="Source/audio/LuaEffect.h"/>
<FILE id="t2bsR8" name="PitchDetector.cpp" compile="1" resource="0"
file="Source/audio/PitchDetector.cpp"/>
<FILE id="rQC2gX" name="PitchDetector.h" compile="0" resource="0" file="Source/audio/PitchDetector.h"/>
<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"
file="Source/audio/VectorCancellingEffect.h"/>
<FILE id="RHHuXP" name="ObjComponent.cpp" compile="1" resource="0"
file="Source/ObjComponent.cpp"/>
<FILE id="mliVoS" name="ObjComponent.h" compile="0" resource="0" file="Source/ObjComponent.h"/>
<GROUP id="{2AE40B10-2C85-6401-644A-D5F36BCC5BC1}" name="parser">
<FILE id="q22Fiw" name="FileParser.cpp" compile="1" resource="0" file="Source/parser/FileParser.cpp"/>
<FILE id="HWSJK8" name="FileParser.h" compile="0" resource="0" file="Source/parser/FileParser.h"/>
<FILE id="Yevl42" name="FrameConsumer.h" compile="0" resource="0" file="Source/parser/FrameConsumer.h"/>
<FILE id="Z3mAYx" name="FrameProducer.cpp" compile="1" resource="0"
file="Source/parser/FrameProducer.cpp"/>
<FILE id="JEcNPP" name="FrameProducer.h" compile="0" resource="0" file="Source/parser/FrameProducer.h"/>
<FILE id="hCrVUD" name="FrameSource.h" compile="0" resource="0" file="Source/parser/FrameSource.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"/>
<FILE id="LlefOK" name="TextParser.h" compile="0" resource="0" file="Source/txt/TextParser.h"/>
</GROUP>
<GROUP id="{022CB910-9A16-C4AE-4C3B-9CB57BE87FC2}" name="xml">
<FILE id="pW7WRh" name="pugiconfig.hpp" compile="0" resource="0" file="Source/xml/pugiconfig.hpp"/>
<FILE id="CnkgyF" name="pugixml.cpp" compile="1" resource="0" file="Source/xml/pugixml.cpp"/>
<FILE id="SrvH3B" name="pugixml.hpp" compile="0" resource="0" file="Source/xml/pugixml.hpp"/>
<FILE id="GF4uFx" name="PluginEditor.cpp" compile="1" resource="0"
file="Source/PluginEditor.cpp"/>
<FILE id="iySMgE" name="PluginEditor.h" compile="0" resource="0" file="Source/PluginEditor.h"/>
<FILE id="N4YgAT" name="PluginProcessor.cpp" compile="1" resource="0"
file="Source/PluginProcessor.cpp"/>
<FILE id="G4mTsK" name="PluginProcessor.h" compile="0" resource="0"
file="Source/PluginProcessor.h"/>
<GROUP id="{92CEA658-C82C-9CEB-15EB-945EF6B6B5C8}" name="shape">
<FILE id="iglTFG" name="CircleArc.cpp" compile="1" resource="0" file="Source/shape/CircleArc.cpp"/>
<FILE id="T3S8Sg" name="CircleArc.h" compile="0" resource="0" file="Source/shape/CircleArc.h"/>
<FILE id="G5fbub" name="Shape.cpp" compile="1" resource="0" file="Source/shape/Shape.cpp"/>
<FILE id="Dbvew2" name="CubicBezierCurve.cpp" compile="1" resource="0"
file="Source/shape/CubicBezierCurve.cpp"/>
<FILE id="pMyu9y" name="CubicBezierCurve.h" compile="0" resource="0"
file="Source/shape/CubicBezierCurve.h"/>
<FILE id="bGS2Fh" name="QuadraticBezierCurve.cpp" compile="1" resource="0"
file="Source/shape/QuadraticBezierCurve.cpp"/>
<FILE id="kdWF0N" name="QuadraticBezierCurve.h" compile="0" resource="0"
file="Source/shape/QuadraticBezierCurve.h"/>
<FILE id="W19EPg" name="Line.cpp" compile="1" resource="0" file="Source/shape/Line.cpp"/>
<FILE id="i1A2s1" name="Line.h" compile="0" resource="0" file="Source/shape/Line.h"/>
<FILE id="nUpro8" name="Vector2.cpp" compile="1" resource="0" file="Source/shape/Vector2.cpp"/>
<FILE id="X6A0jk" name="Vector2.h" compile="0" resource="0" file="Source/shape/Vector2.h"/>
<FILE id="NmptSY" name="Shape.h" compile="0" resource="0" file="Source/shape/Shape.h"/>
</GROUP>
<GROUP id="{56A27063-1FE7-31C3-8263-98389240A8CB}" name="svg">
<FILE id="FVWkba" name="ClosePath.cpp" compile="1" resource="0" file="Source/svg/ClosePath.cpp"/>
@ -356,73 +415,16 @@
<FILE id="OvloZU" name="SvgState.cpp" compile="1" resource="0" file="Source/svg/SvgState.cpp"/>
<FILE id="GCBO9x" name="SvgState.h" compile="0" resource="0" file="Source/svg/SvgState.h"/>
</GROUP>
<GROUP id="{2A41BAF3-5E83-B018-5668-39D89ABFA00C}" name="chinese_postman">
<FILE id="LcDpwe" name="BinaryHeap.cpp" compile="1" resource="0" file="Source/chinese_postman/BinaryHeap.cpp"/>
<FILE id="UYdaXR" name="BinaryHeap.h" compile="0" resource="0" file="Source/chinese_postman/BinaryHeap.h"/>
<FILE id="UnjMQ4" name="ChinesePostman.h" compile="0" resource="0"
file="Source/chinese_postman/ChinesePostman.h"/>
<FILE id="ItJWxN" name="Dijkstra.h" compile="0" resource="0" file="Source/chinese_postman/Dijkstra.h"/>
<FILE id="PFBBHM" name="Example.cpp" compile="1" resource="0" file="Source/chinese_postman/Example.cpp"/>
<FILE id="r66okI" name="Globals.h" compile="0" resource="0" file="Source/chinese_postman/Globals.h"/>
<FILE id="GN3vkN" name="Graph.cpp" compile="1" resource="0" file="Source/chinese_postman/Graph.cpp"/>
<FILE id="tpPZBV" name="Graph.h" compile="0" resource="0" file="Source/chinese_postman/Graph.h"/>
<FILE id="rAjVkN" name="LICENSE" compile="0" resource="1" file="Source/chinese_postman/LICENSE"/>
<FILE id="hz1Tov" name="Matching.cpp" compile="1" resource="0" file="Source/chinese_postman/Matching.cpp"/>
<FILE id="CdKZCg" name="Matching.h" compile="0" resource="0" file="Source/chinese_postman/Matching.h"/>
<GROUP id="{E81B1D7B-B0F7-1967-B271-71B3F838720F}" name="txt">
<FILE id="vIYWRG" name="TextParser.cpp" compile="1" resource="0" file="Source/txt/TextParser.cpp"/>
<FILE id="LlefOK" name="TextParser.h" compile="0" resource="0" file="Source/txt/TextParser.h"/>
</GROUP>
<GROUP id="{92CEA658-C82C-9CEB-15EB-945EF6B6B5C8}" name="shape">
<FILE id="iglTFG" name="CircleArc.cpp" compile="1" resource="0" file="Source/shape/CircleArc.cpp"/>
<FILE id="T3S8Sg" name="CircleArc.h" compile="0" resource="0" file="Source/shape/CircleArc.h"/>
<FILE id="G5fbub" name="Shape.cpp" compile="1" resource="0" file="Source/shape/Shape.cpp"/>
<FILE id="Dbvew2" name="CubicBezierCurve.cpp" compile="1" resource="0"
file="Source/shape/CubicBezierCurve.cpp"/>
<FILE id="pMyu9y" name="CubicBezierCurve.h" compile="0" resource="0"
file="Source/shape/CubicBezierCurve.h"/>
<FILE id="bGS2Fh" name="QuadraticBezierCurve.cpp" compile="1" resource="0"
file="Source/shape/QuadraticBezierCurve.cpp"/>
<FILE id="kdWF0N" name="QuadraticBezierCurve.h" compile="0" resource="0"
file="Source/shape/QuadraticBezierCurve.h"/>
<FILE id="W19EPg" name="Line.cpp" compile="1" resource="0" file="Source/shape/Line.cpp"/>
<FILE id="i1A2s1" name="Line.h" compile="0" resource="0" file="Source/shape/Line.h"/>
<FILE id="nUpro8" name="Vector2.cpp" compile="1" resource="0" file="Source/shape/Vector2.cpp"/>
<FILE id="X6A0jk" name="Vector2.h" compile="0" resource="0" file="Source/shape/Vector2.h"/>
<FILE id="NmptSY" name="Shape.h" compile="0" resource="0" file="Source/shape/Shape.h"/>
<FILE id="JceyXh" name="Util.h" compile="0" resource="0" file="Source/Util.h"/>
<GROUP id="{022CB910-9A16-C4AE-4C3B-9CB57BE87FC2}" name="xml">
<FILE id="pW7WRh" name="pugiconfig.hpp" compile="0" resource="0" file="Source/xml/pugiconfig.hpp"/>
<FILE id="CnkgyF" name="pugixml.cpp" compile="1" resource="0" file="Source/xml/pugixml.cpp"/>
<FILE id="SrvH3B" name="pugixml.hpp" compile="0" resource="0" file="Source/xml/pugixml.hpp"/>
</GROUP>
<GROUP id="{2AE40B10-2C85-6401-644A-D5F36BCC5BC1}" name="parser">
<FILE id="q22Fiw" name="FileParser.cpp" compile="1" resource="0" file="Source/parser/FileParser.cpp"/>
<FILE id="HWSJK8" name="FileParser.h" compile="0" resource="0" file="Source/parser/FileParser.h"/>
<FILE id="Yevl42" name="FrameConsumer.h" compile="0" resource="0" file="Source/parser/FrameConsumer.h"/>
<FILE id="Z3mAYx" name="FrameProducer.cpp" compile="1" resource="0"
file="Source/parser/FrameProducer.cpp"/>
<FILE id="JEcNPP" name="FrameProducer.h" compile="0" resource="0" file="Source/parser/FrameProducer.h"/>
<FILE id="hCrVUD" name="FrameSource.h" compile="0" resource="0" file="Source/parser/FrameSource.h"/>
</GROUP>
<GROUP id="{E6ED85A9-3843-825F-EF48-BCF81E38F8AD}" name="obj">
<FILE id="Tyz6WY" name="Camera.cpp" compile="1" resource="0" file="Source/obj/Camera.cpp"/>
<FILE id="ix12FT" name="Camera.h" compile="0" resource="0" file="Source/obj/Camera.h"/>
<FILE id="JJTNO9" name="Line3D.cpp" compile="1" resource="0" file="Source/obj/Line3D.cpp"/>
<FILE id="TMrur0" name="Line3D.h" compile="0" resource="0" file="Source/obj/Line3D.h"/>
<FILE id="a4ILpa" name="tiny_obj_loader.cpp" compile="1" resource="0"
file="Source/obj/tiny_obj_loader.cpp"/>
<FILE id="YdfYbM" name="tiny_obj_loader.h" compile="0" resource="0"
file="Source/obj/tiny_obj_loader.h"/>
<FILE id="YNsbe9" name="WorldObject.cpp" compile="1" resource="0" file="Source/obj/WorldObject.cpp"/>
<FILE id="SZBVI9" name="WorldObject.h" compile="0" resource="0" file="Source/obj/WorldObject.h"/>
</GROUP>
<FILE id="GKBQ8j" name="MainComponent.cpp" compile="1" resource="0"
file="Source/MainComponent.cpp"/>
<FILE id="RU8fGr" name="MainComponent.h" compile="0" resource="0" file="Source/MainComponent.h"/>
<FILE id="I44EdJ" name="EffectsComponent.cpp" compile="1" resource="0"
file="Source/EffectsComponent.cpp"/>
<FILE id="qxxNX3" name="EffectsComponent.h" compile="0" resource="0"
file="Source/EffectsComponent.h"/>
<FILE id="N4YgAT" name="PluginProcessor.cpp" compile="1" resource="0"
file="Source/PluginProcessor.cpp"/>
<FILE id="G4mTsK" name="PluginProcessor.h" compile="0" resource="0"
file="Source/PluginProcessor.h"/>
<FILE id="GF4uFx" name="PluginEditor.cpp" compile="1" resource="0"
file="Source/PluginEditor.cpp"/>
<FILE id="iySMgE" name="PluginEditor.h" compile="0" resource="0" file="Source/PluginEditor.h"/>
</GROUP>
</MAINGROUP>
<JUCEOPTIONS JUCE_STRICT_REFCOUNTEDPOINTER="1" JUCE_VST3_CAN_REPLACE_VST2="0"/>