Fix bugs post-refactor and improve quality of wide blur

pull/261/head
James H Ball 2024-12-14 20:42:35 +00:00 zatwierdzone przez James H Ball
rodzic 6e86f97649
commit cc3dae4267
14 zmienionych plików z 127 dodań i 175 usunięć

Wyświetl plik

@ -2,7 +2,7 @@
#include "CommonPluginEditor.h"
#include <juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h>
CommonPluginEditor::CommonPluginEditor(CommonAudioProcessor& p, juce::String appName, juce::String projectFileType)
CommonPluginEditor::CommonPluginEditor(CommonAudioProcessor& p, juce::String appName, juce::String projectFileType, int width, int height)
: AudioProcessorEditor(&p), audioProcessor(p), appName(appName), projectFileType(projectFileType)
{
if (!applicationFolder.exists()) {
@ -60,7 +60,7 @@ CommonPluginEditor::CommonPluginEditor(CommonAudioProcessor& p, juce::String app
menuBar.toFront(true);
setSize(700, 750);
setSize(width, height);
setResizable(true, true);
setResizeLimits(250, 250, 999999, 999999);

Wyświetl plik

@ -10,7 +10,7 @@
class CommonPluginEditor : public juce::AudioProcessorEditor {
public:
CommonPluginEditor(CommonAudioProcessor&, juce::String appName, juce::String projectFileType);
CommonPluginEditor(CommonAudioProcessor&, juce::String appName, juce::String projectFileType, int width, int height);
~CommonPluginEditor() override;
void initialiseMenuBar(juce::MenuBarModel& menuBarModel);

Wyświetl plik

@ -126,6 +126,7 @@ MainComponent::MainComponent(OscirenderAudioProcessor& p, OscirenderAudioProcess
BooleanParameter* visualiserFullScreen = audioProcessor.visualiserParameters.visualiserFullScreen;
addAndMakeVisible(pluginEditor.visualiser);
pluginEditor.visualiser.setFullScreenCallback([this, visualiserFullScreen](FullScreenMode mode) {
if (mode == FullScreenMode::TOGGLE) {
visualiserFullScreen->setBoolValueNotifyingHost(!visualiserFullScreen->getBoolValue());
@ -142,8 +143,6 @@ MainComponent::MainComponent(OscirenderAudioProcessor& p, OscirenderAudioProcess
resized();
repaint();
});
addAndMakeVisible(recorder);
}
MainComponent::~MainComponent() {}
@ -169,9 +168,6 @@ void MainComponent::resized() {
auto buttonHeight = 30;
auto padding = 10;
auto rowPadding = 10;
recorder.setBounds(bounds.removeFromBottom(30));
bounds.removeFromBottom(padding);
auto row = bounds.removeFromTop(buttonHeight);
fileButton.setBounds(row.removeFromLeft(buttonWidth));
@ -212,6 +208,7 @@ void MainComponent::resized() {
createFile.setBounds(row.removeFromLeft(buttonWidth));
bounds.removeFromTop(padding);
bounds.expand(10, 0);
if (!audioProcessor.visualiserParameters.visualiserFullScreen->getBoolValue()) {
auto minDim = juce::jmin(bounds.getWidth(), bounds.getHeight());
juce::Point<int> localTopLeft = {bounds.getX(), bounds.getY()};

Wyświetl plik

@ -8,7 +8,6 @@
#include "audio/PitchDetector.h"
#include "UGen/ugen_JuceEnvelopeComponent.h"
#include "components/SvgButton.h"
#include "components/AudioRecordingComponent.h"
class OscirenderAudioProcessorEditor;
class MainComponent : public juce::GroupComponent {
@ -38,7 +37,5 @@ private:
juce::ComboBox fileType;
juce::TextButton createFile{"Create File"};
AudioRecordingComponent recorder{audioProcessor};
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MainComponent)
};

Wyświetl plik

@ -3,7 +3,7 @@
#include <juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h>
OscirenderAudioProcessorEditor::OscirenderAudioProcessorEditor(OscirenderAudioProcessor& p)
: CommonPluginEditor(p, "osci-render", "osci"), audioProcessor(p), collapseButton("Collapse", juce::Colours::white, juce::Colours::white, juce::Colours::white) {
: CommonPluginEditor(p, "osci-render", "osci", 1100, 750), audioProcessor(p), collapseButton("Collapse", juce::Colours::white, juce::Colours::white, juce::Colours::white) {
addAndMakeVisible(volume);
addAndMakeVisible(console);
@ -66,6 +66,7 @@ OscirenderAudioProcessorEditor::OscirenderAudioProcessorEditor(OscirenderAudioPr
}
OscirenderAudioProcessorEditor::~OscirenderAudioProcessorEditor() {
menuBar.setModel(nullptr);
juce::MessageManagerLock lock;
audioProcessor.broadcaster.removeChangeListener(this);
audioProcessor.fileChangeBroadcaster.removeChangeListener(this);

Wyświetl plik

@ -2,11 +2,15 @@
#include "SosciPluginEditor.h"
#include <juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h>
SosciPluginEditor::SosciPluginEditor(SosciAudioProcessor& p) : CommonPluginEditor(p, "sosci", "sosci"), audioProcessor(p) {
SosciPluginEditor::SosciPluginEditor(SosciAudioProcessor& p) : CommonPluginEditor(p, "sosci", "sosci", 700, 750), audioProcessor(p) {
initialiseMenuBar(model);
resized();
}
SosciPluginEditor::~SosciPluginEditor() {
menuBar.setModel(nullptr);
}
void SosciPluginEditor::paint(juce::Graphics& g) {
g.fillAll(Colours::veryDark);
}

Wyświetl plik

@ -12,6 +12,7 @@
class SosciPluginEditor : public CommonPluginEditor {
public:
SosciPluginEditor(SosciAudioProcessor&);
~SosciPluginEditor() override;
void paint(juce::Graphics&) override;
void resized() override;

Wyświetl plik

@ -1,132 +0,0 @@
#pragma once
#include "DoubleTextBox.h"
#include "../audio/AudioRecorder.h"
class AudioRecordingComponent final : public juce::Component {
public:
AudioRecordingComponent(OscirenderAudioProcessor& p) : audioProcessor(p) {
addAndMakeVisible(recordButton);
addAndMakeVisible(timedRecord);
addAndMakeVisible(recordLength);
recordButton.setTooltip("Start recording audio to a WAV file. Press again to stop and save the recording.");
timedRecord.setTooltip("Record for a set amount of time in seconds. When enabled, the recording will automatically stop once the time is reached.");
recordLength.setValue(1);
recordButton.setPulseAnimation(true);
recordButton.onClick = [this] {
if (recordButton.getToggleState()) {
startRecording();
} else {
stopRecording();
}
};
timedRecord.onClick = [this] {
if (timedRecord.getToggleState()) {
addAndMakeVisible(recordLength);
} else {
removeChildComponent(&recordLength);
}
resized();
};
recorder.stopCallback = [this] {
juce::MessageManager::callAsync([this] {
recordButton.setToggleState(false, juce::sendNotification);
});
};
audioProcessor.setAudioThreadCallback([this](const juce::AudioBuffer<float>& buffer) { recorder.audioThreadCallback(buffer); });
}
~AudioRecordingComponent() {
audioProcessor.setAudioThreadCallback(nullptr);
}
void resized() override {
double iconSize = 25;
auto area = getLocalBounds();
recordButton.setBounds(area.removeFromLeft(iconSize).withSizeKeepingCentre(iconSize, iconSize));
area.removeFromLeft(5);
timedRecord.setBounds(area.removeFromLeft(iconSize).withSizeKeepingCentre(iconSize, iconSize));
if (timedRecord.getToggleState()) {
recordLength.setBounds(area.removeFromLeft(80).withSizeKeepingCentre(60, 25));
}
area.removeFromLeft(5);
}
private:
OscirenderAudioProcessor& audioProcessor;
AudioRecorder recorder;
SvgButton recordButton{ "record", BinaryData::record_svg, juce::Colours::red, juce::Colours::red.withAlpha(0.01f) };
juce::File lastRecording;
juce::FileChooser chooser { "Output file...", juce::File::getCurrentWorkingDirectory().getChildFile("recording.wav"), "*.wav" };
SvgButton timedRecord{ "timedRecord", BinaryData::timer_svg, juce::Colours::white, juce::Colours::red };
DoubleTextBox recordLength{ 0, 60 * 60 * 24 };
void startRecording() {
auto parentDir = juce::File::getSpecialLocation(juce::File::tempDirectory);
lastRecording = parentDir.getNonexistentChildFile("osci-render-recording", ".wav");
if (timedRecord.getToggleState()) {
recorder.setRecordLength(recordLength.getValue());
} else {
recorder.setRecordLength(99999999999.0);
}
recorder.startRecording(lastRecording);
recordButton.setColour(juce::TextButton::buttonColourId, juce::Colours::red);
recordButton.setColour(juce::TextButton::textColourOnId, juce::Colours::black);
}
void stopRecording() {
recorder.stop();
recordButton.setColour(juce::TextButton::buttonColourId, findColour(juce::TextButton::buttonColourId));
recordButton.setColour(juce::TextButton::textColourOnId, findColour(juce::TextButton::textColourOnId));
chooser.launchAsync(juce::FileBrowserComponent::saveMode
| juce::FileBrowserComponent::canSelectFiles
| juce::FileBrowserComponent::warnAboutOverwriting,
[this](const juce::FileChooser& c) {
if (juce::FileInputStream inputStream(lastRecording); inputStream.openedOk()) {
juce::URL url = c.getURLResult();
if (url.isLocalFile()) {
if (const auto outputStream = url.getLocalFile().createOutputStream()) {
outputStream->setPosition(0);
outputStream->truncate();
outputStream->writeFromInputStream(inputStream, -1);
}
}
}
lastRecording.deleteFile();
});
}
inline juce::Colour getUIColourIfAvailable(juce::LookAndFeel_V4::ColourScheme::UIColour uiColour, juce::Colour fallback = juce::Colour(0xff4d4d4d)) noexcept {
if (auto* v4 = dynamic_cast<juce::LookAndFeel_V4*> (&juce::LookAndFeel::getDefaultLookAndFeel()))
return v4->getCurrentColourScheme().getUIColour(uiColour);
return fallback;
}
inline std::unique_ptr<juce::OutputStream> makeOutputStream(const juce::URL& url) {
if (const auto doc = juce::AndroidDocument::fromDocument(url))
return doc.createOutputStream();
#if ! JUCE_IOS
if (url.isLocalFile())
return url.getLocalFile().createOutputStream();
#endif
return url.createOutputStream();
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(AudioRecordingComponent)
};

Wyświetl plik

@ -30,7 +30,7 @@ void main() {
vec4 tightGlow = texture2D(uTexture1, vTexCoord);
vec4 scatter = texture2D(uTexture2, vTexCoord)+0.35;
float light = line.r + uGlow * 1.5 * screen.g * screen.g * tightGlow.r;
light += uGlow * 0.4 * scatter.g * (2.0 + 1.0 * screen.g + 0.5 * screen.r);
light += uGlow * 0.3 * scatter.g * (2.0 + 1.0 * screen.g + 0.5 * screen.r);
float tlight = 1.0-pow(2.0, -uExposure*light);
float tlight2 = tlight * tlight * tlight;
gl_FragColor.rgb = mix(uColour, vec3(1.0), 0.3+tlight2*tlight2*0.5)*tlight;

Wyświetl plik

@ -2,6 +2,8 @@
#include "VisualiserComponent.h"
#include "BlurFragmentShader.glsl"
#include "BlurVertexShader.glsl"
#include "WideBlurFragmentShader.glsl"
#include "WideBlurVertexShader.glsl"
#include "LineFragmentShader.glsl"
#include "LineVertexShader.glsl"
#include "OutputFragmentShader.glsl"
@ -325,6 +327,11 @@ void VisualiserComponent::newOpenGLContextCreated() {
blurShader->addVertexShader(juce::OpenGLHelpers::translateVertexShaderToV3(blurVertexShader));
blurShader->addFragmentShader(blurFragmentShader);
blurShader->link();
wideBlurShader = std::make_unique<juce::OpenGLShaderProgram>(openGLContext);
wideBlurShader->addVertexShader(juce::OpenGLHelpers::translateVertexShaderToV3(wideBlurVertexShader));
wideBlurShader->addFragmentShader(wideBlurFragmentShader);
wideBlurShader->link();
glGenBuffers(1, &vertexBuffer);
glGenBuffers(1, &quadIndexBuffer);
@ -462,10 +469,10 @@ void VisualiserComponent::setupTextures() {
// Create textures
lineTexture = makeTexture(1024, 1024);
blur1Texture = makeTexture(256, 256);
blur2Texture = makeTexture(256, 256);
blur3Texture = makeTexture(32, 32);
blur4Texture = makeTexture(32, 32);
blur1Texture = makeTexture(512, 512);
blur2Texture = makeTexture(512, 512);
blur3Texture = makeTexture(128, 128);
blur4Texture = makeTexture(128, 128);
renderTexture = makeTexture(1024, 1024);
screenTexture = createScreenTexture();
@ -707,8 +714,6 @@ void VisualiserComponent::fade() {
void VisualiserComponent::drawCRT() {
using namespace juce::gl;
saveTextureToQOI(lineTexture, juce::File::getSpecialLocation(juce::File::SpecialLocationType::userDocumentsDirectory).getChildFile("line.qoi"));
setNormalBlending();
@ -717,46 +722,34 @@ void VisualiserComponent::drawCRT() {
texturedShader->setUniform("uResizeForCanvas", lineTexture.width / 1024.0f);
drawTexture(lineTexture);
saveTextureToQOI(blur1Texture, juce::File::getSpecialLocation(juce::File::SpecialLocationType::userDocumentsDirectory).getChildFile("blur1.qoi"));
//horizontal blur 256x256
activateTargetTexture(blur2Texture);
setShader(blurShader.get());
blurShader->setUniform("uOffset", 1.0f / 256.0f, 0.0f);
blurShader->setUniform("uOffset", 1.0f / 512.0f, 0.0f);
drawTexture(blur1Texture);
saveTextureToQOI(blur2Texture, juce::File::getSpecialLocation(juce::File::SpecialLocationType::userDocumentsDirectory).getChildFile("blur2.qoi"));
//vertical blur 256x256
activateTargetTexture(blur1Texture);
blurShader->setUniform("uOffset", 0.0f, 1.0f / 256.0f);
blurShader->setUniform("uOffset", 0.0f, 1.0f / 512.0f);
drawTexture(blur2Texture);
saveTextureToQOI(blur1Texture, juce::File::getSpecialLocation(juce::File::SpecialLocationType::userDocumentsDirectory).getChildFile("blur1_1.qoi"));
//preserve blur1 for later
activateTargetTexture(blur3Texture);
setShader(texturedShader.get());
texturedShader->setUniform("uResizeForCanvas", 1.0f);
drawTexture(blur1Texture);
saveTextureToQOI(blur3Texture, juce::File::getSpecialLocation(juce::File::SpecialLocationType::userDocumentsDirectory).getChildFile("blur3.qoi"));
//horizontal blur 64x64
//horizontal blur 128x128
activateTargetTexture(blur4Texture);
setShader(blurShader.get());
blurShader->setUniform("uOffset", 1.0f / 32.0f, 1.0f / 60.0f);
setShader(wideBlurShader.get());
wideBlurShader->setUniform("uOffset", 1.0f / 128.0f, 0.0f);
drawTexture(blur3Texture);
saveTextureToQOI(blur4Texture, juce::File::getSpecialLocation(juce::File::SpecialLocationType::userDocumentsDirectory).getChildFile("blur4.qoi"));
//vertical blur 64x64
//vertical blur 128x128
activateTargetTexture(blur3Texture);
blurShader->setUniform("uOffset", -1.0f / 60.0f, 1.0f / 32.0f);
wideBlurShader->setUniform("uOffset", 0.0f, 1.0f / 128.0f);
drawTexture(blur4Texture);
saveTextureToQOI(blur3Texture, juce::File::getSpecialLocation(juce::File::SpecialLocationType::userDocumentsDirectory).getChildFile("blur3_1.qoi"));
activateTargetTexture(renderTexture);
setShader(outputShader.get());
float brightness = std::pow(2, settings.getBrightness() - 2);
@ -770,8 +763,6 @@ void VisualiserComponent::drawCRT() {
outputShader->setUniform("uColour", colour.getFloatRed(), colour.getFloatGreen(), colour.getFloatBlue());
activateTargetTexture(renderTexture);
drawTexture(lineTexture, blur1Texture, blur3Texture, screenTexture);
saveTextureToQOI(renderTexture, juce::File::getSpecialLocation(juce::File::SpecialLocationType::userDocumentsDirectory).getChildFile("render.qoi"));
}
Texture VisualiserComponent::createScreenTexture() {

Wyświetl plik

@ -171,6 +171,7 @@ private:
std::unique_ptr<juce::OpenGLShaderProgram> simpleShader;
std::unique_ptr<juce::OpenGLShaderProgram> texturedShader;
std::unique_ptr<juce::OpenGLShaderProgram> blurShader;
std::unique_ptr<juce::OpenGLShaderProgram> wideBlurShader;
std::unique_ptr<juce::OpenGLShaderProgram> lineShader;
std::unique_ptr<juce::OpenGLShaderProgram> outputShader;
juce::OpenGLShaderProgram* currentShader;

Wyświetl plik

@ -0,0 +1,79 @@
std::string wideBlurFragmentShader = R"(
uniform sampler2D uTexture0;
uniform vec2 uOffset;
varying vec2 vTexCoord;
void main() {
vec4 sum = vec4(0.0);
sum += texture2D(uTexture0, vTexCoord + uOffset * -32) * 7.936396739629738e-9;
sum += texture2D(uTexture0, vTexCoord + uOffset * -31) * 2.1238899047869243e-8;
sum += texture2D(uTexture0, vTexCoord + uOffset * -30) * 5.5089512435892845e-8;
sum += texture2D(uTexture0, vTexCoord + uOffset * -29) * 1.3849501900610678e-7;
sum += texture2D(uTexture0, vTexCoord + uOffset * -28) * 3.37464176550827e-7;
sum += texture2D(uTexture0, vTexCoord + uOffset * -27) * 7.969838069860066e-7;
sum += texture2D(uTexture0, vTexCoord + uOffset * -26) * 0.0000018243141024985921;
sum += texture2D(uTexture0, vTexCoord + uOffset * -25) * 0.000004047417737721991;
sum += texture2D(uTexture0, vTexCoord + uOffset * -24) * 0.000008703315823121481;
sum += texture2D(uTexture0, vTexCoord + uOffset * -23) * 0.000018139267838241068;
sum += texture2D(uTexture0, vTexCoord + uOffset * -22) * 0.00003664232826522744;
sum += texture2D(uTexture0, vTexCoord + uOffset * -21) * 0.0000717421959978491;
sum += texture2D(uTexture0, vTexCoord + uOffset * -20) * 0.00013614276559291948;
sum += texture2D(uTexture0, vTexCoord + uOffset * -19) * 0.00025040486855393973;
sum += texture2D(uTexture0, vTexCoord + uOffset * -18) * 0.00044639494279724747;
sum += texture2D(uTexture0, vTexCoord + uOffset * -17) * 0.00077130129517095;
sum += texture2D(uTexture0, vTexCoord + uOffset * -16) * 0.0012916865959769006;
sum += texture2D(uTexture0, vTexCoord + uOffset * -15) * 0.0020966142949301195;
sum += texture2D(uTexture0, vTexCoord + uOffset * -14) * 0.003298437274607801;
sum += texture2D(uTexture0, vTexCoord + uOffset * -13) * 0.005029516233086111;
sum += texture2D(uTexture0, vTexCoord + uOffset * -12) * 0.007433143141769405;
sum += texture2D(uTexture0, vTexCoord + uOffset * -11) * 0.010647485948997013;
sum += texture2D(uTexture0, vTexCoord + uOffset * -10) * 0.014782570282805454;
sum += texture2D(uTexture0, vTexCoord + uOffset * -9) * 0.019892122581030056;
sum += texture2D(uTexture0, vTexCoord + uOffset * -8) * 0.02594421881668063;
sum += texture2D(uTexture0, vTexCoord + uOffset * -7) * 0.03279656561871859;
sum += texture2D(uTexture0, vTexCoord + uOffset * -6) * 0.040183192177668754;
sum += texture2D(uTexture0, vTexCoord + uOffset * -5) * 0.04771872140419803;
sum += texture2D(uTexture0, vTexCoord + uOffset * -4) * 0.05492391166591576;
sum += texture2D(uTexture0, vTexCoord + uOffset * -3) * 0.06127205113483162;
sum += texture2D(uTexture0, vTexCoord + uOffset * -2) * 0.06625088366795348;
sum += texture2D(uTexture0, vTexCoord + uOffset * -1) * 0.06943032995966593;
sum += texture2D(uTexture0, vTexCoord + uOffset * 0) * 0.07052369856294818;
sum += texture2D(uTexture0, vTexCoord + uOffset * 1) * 0.06943032995966593;
sum += texture2D(uTexture0, vTexCoord + uOffset * 2) * 0.06625088366795348;
sum += texture2D(uTexture0, vTexCoord + uOffset * 3) * 0.06127205113483162;
sum += texture2D(uTexture0, vTexCoord + uOffset * 4) * 0.05492391166591576;
sum += texture2D(uTexture0, vTexCoord + uOffset * 5) * 0.04771872140419803;
sum += texture2D(uTexture0, vTexCoord + uOffset * 6) * 0.040183192177668754;
sum += texture2D(uTexture0, vTexCoord + uOffset * 7) * 0.03279656561871859;
sum += texture2D(uTexture0, vTexCoord + uOffset * 8) * 0.02594421881668063;
sum += texture2D(uTexture0, vTexCoord + uOffset * 9) * 0.019892122581030056;
sum += texture2D(uTexture0, vTexCoord + uOffset * 10) * 0.014782570282805454;
sum += texture2D(uTexture0, vTexCoord + uOffset * 11) * 0.010647485948997013;
sum += texture2D(uTexture0, vTexCoord + uOffset * 12) * 0.007433143141769405;
sum += texture2D(uTexture0, vTexCoord + uOffset * 13) * 0.005029516233086111;
sum += texture2D(uTexture0, vTexCoord + uOffset * 14) * 0.003298437274607801;
sum += texture2D(uTexture0, vTexCoord + uOffset * 15) * 0.0020966142949301195;
sum += texture2D(uTexture0, vTexCoord + uOffset * 16) * 0.0012916865959769006;
sum += texture2D(uTexture0, vTexCoord + uOffset * 17) * 0.00077130129517095;
sum += texture2D(uTexture0, vTexCoord + uOffset * 18) * 0.00044639494279724747;
sum += texture2D(uTexture0, vTexCoord + uOffset * 19) * 0.00025040486855393973;
sum += texture2D(uTexture0, vTexCoord + uOffset * 20) * 0.00013614276559291948;
sum += texture2D(uTexture0, vTexCoord + uOffset * 21) * 0.0000717421959978491;
sum += texture2D(uTexture0, vTexCoord + uOffset * 22) * 0.00003664232826522744;
sum += texture2D(uTexture0, vTexCoord + uOffset * 23) * 0.000018139267838241068;
sum += texture2D(uTexture0, vTexCoord + uOffset * 24) * 0.000008703315823121481;
sum += texture2D(uTexture0, vTexCoord + uOffset * 25) * 0.000004047417737721991;
sum += texture2D(uTexture0, vTexCoord + uOffset * 26) * 0.0000018243141024985921;
sum += texture2D(uTexture0, vTexCoord + uOffset * 27) * 7.969838069860066e-7;
sum += texture2D(uTexture0, vTexCoord + uOffset * 28) * 3.37464176550827e-7;
sum += texture2D(uTexture0, vTexCoord + uOffset * 29) * 1.3849501900610678e-7;
sum += texture2D(uTexture0, vTexCoord + uOffset * 30) * 5.5089512435892845e-8;
sum += texture2D(uTexture0, vTexCoord + uOffset * 31) * 2.1238899047869243e-8;
sum += texture2D(uTexture0, vTexCoord + uOffset * 32) * 7.936396739629738e-9;
gl_FragColor = sum;
}
)";

Wyświetl plik

@ -0,0 +1,11 @@
std::string wideBlurVertexShader = R"(
attribute vec2 aPos;
varying vec2 vTexCoord;
void main() {
gl_Position = vec4(aPos, 0.0, 1.0);
vTexCoord = (0.5*aPos+0.5);
}
)";

Wyświetl plik

@ -137,8 +137,6 @@
file="Source/components/AboutComponent.cpp"/>
<FILE id="vDlOTn" name="AboutComponent.h" compile="0" resource="0"
file="Source/components/AboutComponent.h"/>
<FILE id="M7wyTt" name="AudioRecordingComponent.h" compile="0" resource="0"
file="Source/components/AudioRecordingComponent.h"/>
<FILE id="kUinTt" name="ComponentList.cpp" compile="1" resource="0"
file="Source/components/ComponentList.cpp"/>
<FILE id="HGTPEW" name="ComponentList.h" compile="0" resource="0" file="Source/components/ComponentList.h"/>
@ -628,6 +626,10 @@
file="Source/visualiser/VisualiserSettings.cpp"/>
<FILE id="CaPdPD" name="VisualiserSettings.h" compile="0" resource="0"
file="Source/visualiser/VisualiserSettings.h"/>
<FILE id="Qa4JGo" name="WideBlurFragmentShader.glsl" compile="0" resource="0"
file="Source/visualiser/WideBlurFragmentShader.glsl"/>
<FILE id="mSCsyS" name="WideBlurVertexShader.glsl" compile="0" resource="0"
file="Source/visualiser/WideBlurVertexShader.glsl"/>
</GROUP>
<GROUP id="{DC345620-B6F6-F3B9-D359-C265590B0F00}" name="wav">
<FILE id="vYzJlF" name="WavParser.cpp" compile="1" resource="0" file="Source/wav/WavParser.cpp"/>