Add smoothing effect to visualiser

pull/261/head
James H Ball 2024-11-09 22:51:42 +00:00 zatwierdzone przez James H Ball
rodzic a106e09876
commit 1e112425e4
8 zmienionych plików z 33 dodań i 10 usunięć

Wyświetl plik

@ -119,9 +119,9 @@ OscirenderAudioProcessorEditor::OscirenderAudioProcessorEditor(OscirenderAudioPr
visualiserSettingsWindow.setUsingNativeTitleBar(true);
#endif
visualiserSettings.setLookAndFeel(&getLookAndFeel());
visualiserSettings.setSize(550, 370);
visualiserSettings.setSize(550, 400);
visualiserSettingsWindow.setContentNonOwned(&visualiserSettings, true);
visualiserSettingsWindow.centreWithSize(550, 370);
visualiserSettingsWindow.centreWithSize(550, 400);
tooltipDropShadow.setOwner(&tooltipWindow);
}

Wyświetl plik

@ -29,7 +29,7 @@ OscirenderAudioProcessor::OscirenderAudioProcessor()
#endif
)
#endif
{
{
// locking isn't necessary here because we are in the constructor
toggleableEffects.push_back(std::make_shared<Effect>(
@ -161,6 +161,7 @@ OscirenderAudioProcessor::OscirenderAudioProcessor()
allEffects = toggleableEffects;
allEffects.insert(allEffects.end(), permanentEffects.begin(), permanentEffects.end());
allEffects.insert(allEffects.end(), luaEffects.begin(), luaEffects.end());
allEffects.push_back(visualiserParameters.smoothEffect);
for (auto effect : allEffects) {
for (auto effectParameter : effect->parameters) {

Wyświetl plik

@ -51,9 +51,9 @@ SosciPluginEditor::SosciPluginEditor(SosciAudioProcessor& p)
visualiserSettingsWindow.setUsingNativeTitleBar(true);
#endif
visualiserSettings.setLookAndFeel(&getLookAndFeel());
visualiserSettings.setSize(550, 370);
visualiserSettings.setSize(550, 400);
visualiserSettingsWindow.setContentNonOwned(&visualiserSettings, true);
visualiserSettingsWindow.centreWithSize(550, 370);
visualiserSettingsWindow.centreWithSize(550, 400);
menuBar.toFront(true);

Wyświetl plik

@ -22,6 +22,8 @@ SosciAudioProcessor::SosciAudioProcessor()
for (auto effect : parameters.effects) {
allEffects.push_back(effect);
}
allEffects.push_back(parameters.smoothEffect);
for (auto effect : allEffects) {
for (auto effectParameter : effect->parameters) {

Wyświetl plik

@ -86,9 +86,10 @@ void VisualiserComponent::setBuffer(const std::vector<OsciPoint>& buffer) {
ySamples.clear();
zSamples.clear();
for (auto& point : buffer) {
xSamples.push_back(point.x);
ySamples.push_back(point.y);
zSamples.push_back(point.z);
OsciPoint smoothPoint = settings.parameters.smoothEffect->apply(0, point);
xSamples.push_back(smoothPoint.x);
ySamples.push_back(smoothPoint.y);
zSamples.push_back(smoothPoint.z);
}
triggerAsyncUpdate();

Wyświetl plik

@ -12,6 +12,7 @@ VisualiserSettings::VisualiserSettings(VisualiserParameters& parameters, int num
addAndMakeVisible(focus);
addAndMakeVisible(noise);
addAndMakeVisible(glow);
addAndMakeVisible(smooth);
addAndMakeVisible(graticuleToggle);
addAndMakeVisible(smudgeToggle);
addAndMakeVisible(upsamplingToggle);
@ -24,6 +25,7 @@ VisualiserSettings::VisualiserSettings(VisualiserParameters& parameters, int num
focus.setSliderOnValueChange();
noise.setSliderOnValueChange();
glow.setSliderOnValueChange();
smooth.setSliderOnValueChange();
}
VisualiserSettings::~VisualiserSettings() {}
@ -39,6 +41,7 @@ void VisualiserSettings::resized() {
focus.setBounds(area.removeFromTop(rowHeight));
noise.setBounds(area.removeFromTop(rowHeight));
glow.setBounds(area.removeFromTop(rowHeight));
smooth.setBounds(area.removeFromTop(rowHeight));
graticuleToggle.setBounds(area.removeFromTop(rowHeight));
smudgeToggle.setBounds(area.removeFromTop(rowHeight));
upsamplingToggle.setBounds(area.removeFromTop(rowHeight));

Wyświetl plik

@ -7,12 +7,14 @@
#include "../components/SvgButton.h"
#include "../LookAndFeel.h"
#include "../components/SwitchButton.h"
#include "../audio/SmoothEffect.h"
class VisualiserParameters {
public:
BooleanParameter* graticuleEnabled = new BooleanParameter("Show Graticule", "graticuleEnabled", VERSION_HINT, true, "Show the graticule or grid lines over the oscilloscope display.");
BooleanParameter* smudgesEnabled = new BooleanParameter("Show Smudges", "smudgesEnabled", VERSION_HINT, true, "Adds a subtle layer of dirt/smudges to the oscilloscope display to make it look more realistic.");
BooleanParameter* upsamplingEnabled = new BooleanParameter("Upsample Audio", "upsamplingEnabled", VERSION_HINT, true, "Upsamples the audio before visualising it to make it appear more realistic, at the expense of performance.");
BooleanParameter* sweepEnabled = new BooleanParameter("Sweep", "sweepEnabled", VERSION_HINT, true, "Plots the audio signal over time, sweeping from left to right");
BooleanParameter* visualiserFullScreen = new BooleanParameter("Visualiser Fullscreen", "visualiserFullScreen", VERSION_HINT, false, "Makes the software visualiser fullscreen.");
std::shared_ptr<Effect> persistenceEffect = std::make_shared<Effect>(
@ -36,7 +38,7 @@ public:
"Brightness",
"Controls how bright the light glows for on the oscilloscope display.",
"brightness",
VERSION_HINT, 3.0, 0.0, 10.0
VERSION_HINT, 2.0, 0.0, 10.0
)
);
std::shared_ptr<Effect> intensityEffect = std::make_shared<Effect>(
@ -80,8 +82,18 @@ public:
)
);
std::shared_ptr<Effect> smoothEffect = std::make_shared<Effect>(
std::make_shared<SmoothEffect>(),
new EffectParameter(
"Smoothing",
"This works as a low-pass frequency filter, effectively reducing the sample rate of the audio being visualised.",
"visualiserSmoothing",
VERSION_HINT, 0, 0.0, 1.0
)
);
std::vector<std::shared_ptr<Effect>> effects = {persistenceEffect, hueEffect, brightnessEffect, intensityEffect, saturationEffect, focusEffect, noiseEffect, glowEffect};
std::vector<BooleanParameter*> booleans = {graticuleEnabled, smudgesEnabled, upsamplingEnabled, visualiserFullScreen};
std::vector<BooleanParameter*> booleans = {graticuleEnabled, smudgesEnabled, upsamplingEnabled, visualiserFullScreen, sweepEnabled};
};
class VisualiserSettings : public juce::Component {
@ -147,6 +159,7 @@ private:
EffectComponent focus{*parameters.focusEffect};
EffectComponent noise{*parameters.noiseEffect};
EffectComponent glow{*parameters.glowEffect};
EffectComponent smooth{*parameters.smoothEffect};
jux::SwitchButton graticuleToggle{parameters.graticuleEnabled};
jux::SwitchButton smudgeToggle{parameters.smudgesEnabled};

Wyświetl plik

@ -55,6 +55,9 @@
file="Source/audio/EffectParameter.h"/>
<FILE id="aziWU2" name="SampleRateManager.h" compile="0" resource="0"
file="Source/audio/SampleRateManager.h"/>
<FILE id="vj5mRC" name="SmoothEffect.cpp" compile="1" resource="0"
file="Source/audio/SmoothEffect.cpp"/>
<FILE id="GSnwBW" name="SmoothEffect.h" compile="0" resource="0" file="Source/audio/SmoothEffect.h"/>
</GROUP>
<GROUP id="{CD81913A-7F0E-5898-DA77-5EBEB369DEB1}" name="components">
<FILE id="URb7Ok" name="AboutComponent.cpp" compile="1" resource="0"