diff options
author | Damien Zammit <damien@zamaudio.com> | 2018-03-06 21:45:10 +1100 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2018-03-06 21:45:10 +1100 |
commit | 9dbe977465ef6baa0dbadaf979d181df2fc7d11f (patch) | |
tree | ccab07b7cb7f8bb0df7a9305dad33f68f3322f70 | |
parent | be6d7179d2ed1ad30f4418146128cbe6c73e0460 (diff) |
ZamGrains: Add moving parts to UI
-rw-r--r-- | plugins/ZamGrains/ZamGrainsPlugin.cpp | 31 | ||||
-rw-r--r-- | plugins/ZamGrains/ZamGrainsPlugin.hpp | 8 | ||||
-rw-r--r-- | plugins/ZamGrains/ZamGrainsUI.cpp | 47 | ||||
-rw-r--r-- | plugins/ZamGrains/ZamGrainsUI.hpp | 1 |
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; }; |