Ladder filter title animation

This commit is contained in:
Christian Colglazier 2022-01-30 20:51:43 -05:00
parent c3ba9fb4d4
commit 0c20bf1aef
4 changed files with 50 additions and 3 deletions

View File

@ -21,6 +21,10 @@ int Droplet::GetTitleHeight() {
return kTitleHeight; return kTitleHeight;
} }
int Droplet::GetScreenWidth() {
return screen_max - screen_min;
}
int Droplet::GetScreenMin() { int Droplet::GetScreenMin() {
return screen_min; return screen_min;
} }

View File

@ -99,6 +99,13 @@ public:
*/ */
int GetTitleHeight(); int GetTitleHeight();
/*
* Returns the width of the droplet.
*
* @return screen width of the droplet
*/
int GetScreenWidth();
/* /*
* Returns the minimum screen position based on droplet size. * Returns the minimum screen position based on droplet size.
* *

View File

@ -26,12 +26,45 @@ void LadderFilterDroplet::Process(AudioHandle::InputBuffer in,
filter[chn].SetFreq(freq); filter[chn].SetFreq(freq);
filter[chn].SetRes(res); filter[chn].SetRes(res);
out[chn][i] = filter[chn].Process(in[chn][i]) * (1.0f+res*4); out[chn][i] = filter[chn].Process(in[chn][i]) * (1.0f+res*4);
//out[chn][i] = in[chn][i] * res;
} }
} }
} }
void LadderFilterDroplet::Draw() { void LadderFilterDroplet::Draw() {
int filter_cutoff_line = GetScreenMin()+(GetScreenWidth()*(freq/FILTER_MAX));
DrawSolidRect(Patch(),
GetScreenMin(),
3,
filter_cutoff_line,
GetTitleHeight()-1,
true);
// Draw filter roll off
Patch()->display.DrawLine(filter_cutoff_line+1, 5,
filter_cutoff_line+1, GetTitleHeight()-1, true);
// Draw Res
res_points[0] = filter_cutoff_line-7*(res/RES_MAX);
res_points[1] = filter_cutoff_line-3;
res_points[2] = filter_cutoff_line-11*(res/RES_MAX);
res_points[3] = filter_cutoff_line-2;
res_points[4] = filter_cutoff_line-14*(res/RES_MAX);
res_points[5] = filter_cutoff_line-1;
for (int i = 0; i < 6; i++) {
res_points[i] = std::max(GetScreenMin(), res_points[i]);
}
if (res > 0.6*RES_MAX) {
Patch()->display.DrawLine(res_points[0], 0, res_points[1], 0, true);
}
if (res > 0.3*RES_MAX) {
Patch()->display.DrawLine(res_points[2], 1, res_points[3], 1, true);
}
if (res > 0.1*RES_MAX) {
Patch()->display.DrawLine(res_points[4], 2, res_points[5], 2, true);
}
DrawName("Ladder"); DrawName("Ladder");
} }
@ -46,6 +79,6 @@ void LadderFilterDroplet::SetControls() {
filter_knob = Patch()->controls[Patch()->CTRL_1]; filter_knob = Patch()->controls[Patch()->CTRL_1];
res_knob = Patch()->controls[Patch()->CTRL_2]; res_knob = Patch()->controls[Patch()->CTRL_2];
} }
freq_ctrl.Init(filter_knob, 5.0f, 10000.0f, Parameter::LOGARITHMIC); freq_ctrl.Init(filter_knob, 5.0f, FILTER_MAX, Parameter::LOGARITHMIC);
res_ctrl.Init(res_knob, 0.0f, 0.95f, Parameter::LINEAR); res_ctrl.Init(res_knob, 0.0f, RES_MAX, Parameter::LINEAR);
} }

View File

@ -14,6 +14,9 @@ private:
MoogLadder filter[4]; MoogLadder filter[4];
Parameter freq_ctrl, res_ctrl; Parameter freq_ctrl, res_ctrl;
float freq, res; float freq, res;
float FILTER_MAX = 10000.0f;
float RES_MAX = 0.95f;
int res_points[6];
public: public:
/* /*
* Constructor for a droplet. * Constructor for a droplet.