Browse Source

Merge 4951564811 into 449436bdc5

pull/59/merge
Jeremy Weatherford GitHub 6 years ago
parent
commit
9b5d04ce6b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 35 additions and 0 deletions
  1. +35
    -0
      src/Frames.cpp

+ 35
- 0
src/Frames.cpp View File

@@ -46,10 +46,13 @@ struct Frames : Module {
frames::Keyframer keyframer;
frames::PolyLfo poly_lfo;
bool poly_lfo_mode = false;
bool sequencer_mode = false;
uint16_t lastControls[4] = {};
uint8_t sequencer_step = 0;

SchmittTrigger addTrigger;
SchmittTrigger delTrigger;
SchmittTrigger stepTrigger;

Frames();
void step() override;
@@ -57,6 +60,7 @@ struct Frames : Module {
json_t *toJson() override {
json_t *rootJ = json_object();
json_object_set_new(rootJ, "polyLfo", json_boolean(poly_lfo_mode));
json_object_set_new(rootJ, "seqMode", json_boolean(sequencer_mode));

json_t *keyframesJ = json_array();
for (int i = 0; i < keyframer.num_keyframes(); i++) {
@@ -87,6 +91,10 @@ struct Frames : Module {
if (polyLfoJ)
poly_lfo_mode = json_boolean_value(polyLfoJ);

json_t *seqModeJ = json_object_get(rootJ, "seqMode");
if (seqModeJ)
sequencer_mode = json_boolean_value(seqModeJ);

json_t *keyframesJ = json_object_get(rootJ, "keyframes");
if (keyframesJ) {
json_t *keyframeJ;
@@ -195,6 +203,16 @@ void Frames::step() {
keyframer.RemoveKeyframe(nearestTimestamp);
}
}
if (sequencer_mode) {
if (stepTrigger.process(rescale(inputs[FRAME_INPUT].value * params[MODULATION_PARAM].value, 0.1f, 2.f, 0.f, 1.f))) {
++sequencer_step;
}
if (sequencer_step >= keyframer.num_keyframes())
sequencer_step = 0;

timestampMod = keyframer.keyframe(sequencer_step).timestamp;
}

keyframer.Evaluate(timestampMod);
}

@@ -402,6 +420,8 @@ struct FramesWidget : ModuleWidget {
bool poly_lfo_mode;
void onAction(EventAction &e) override {
frames->poly_lfo_mode = poly_lfo_mode;
if (frames->poly_lfo_mode)
frames->sequencer_mode = false;
}
void step() override {
rightText = (frames->poly_lfo_mode == poly_lfo_mode) ? "✔" : "";
@@ -409,6 +429,20 @@ struct FramesWidget : ModuleWidget {
}
};

struct FramesSeqModeItem : MenuItem {
Frames *frames;
bool sequencer_mode;
void onAction(EventAction &e) override {
frames->sequencer_mode = !frames->sequencer_mode;
if (frames->sequencer_mode)
frames->poly_lfo_mode = false;
}
void step() override {
rightText = frames->sequencer_mode ? "✔" : "";
MenuItem::step();
}
};

menu->addChild(construct<MenuLabel>());
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Channel Settings"));
for (int i = 0; i < 4; i++) {
@@ -420,6 +454,7 @@ struct FramesWidget : ModuleWidget {
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Mode"));
menu->addChild(construct<FramesModeItem>(&MenuItem::text, "Keyframer", &FramesModeItem::frames, frames, &FramesModeItem::poly_lfo_mode, false));
menu->addChild(construct<FramesModeItem>(&MenuItem::text, "Poly LFO", &FramesModeItem::frames, frames, &FramesModeItem::poly_lfo_mode, true));
menu->addChild(construct<FramesSeqModeItem>(&MenuItem::text, "Sequencer", &FramesSeqModeItem::frames, frames));
}
};



Loading…
Cancel
Save