pull/263/head
James H Ball 2024-09-29 20:36:16 +01:00
rodzic d1be10bd5a
commit 35aa8ded56
7 zmienionych plików z 25 dodań i 33 usunięć

Wyświetl plik

@ -106,6 +106,7 @@
brightness : 0.0, brightness : 0.0,
intensity: 0.02, intensity: 0.02,
saturation: 1.0, saturation: 1.0,
focus: 0.01,
hue : 125, hue : 125,
invertXY : false, invertXY : false,
grid : true, grid : true,
@ -261,19 +262,15 @@
vec2 dir = (aEndPos-aStartPos)*uGain; vec2 dir = (aEndPos-aStartPos)*uGain;
uvl.z = length(dir); uvl.z = length(dir);
if (uvl.z > EPS) if (uvl.z > EPS) {
{
dir = dir / uvl.z; dir = dir / uvl.z;
vSize = 0.006/pow(uvl.z,0.08); } else {
} // If the segment is too short, just draw a square
else
{
// If the segment is too short, just draw a square
dir = vec2(1.0, 0.0); dir = vec2(1.0, 0.0);
vSize = 0.006/pow(EPS,0.08);
} }
vSize = uSize; vSize = uSize;
float intensity = 0.015 * uIntensity / uSize;
vec2 norm = vec2(-dir.y, dir.x); vec2 norm = vec2(-dir.y, dir.x);
if (idx >= 2.0) { if (idx >= 2.0) {
@ -291,7 +288,7 @@
float side = (mod(idx, 2.0)-0.5)*2.0; float side = (mod(idx, 2.0)-0.5)*2.0;
uvl.y = side * vSize; uvl.y = side * vSize;
uvl.w *= uIntensity * mix(1.0-uFadeAmount, 1.0, floor(aIdx / 4.0 + 0.5)/uNEdges); uvl.w *= intensity * mix(1.0-uFadeAmount, 1.0, floor(aIdx / 4.0 + 0.5)/uNEdges);
vec4 pos = vec4((current+(tang*dir+norm*side)*vSize)*uInvert,0.0,1.0); vec4 pos = vec4((current+(tang*dir+norm*side)*vSize)*uInvert,0.0,1.0);
gl_Position = pos; gl_Position = pos;

Wyświetl plik

@ -43,7 +43,6 @@ var Filter =
generateSmoothedSamples : function (oldSamples, samples, smoothedSamples) generateSmoothedSamples : function (oldSamples, samples, smoothedSamples)
{ {
//this.createLanczosKernel();
var bufferSize = this.bufferSize; var bufferSize = this.bufferSize;
var allSamples = this.allSamples; var allSamples = this.allSamples;
var nSmoothedSamples = this.nSmoothedSamples; var nSmoothedSamples = this.nSmoothedSamples;
@ -57,26 +56,6 @@ var Filter =
allSamples[bufferSize+i] = samples[i]; allSamples[bufferSize+i] = samples[i];
} }
/*for (var s= -a+1; s<a; s++)
{
for (var r=0; r<steps; r++)
{
if (r==0 && !(s==0)) continue;
var kernelPosition = -r+s*steps;
if (kernelPosition<0) k = K[-kernelPosition];
else k = K[kernelPosition];
var i = r;
var pStart = bufferSize - 2*a + s;
var pEnd = pStart + bufferSize;
for (var p=pStart; p<pEnd; p++)
{
smoothedSamples[i] += k * allSamples[p];
i += steps;
}
}
}*/
var pStart = bufferSize - 2*a; var pStart = bufferSize - 2*a;
var pEnd = pStart + bufferSize; var pEnd = pStart + bufferSize;
var i = 0; var i = 0;
@ -424,7 +403,7 @@ var Render =
gl.bindTexture(gl.TEXTURE_2D, this.screenTexture); gl.bindTexture(gl.TEXTURE_2D, this.screenTexture);
gl.uniform1i(program.uScreen, 0); gl.uniform1i(program.uScreen, 0);
gl.uniform1f(program.uSize, 0.015); gl.uniform1f(program.uSize, controls.focus);
gl.uniform1f(program.uGain, Math.pow(2.0,controls.mainGain)*450/512); gl.uniform1f(program.uGain, Math.pow(2.0,controls.mainGain)*450/512);
if (controls.invertXY) gl.uniform1f(program.uInvert, -1.0); if (controls.invertXY) gl.uniform1f(program.uInvert, -1.0);
else gl.uniform1f(program.uInvert, 1.0); else gl.uniform1f(program.uInvert, 1.0);
@ -680,6 +659,7 @@ function doScriptProcessor(bufferBase64) {
controls.intensity = settings.intensity; controls.intensity = settings.intensity;
controls.persistence = settings.persistence; controls.persistence = settings.persistence;
controls.saturation = settings.saturation; controls.saturation = settings.saturation;
controls.focus = settings.focus;
controls.hue = settings.hue; controls.hue = settings.hue;
controls.disableFilter = !settings.upsampling; controls.disableFilter = !settings.upsampling;
let numChannels = settings.numChannels; let numChannels = settings.numChannels;

Wyświetl plik

@ -154,6 +154,7 @@ OscirenderAudioProcessor::OscirenderAudioProcessor()
permanentEffects.push_back(visualiserParameters.persistenceEffect); permanentEffects.push_back(visualiserParameters.persistenceEffect);
permanentEffects.push_back(visualiserParameters.hueEffect); permanentEffects.push_back(visualiserParameters.hueEffect);
permanentEffects.push_back(visualiserParameters.saturationEffect); permanentEffects.push_back(visualiserParameters.saturationEffect);
permanentEffects.push_back(visualiserParameters.focusEffect);
for (int i = 0; i < 26; i++) { for (int i = 0; i < 26; i++) {
addLuaSlider(); addLuaSlider();

Wyświetl plik

@ -61,9 +61,9 @@ SosciPluginEditor::SosciPluginEditor(SosciAudioProcessor& p)
visualiserSettingsWindow.setUsingNativeTitleBar(true); visualiserSettingsWindow.setUsingNativeTitleBar(true);
#endif #endif
visualiserSettings.setLookAndFeel(&getLookAndFeel()); visualiserSettings.setLookAndFeel(&getLookAndFeel());
visualiserSettings.setSize(550, 280); visualiserSettings.setSize(550, 340);
visualiserSettingsWindow.setContentNonOwned(&visualiserSettings, true); visualiserSettingsWindow.setContentNonOwned(&visualiserSettings, true);
visualiserSettingsWindow.centreWithSize(550, 280); visualiserSettingsWindow.centreWithSize(550, 340);
setSize(750, 750); setSize(750, 750);
setResizable(true, true); setResizable(true, true);

Wyświetl plik

@ -25,6 +25,7 @@ SosciAudioProcessor::SosciAudioProcessor()
allEffects.push_back(parameters.persistenceEffect); allEffects.push_back(parameters.persistenceEffect);
allEffects.push_back(parameters.hueEffect); allEffects.push_back(parameters.hueEffect);
allEffects.push_back(parameters.saturationEffect); allEffects.push_back(parameters.saturationEffect);
allEffects.push_back(parameters.focusEffect);
for (auto effect : allEffects) { for (auto effect : allEffects) {
for (auto effectParameter : effect->parameters) { for (auto effectParameter : effect->parameters) {

Wyświetl plik

@ -9,6 +9,7 @@ VisualiserSettings::VisualiserSettings(VisualiserParameters& parameters, int num
addAndMakeVisible(persistence); addAndMakeVisible(persistence);
addAndMakeVisible(hue); addAndMakeVisible(hue);
addAndMakeVisible(saturation); addAndMakeVisible(saturation);
addAndMakeVisible(focus);
addAndMakeVisible(graticuleToggle); addAndMakeVisible(graticuleToggle);
addAndMakeVisible(smudgeToggle); addAndMakeVisible(smudgeToggle);
addAndMakeVisible(upsamplingToggle); addAndMakeVisible(upsamplingToggle);
@ -18,6 +19,7 @@ VisualiserSettings::VisualiserSettings(VisualiserParameters& parameters, int num
persistence.setSliderOnValueChange(); persistence.setSliderOnValueChange();
hue.setSliderOnValueChange(); hue.setSliderOnValueChange();
saturation.setSliderOnValueChange(); saturation.setSliderOnValueChange();
focus.setSliderOnValueChange();
} }
VisualiserSettings::~VisualiserSettings() {} VisualiserSettings::~VisualiserSettings() {}
@ -30,6 +32,7 @@ void VisualiserSettings::resized() {
persistence.setBounds(area.removeFromTop(rowHeight)); persistence.setBounds(area.removeFromTop(rowHeight));
hue.setBounds(area.removeFromTop(rowHeight)); hue.setBounds(area.removeFromTop(rowHeight));
saturation.setBounds(area.removeFromTop(rowHeight)); saturation.setBounds(area.removeFromTop(rowHeight));
focus.setBounds(area.removeFromTop(rowHeight));
graticuleToggle.setBounds(area.removeFromTop(rowHeight)); graticuleToggle.setBounds(area.removeFromTop(rowHeight));
smudgeToggle.setBounds(area.removeFromTop(rowHeight)); smudgeToggle.setBounds(area.removeFromTop(rowHeight));
upsamplingToggle.setBounds(area.removeFromTop(rowHeight)); upsamplingToggle.setBounds(area.removeFromTop(rowHeight));
@ -42,6 +45,7 @@ juce::var VisualiserSettings::getSettings() {
settings->setProperty("persistence", parameters.persistenceEffect->getActualValue() - 1.33); settings->setProperty("persistence", parameters.persistenceEffect->getActualValue() - 1.33);
settings->setProperty("saturation", parameters.saturationEffect->getActualValue()); settings->setProperty("saturation", parameters.saturationEffect->getActualValue());
settings->setProperty("hue", parameters.hueEffect->getActualValue()); settings->setProperty("hue", parameters.hueEffect->getActualValue());
settings->setProperty("focus", parameters.focusEffect->getActualValue() / 100);
settings->setProperty("graticule", parameters.graticuleEnabled->getBoolValue()); settings->setProperty("graticule", parameters.graticuleEnabled->getBoolValue());
settings->setProperty("smudges", parameters.smudgesEnabled->getBoolValue()); settings->setProperty("smudges", parameters.smudgesEnabled->getBoolValue());
settings->setProperty("upsampling", parameters.upsamplingEnabled->getBoolValue()); settings->setProperty("upsampling", parameters.upsamplingEnabled->getBoolValue());

Wyświetl plik

@ -59,6 +59,14 @@ public:
VERSION_HINT, 1.0, 0.0, 5.0 VERSION_HINT, 1.0, 0.0, 5.0
) )
); );
std::shared_ptr<Effect> focusEffect = std::make_shared<Effect>(
new EffectParameter(
"Focus",
"Controls how focused the electron beam of the oscilloscope is.",
"focus",
VERSION_HINT, 1.0, 0.01, 10.0
)
);
}; };
class VisualiserSettings : public juce::Component { class VisualiserSettings : public juce::Component {
@ -78,6 +86,7 @@ private:
EffectComponent persistence{*parameters.persistenceEffect}; EffectComponent persistence{*parameters.persistenceEffect};
EffectComponent hue{*parameters.hueEffect}; EffectComponent hue{*parameters.hueEffect};
EffectComponent saturation{*parameters.saturationEffect}; EffectComponent saturation{*parameters.saturationEffect};
EffectComponent focus{*parameters.focusEffect};
jux::SwitchButton graticuleToggle{parameters.graticuleEnabled}; jux::SwitchButton graticuleToggle{parameters.graticuleEnabled};
jux::SwitchButton smudgeToggle{parameters.smudgesEnabled}; jux::SwitchButton smudgeToggle{parameters.smudgesEnabled};