kopia lustrzana https://github.com/jameshball/osci-render
Separate saturation effects, reduce noise slider, make noise b&w
rodzic
b611451f1b
commit
a6d6dbbb4d
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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};
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue