kopia lustrzana https://github.com/jameshball/osci-render
Add focus
rodzic
d1be10bd5a
commit
35aa8ded56
|
@ -106,6 +106,7 @@
|
|||
brightness : 0.0,
|
||||
intensity: 0.02,
|
||||
saturation: 1.0,
|
||||
focus: 0.01,
|
||||
hue : 125,
|
||||
invertXY : false,
|
||||
grid : true,
|
||||
|
@ -261,19 +262,15 @@
|
|||
vec2 dir = (aEndPos-aStartPos)*uGain;
|
||||
uvl.z = length(dir);
|
||||
|
||||
if (uvl.z > EPS)
|
||||
{
|
||||
if (uvl.z > EPS) {
|
||||
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);
|
||||
vSize = 0.006/pow(EPS,0.08);
|
||||
}
|
||||
|
||||
vSize = uSize;
|
||||
float intensity = 0.015 * uIntensity / uSize;
|
||||
vec2 norm = vec2(-dir.y, dir.x);
|
||||
|
||||
if (idx >= 2.0) {
|
||||
|
@ -291,7 +288,7 @@
|
|||
float side = (mod(idx, 2.0)-0.5)*2.0;
|
||||
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);
|
||||
gl_Position = pos;
|
||||
|
|
|
@ -43,7 +43,6 @@ var Filter =
|
|||
|
||||
generateSmoothedSamples : function (oldSamples, samples, smoothedSamples)
|
||||
{
|
||||
//this.createLanczosKernel();
|
||||
var bufferSize = this.bufferSize;
|
||||
var allSamples = this.allSamples;
|
||||
var nSmoothedSamples = this.nSmoothedSamples;
|
||||
|
@ -57,26 +56,6 @@ var Filter =
|
|||
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 pEnd = pStart + bufferSize;
|
||||
var i = 0;
|
||||
|
@ -424,7 +403,7 @@ var Render =
|
|||
gl.bindTexture(gl.TEXTURE_2D, this.screenTexture);
|
||||
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);
|
||||
if (controls.invertXY) 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.persistence = settings.persistence;
|
||||
controls.saturation = settings.saturation;
|
||||
controls.focus = settings.focus;
|
||||
controls.hue = settings.hue;
|
||||
controls.disableFilter = !settings.upsampling;
|
||||
let numChannels = settings.numChannels;
|
||||
|
|
|
@ -154,6 +154,7 @@ OscirenderAudioProcessor::OscirenderAudioProcessor()
|
|||
permanentEffects.push_back(visualiserParameters.persistenceEffect);
|
||||
permanentEffects.push_back(visualiserParameters.hueEffect);
|
||||
permanentEffects.push_back(visualiserParameters.saturationEffect);
|
||||
permanentEffects.push_back(visualiserParameters.focusEffect);
|
||||
|
||||
for (int i = 0; i < 26; i++) {
|
||||
addLuaSlider();
|
||||
|
|
|
@ -61,9 +61,9 @@ SosciPluginEditor::SosciPluginEditor(SosciAudioProcessor& p)
|
|||
visualiserSettingsWindow.setUsingNativeTitleBar(true);
|
||||
#endif
|
||||
visualiserSettings.setLookAndFeel(&getLookAndFeel());
|
||||
visualiserSettings.setSize(550, 280);
|
||||
visualiserSettings.setSize(550, 340);
|
||||
visualiserSettingsWindow.setContentNonOwned(&visualiserSettings, true);
|
||||
visualiserSettingsWindow.centreWithSize(550, 280);
|
||||
visualiserSettingsWindow.centreWithSize(550, 340);
|
||||
|
||||
setSize(750, 750);
|
||||
setResizable(true, true);
|
||||
|
|
|
@ -25,6 +25,7 @@ SosciAudioProcessor::SosciAudioProcessor()
|
|||
allEffects.push_back(parameters.persistenceEffect);
|
||||
allEffects.push_back(parameters.hueEffect);
|
||||
allEffects.push_back(parameters.saturationEffect);
|
||||
allEffects.push_back(parameters.focusEffect);
|
||||
|
||||
for (auto effect : allEffects) {
|
||||
for (auto effectParameter : effect->parameters) {
|
||||
|
|
|
@ -9,6 +9,7 @@ VisualiserSettings::VisualiserSettings(VisualiserParameters& parameters, int num
|
|||
addAndMakeVisible(persistence);
|
||||
addAndMakeVisible(hue);
|
||||
addAndMakeVisible(saturation);
|
||||
addAndMakeVisible(focus);
|
||||
addAndMakeVisible(graticuleToggle);
|
||||
addAndMakeVisible(smudgeToggle);
|
||||
addAndMakeVisible(upsamplingToggle);
|
||||
|
@ -18,6 +19,7 @@ VisualiserSettings::VisualiserSettings(VisualiserParameters& parameters, int num
|
|||
persistence.setSliderOnValueChange();
|
||||
hue.setSliderOnValueChange();
|
||||
saturation.setSliderOnValueChange();
|
||||
focus.setSliderOnValueChange();
|
||||
}
|
||||
|
||||
VisualiserSettings::~VisualiserSettings() {}
|
||||
|
@ -30,6 +32,7 @@ void VisualiserSettings::resized() {
|
|||
persistence.setBounds(area.removeFromTop(rowHeight));
|
||||
hue.setBounds(area.removeFromTop(rowHeight));
|
||||
saturation.setBounds(area.removeFromTop(rowHeight));
|
||||
focus.setBounds(area.removeFromTop(rowHeight));
|
||||
graticuleToggle.setBounds(area.removeFromTop(rowHeight));
|
||||
smudgeToggle.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("saturation", parameters.saturationEffect->getActualValue());
|
||||
settings->setProperty("hue", parameters.hueEffect->getActualValue());
|
||||
settings->setProperty("focus", parameters.focusEffect->getActualValue() / 100);
|
||||
settings->setProperty("graticule", parameters.graticuleEnabled->getBoolValue());
|
||||
settings->setProperty("smudges", parameters.smudgesEnabled->getBoolValue());
|
||||
settings->setProperty("upsampling", parameters.upsamplingEnabled->getBoolValue());
|
||||
|
|
|
@ -59,6 +59,14 @@ public:
|
|||
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 {
|
||||
|
@ -78,6 +86,7 @@ private:
|
|||
EffectComponent persistence{*parameters.persistenceEffect};
|
||||
EffectComponent hue{*parameters.hueEffect};
|
||||
EffectComponent saturation{*parameters.saturationEffect};
|
||||
EffectComponent focus{*parameters.focusEffect};
|
||||
|
||||
jux::SwitchButton graticuleToggle{parameters.graticuleEnabled};
|
||||
jux::SwitchButton smudgeToggle{parameters.smudgesEnabled};
|
||||
|
|
Ładowanie…
Reference in New Issue