Separate saturation effects, reduce noise slider, make noise b&w

pre-release-3
James H Ball 2025-01-05 22:54:02 +00:00
rodzic b611451f1b
commit a6d6dbbb4d
5 zmienionych plików z 41 dodań i 24 usunięć

Wyświetl plik

@ -37,7 +37,7 @@ SosciMainMenuBarModel::SosciMainMenuBarModel(SosciPluginEditor& e, SosciAudioPro
};
addMenuItem(0, "Open Audio File", [&]() {
fileChooser = std::make_unique<juce::FileChooser>("Open Audio File", processor.lastOpenedDirectory, "*.wav;*.aiff");
fileChooser = std::make_unique<juce::FileChooser>("Open Audio File", processor.lastOpenedDirectory, "*.wav;*.aiff;*.flac;*.ogg");
auto flags = juce::FileBrowserComponent::openMode | juce::FileBrowserComponent::canSelectFiles;
fileChooser->launchAsync(flags, [&](const juce::FileChooser& chooser) {
auto file = chooser.getResult();

Wyświetl plik

@ -7,11 +7,12 @@ uniform sampler2D uTexture3; //screen
uniform sampler2D uTexture4; //reflection
uniform sampler2D uTexture5; //screen glow
uniform float uExposure;
uniform float uSaturation;
uniform float uLineSaturation;
uniform float uScreenSaturation;
uniform float uNoise;
uniform float uRandom;
uniform float uGlow;
uniform float uAmbient;
uniform float uAmbient;
uniform float uFishEye;
uniform float uRealScreen;
uniform vec2 uOffset;
@ -65,15 +66,14 @@ void main() {
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;
gl_FragColor.rgb = desaturate(gl_FragColor.rgb, 1.0 - uLineSaturation);
if (uRealScreen > 0.5) {
float ambient = pow(2.0, uExposure) * uAmbient;
gl_FragColor.rgb += ambient * screen.rgb;
// this isn't how light works, but it looks cool
float ambient = uExposure * uAmbient;
vec3 screen = ambient * screen.rgb;
gl_FragColor.rgb += desaturate(screen, 1.0 - uScreenSaturation);
}
gl_FragColor.rgb = desaturate(gl_FragColor.rgb, 1.0 - uSaturation);
float noiseR = noise(gl_FragCoord.xy * 0.01, uRandom * 100.0);
float noiseG = noise(gl_FragCoord.xy * 0.005, uRandom * 50.0);
float noiseB = noise(gl_FragCoord.xy * 0.07, uRandom * 80.0);
gl_FragColor.rgb += uNoise * vec3(noiseR, noiseG, noiseB);
gl_FragColor.rgb += uNoise * noise(gl_FragCoord.xy * 0.01, uRandom * 100.0);
gl_FragColor.a = 1.0;
}

Wyświetl plik

@ -1011,7 +1011,8 @@ void VisualiserComponent::drawCRT() {
activateTargetTexture(renderTexture);
setShader(outputShader.get());
outputShader->setUniform("uExposure", 0.25f);
outputShader->setUniform("uSaturation", (float) settings.getSaturation());
outputShader->setUniform("uLineSaturation", (float) settings.getLineSaturation());
outputShader->setUniform("uScreenSaturation", (float) settings.getScreenSaturation());
outputShader->setUniform("uNoise", (float) settings.getNoise());
outputShader->setUniform("uRandom", juce::Random::getSystemRandom().nextFloat());
outputShader->setUniform("uGlow", (float) settings.getGlow());

Wyświetl plik

@ -7,7 +7,8 @@ VisualiserSettings::VisualiserSettings(VisualiserParameters& p, int numChannels)
addAndMakeVisible(intensity);
addAndMakeVisible(persistence);
addAndMakeVisible(hue);
addAndMakeVisible(saturation);
addAndMakeVisible(lineSaturation);
addAndMakeVisible(screenSaturation);
addAndMakeVisible(focus);
addAndMakeVisible(noise);
addAndMakeVisible(glow);
@ -31,7 +32,8 @@ VisualiserSettings::VisualiserSettings(VisualiserParameters& p, int numChannels)
intensity.setSliderOnValueChange();
persistence.setSliderOnValueChange();
hue.setSliderOnValueChange();
saturation.setSliderOnValueChange();
lineSaturation.setSliderOnValueChange();
screenSaturation.setSliderOnValueChange();
focus.setSliderOnValueChange();
noise.setSliderOnValueChange();
glow.setSliderOnValueChange();
@ -66,7 +68,8 @@ void VisualiserSettings::resized() {
intensity.setBounds(area.removeFromTop(rowHeight));
persistence.setBounds(area.removeFromTop(rowHeight));
hue.setBounds(area.removeFromTop(rowHeight));
saturation.setBounds(area.removeFromTop(rowHeight));
lineSaturation.setBounds(area.removeFromTop(rowHeight));
screenSaturation.setBounds(area.removeFromTop(rowHeight));
focus.setBounds(area.removeFromTop(rowHeight));
noise.setBounds(area.removeFromTop(rowHeight));
glow.setBounds(area.removeFromTop(rowHeight));

Wyświetl plik

@ -117,11 +117,19 @@ public:
VERSION_HINT, 5.0, 0.0, 10.0
)
);
std::shared_ptr<Effect> saturationEffect = std::make_shared<Effect>(
std::shared_ptr<Effect> lineSaturationEffect = std::make_shared<Effect>(
new EffectParameter(
"Saturation",
"Controls how saturated the colours are on the oscilloscope.",
"saturation",
"Line Saturation",
"Controls how saturated the colours are on the oscilloscope lines.",
"lineSaturation",
VERSION_HINT, 1.0, 0.0, 5.0
)
);
std::shared_ptr<Effect> screenSaturationEffect = std::make_shared<Effect>(
new EffectParameter(
"Screen Saturation",
"Controls how saturated the colours are on the oscilloscope screen.",
"screenSaturation",
VERSION_HINT, 1.0, 0.0, 5.0
)
);
@ -130,7 +138,7 @@ public:
"Focus",
"Controls how focused the electron beam of the oscilloscope is.",
"focus",
VERSION_HINT, 1.0, 0.01, 10.0
VERSION_HINT, 1.0, 0.3, 10.0
)
);
std::shared_ptr<Effect> noiseEffect = std::make_shared<Effect>(
@ -183,7 +191,7 @@ public:
)
);
std::vector<std::shared_ptr<Effect>> effects = {persistenceEffect, hueEffect, intensityEffect, saturationEffect, focusEffect, noiseEffect, glowEffect, ambientEffect, sweepMsEffect, triggerValueEffect};
std::vector<std::shared_ptr<Effect>> effects = {persistenceEffect, hueEffect, intensityEffect, lineSaturationEffect, screenSaturationEffect, focusEffect, noiseEffect, glowEffect, ambientEffect, sweepMsEffect, triggerValueEffect};
std::vector<BooleanParameter*> booleans = {upsamplingEnabled, visualiserFullScreen, sweepEnabled};
std::vector<IntParameter*> integers = {screenType};
};
@ -207,8 +215,12 @@ public:
return parameters.hueEffect->getActualValue();
}
double getSaturation() {
return parameters.saturationEffect->getActualValue();
double getLineSaturation() {
return parameters.lineSaturationEffect->getActualValue();
}
double getScreenSaturation() {
return parameters.screenSaturationEffect->getActualValue();
}
double getFocus() {
@ -216,7 +228,7 @@ public:
}
double getNoise() {
return parameters.noiseEffect->getActualValue();
return parameters.noiseEffect->getActualValue() / 5;
}
double getGlow() {
@ -254,7 +266,8 @@ private:
EffectComponent intensity{*parameters.intensityEffect};
EffectComponent persistence{*parameters.persistenceEffect};
EffectComponent hue{*parameters.hueEffect};
EffectComponent saturation{*parameters.saturationEffect};
EffectComponent lineSaturation{*parameters.lineSaturationEffect};
EffectComponent screenSaturation{*parameters.screenSaturationEffect};
EffectComponent focus{*parameters.focusEffect};
EffectComponent noise{*parameters.noiseEffect};
EffectComponent glow{*parameters.glowEffect};