summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2018-03-06 21:45:10 +1100
committerDamien Zammit <damien@zamaudio.com>2018-03-06 21:45:10 +1100
commit9dbe977465ef6baa0dbadaf979d181df2fc7d11f (patch)
treeccab07b7cb7f8bb0df7a9305dad33f68f3322f70
parentbe6d7179d2ed1ad30f4418146128cbe6c73e0460 (diff)
ZamGrains: Add moving parts to UI
-rw-r--r--plugins/ZamGrains/ZamGrainsPlugin.cpp31
-rw-r--r--plugins/ZamGrains/ZamGrainsPlugin.hpp8
-rw-r--r--plugins/ZamGrains/ZamGrainsUI.cpp47
-rw-r--r--plugins/ZamGrains/ZamGrainsUI.hpp1
4 files changed, 83 insertions, 4 deletions
diff --git a/plugins/ZamGrains/ZamGrainsPlugin.cpp b/plugins/ZamGrains/ZamGrainsPlugin.cpp
index 7188e2e..da41328 100644
--- a/plugins/ZamGrains/ZamGrainsPlugin.cpp
+++ b/plugins/ZamGrains/ZamGrainsPlugin.cpp
@@ -80,6 +80,24 @@ void ZamGrainsPlugin::initParameter(uint32_t index, Parameter& parameter)
parameter.ranges.min = -60.0f;
parameter.ranges.max = 0.0f;
break;
+ case paramGrainpos:
+ parameter.hints = kParameterIsOutput;
+ parameter.name = "Grain Position";
+ parameter.symbol = "grpos";
+ parameter.unit = " ";
+ parameter.ranges.def = 0.0f;
+ parameter.ranges.min = 0.0f;
+ parameter.ranges.max = 1.0f;
+ break;
+ case paramPlaypos:
+ parameter.hints = kParameterIsOutput;
+ parameter.name = "Playback Position";
+ parameter.symbol = "playpos";
+ parameter.unit = " ";
+ parameter.ranges.def = 0.0f;
+ parameter.ranges.min = 0.0f;
+ parameter.ranges.max = 1.0f;
+ break;
}
}
@@ -102,6 +120,8 @@ void ZamGrainsPlugin::loadProgram(uint32_t index)
playspeed = 1.f;
grains = 1.f;
gain = 0.f;
+ grainpos = 0.f;
+ playpos = 0.f;
break;
}
@@ -130,6 +150,12 @@ float ZamGrainsPlugin::getParameterValue(uint32_t index) const
case paramGain:
return gain;
break;
+ case paramGrainpos:
+ return grainpos;
+ break;
+ case paramPlaypos:
+ return playpos;
+ break;
default:
return 0.0f;
}
@@ -176,6 +202,8 @@ void ZamGrainsPlugin::activate()
zidx2 = 0;
zidxold = 0;
zidx2old = 0;
+ grainpos = 0;
+ playpos = 0;
}
float ZamGrainsPlugin::sample_and_hold(int ctrl, float input, int *state) {
@@ -241,7 +269,8 @@ void ZamGrainsPlugin::run(const float** inputs, float** outputs, uint32_t frames
sampz * hanning(posphasor, windowsize) +
sampz2 * hanning(outofphase, windowsize)
);
-
+ grainpos = (float)zidx * 1000. / (srate * delaytime);
+ playpos = (float)posz * 1000. / (srate * delaytime);
zidxold = zidx;
zidx2old = zidx2;
}
diff --git a/plugins/ZamGrains/ZamGrainsPlugin.hpp b/plugins/ZamGrains/ZamGrainsPlugin.hpp
index b452e48..a47fcc2 100644
--- a/plugins/ZamGrains/ZamGrainsPlugin.hpp
+++ b/plugins/ZamGrains/ZamGrainsPlugin.hpp
@@ -32,9 +32,11 @@ public:
{
paramGain = 0,
paramGrains,
- paramGrainspeed,
- paramPlayspeed,
+ paramGrainspeed,
+ paramPlayspeed,
paramDelaytime,
+ paramGrainpos,
+ paramPlaypos,
paramCount
};
@@ -121,7 +123,7 @@ protected:
private:
int currgrains, zidx, zidx2, zidxold, zidx2old, samphold, samphold2;
- float grains, grainspeed, playspeed, delaytime, gain, delaytimeout;
+ float grains, grainspeed, playspeed, delaytime, gain, delaytimeout, playpos, grainpos;
float delaytimeold;
float z[MAX_DELAY];
unsigned int posz;
diff --git a/plugins/ZamGrains/ZamGrainsUI.cpp b/plugins/ZamGrains/ZamGrainsUI.cpp
index 6332ff5..13de644 100644
--- a/plugins/ZamGrains/ZamGrainsUI.cpp
+++ b/plugins/ZamGrains/ZamGrainsUI.cpp
@@ -113,6 +113,14 @@ void ZamGrainsUI::parameterChanged(uint32_t index, float value)
case ZamGrainsPlugin::paramDelaytime:
fKnobLooptime->setValue(value);
break;
+ case ZamGrainsPlugin::paramGrainpos:
+ grainpos = value;
+ repaint();
+ break;
+ case ZamGrainsPlugin::paramPlaypos:
+ playpos = value;
+ repaint();
+ break;
}
}
@@ -125,6 +133,8 @@ void ZamGrainsUI::programLoaded(uint32_t index)
fKnobGrains->setValue(1.0f);
fKnobMaster->setValue(0.0f);
fKnobLooptime->setValue(1000.0f);
+ grainpos = 0.f;
+ playpos = 0.f;
break;
}
}
@@ -149,7 +159,44 @@ void ZamGrainsUI::imageKnobValueChanged(ZamKnob* knob, float value)
void ZamGrainsUI::onDisplay()
{
+ int i;
+ int grainx = 0;
+ int grains = (int)fKnobGrains->getValue();
+ float playspeed = fKnobPlayspeed->getValue();
+ int width = 345;
+ int height = 140;
+ int offsetx = 5;
+ int offsety = 175;
+
fImgBackground.draw();
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable(GL_LINE_SMOOTH);
+ //glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
+ glEnable(GL_POINT_SMOOTH);
+ glPointSize(8.0);
+ glEnable(GL_POINT_SPRITE);
+
+ glLineWidth(1);
+ glColor4f(1.f, 1.f, 0.235f, 1.0f);
+ for (i = 0; i < grains + 1; ++i) {
+ grainx = i * width / grains;
+ glBegin(GL_LINES);
+ glVertex2i(offsetx + grainx, offsety + 5);
+ glVertex2i(offsetx + grainx, offsety + height - 5);
+ glEnd();
+ }
+ // reset color
+
+ glBegin(GL_POINTS);
+ glColor4f(1.0f, 0.235f, 0.235f, 1.0f);
+ glVertex2i(offsetx + ((int)(width * playpos * playspeed) % width), offsety + 5 + height / 3);
+ glColor4f(0.235f, 0.235f, 1.0f, 1.0f);
+ glVertex2i(offsetx + width * playpos, offsety + 5 + height / 2);
+ glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ glVertex2i(offsetx + width * grainpos, offsety + 5 + 2 * height / 3);
+ glEnd();
}
// -----------------------------------------------------------------------
diff --git a/plugins/ZamGrains/ZamGrainsUI.hpp b/plugins/ZamGrains/ZamGrainsUI.hpp
index d95d990..c0bbcd4 100644
--- a/plugins/ZamGrains/ZamGrainsUI.hpp
+++ b/plugins/ZamGrains/ZamGrainsUI.hpp
@@ -52,6 +52,7 @@ protected:
void onDisplay() override;
private:
+ float playpos, grainpos;
Image fImgBackground;
ScopedPointer<ZamKnob> fKnobPlayspeed, fKnobGrainspeed, fKnobMaster, fKnobGrains, fKnobLooptime;
};