From fb1cf26a227b6bb3df1ce257e692df9fd66065e2 Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Mon, 20 Nov 2017 05:59:20 -0500 Subject: [PATCH] Frames: fix response --- src/Frames.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Frames.cpp b/src/Frames.cpp index 04b0428..5b423f1 100644 --- a/src/Frames.cpp +++ b/src/Frames.cpp @@ -107,9 +107,11 @@ struct Frames : Module { json_t *channelJ = json_array_get(channelsJ, i); if (channelJ) { json_t *curveJ = json_object_get(channelJ, "curve"); - keyframer.mutable_settings(i)->easing_curve = (frames::EasingCurve) json_integer_value(curveJ); + if (curveJ) + keyframer.mutable_settings(i)->easing_curve = (frames::EasingCurve) json_integer_value(curveJ); json_t *responseJ = json_object_get(channelJ, "response"); - keyframer.mutable_settings(i)->response = json_integer_value(responseJ); + if (responseJ) + keyframer.mutable_settings(i)->response = json_integer_value(responseJ); } } } @@ -118,6 +120,10 @@ struct Frames : Module { void reset() override { poly_lfo_mode = false; keyframer.Clear(); + for (int i = 0; i < 4; i++) { + keyframer.mutable_settings(i)->easing_curve = frames::EASING_CURVE_LINEAR; + keyframer.mutable_settings(i)->response = 0; + } } void randomize() override { // TODO @@ -132,9 +138,7 @@ Frames::Frames() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { memset(&poly_lfo, 0, sizeof(poly_lfo)); poly_lfo.Init(); - for (int i = 0; i < 4; i++) { - keyframer.mutable_settings(i)->easing_curve = frames::EASING_CURVE_LINEAR; - } + reset(); } @@ -205,6 +209,12 @@ void Frames::step() { float lin = keyframer.level(i) / 65535.0; gains[i] = lin; } + // Simulate SSM2164 + if (keyframer.mutable_settings(i)->response > 0) { + const float expBase = 200.0; + float expGain = rescalef(powf(expBase, gains[i]), 1.0, expBase, 0.0, 1.0); + gains[i] = crossf(gains[i], expGain, keyframer.mutable_settings(i)->response / 255.0); + } } // Update last controls @@ -353,7 +363,7 @@ struct FramesResponseItem : MenuItem { frames->keyframer.mutable_settings(channel)->response = response; } void step() override { - rightText = (frames->keyframer.mutable_settings(channel)->response = response) ? "✔" : ""; + rightText = (frames->keyframer.mutable_settings(channel)->response == response) ? "✔" : ""; MenuItem::step(); } }; @@ -376,7 +386,7 @@ struct FramesChannelSettingsItem : MenuItem { menu->pushChild(construct()); menu->pushChild(construct(&MenuEntry::text, "Response Curve")); menu->pushChild(construct(&MenuEntry::text, "Linear", &FramesResponseItem::frames, frames, &FramesResponseItem::channel, channel, &FramesResponseItem::response, 0)); - menu->pushChild(construct(&MenuEntry::text, "Exponential", &FramesResponseItem::frames, frames, &FramesResponseItem::channel, channel, &FramesResponseItem::response, 1)); + menu->pushChild(construct(&MenuEntry::text, "Exponential", &FramesResponseItem::frames, frames, &FramesResponseItem::channel, channel, &FramesResponseItem::response, 255)); return menu; }