Browse Source

Frames: fix response

tags/v0.5.0
Andrew Belt 7 years ago
parent
commit
fb1cf26a22
1 changed files with 17 additions and 7 deletions
  1. +17
    -7
      src/Frames.cpp

+ 17
- 7
src/Frames.cpp View File

@@ -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<MenuLabel>());
menu->pushChild(construct<MenuLabel>(&MenuEntry::text, "Response Curve"));
menu->pushChild(construct<FramesResponseItem>(&MenuEntry::text, "Linear", &FramesResponseItem::frames, frames, &FramesResponseItem::channel, channel, &FramesResponseItem::response, 0));
menu->pushChild(construct<FramesResponseItem>(&MenuEntry::text, "Exponential", &FramesResponseItem::frames, frames, &FramesResponseItem::channel, channel, &FramesResponseItem::response, 1));
menu->pushChild(construct<FramesResponseItem>(&MenuEntry::text, "Exponential", &FramesResponseItem::frames, frames, &FramesResponseItem::channel, channel, &FramesResponseItem::response, 255));

return menu;
}


Loading…
Cancel
Save