From bdc0479b4c24cbbac15c795bd9fef57652bf1755 Mon Sep 17 00:00:00 2001 From: ben Date: Tue, 24 Oct 2017 00:32:30 +0200 Subject: [PATCH] fix/implement modes --- src/core/QuadMidiToCV.cpp | 106 +++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 60 deletions(-) diff --git a/src/core/QuadMidiToCV.cpp b/src/core/QuadMidiToCV.cpp index 9d78c06e..5e488923 100644 --- a/src/core/QuadMidiToCV.cpp +++ b/src/core/QuadMidiToCV.cpp @@ -32,12 +32,12 @@ struct QuadMIDIToCVInterface : MidiIO, Module { enum Modes { ROTATE, RESET, - REASIGN + REASSIGN }; bool pedal = false; - int mode = REASIGN; + int mode = REASSIGN; int getMode() const; @@ -185,69 +185,50 @@ void QuadMIDIToCVInterface::processMidi(std::vector msg) { if (activeKeys[i].pitch == data1) { activeKeys[i].gate = false; activeKeys[i].vel = data2; + if (std::find(open.begin(), open.end(), i) != open.end()) { + open.remove(i); + } open.push_front(i); } } return; } + if (open.empty()) { + open.clear(); + for (int i = 0; i < 4; i++) { + open.push_back(i); + } + } + + + if (!activeKeys[0].gate && !activeKeys[1].gate && + !activeKeys[2].gate && !activeKeys[3].gate) { + open.sort(); + } + switch (mode) { case RESET: - case REASIGN: - for (int i = 0; i < 4; i++) { - if (activeKeys[i].gate == false && std::find(open.begin(), open.end(), i) == open.end()) { + if (open.size() == 4 ) { + for (int i = 0; i < 4; i++) { + activeKeys[i].gate = false; open.push_back(i); } } - - if (open.size() == 4) { - open.sort(); - } - + break; + case REASSIGN: open.push_back(open.front()); - break; case ROTATE: - if (open.empty()) { - for (int i = 0; i < 4; i++) { - open.push_back(i); - } - } else { - open.sort(); - } break; default: fprintf(stderr, "No mode selected?!\n"); } - activeKeys[open. - - front() - - ]. - gate = true; - activeKeys[open. - - front() - - ]. - pitch = data1; - activeKeys[open. - - front() - - ]. - vel = data2; - fprintf(stderr, - "Using No: %d\n", open. - - front() - - ); - open. - - pop_front(); - + activeKeys[open.front()].gate = true; + activeKeys[open.front()].pitch = data1; + activeKeys[open.front()].vel = data2; + open.pop_front(); return; @@ -273,7 +254,7 @@ struct ModeItem : MenuItem { struct ModeChoice : ChoiceButton { QuadMIDIToCVInterface *module; - const std::vector modeNames = {"ROTATE", "RESET", "REASSIGN"}; + const std::vector modeNames = {"ROTATE", "RESET", "REASSIGN"}; void onAction() { @@ -374,35 +355,40 @@ QuadMidiToCVWidget::QuadMidiToCVWidget() { { Label *label = new Label(); - label->box.pos = Vec(margin, yPos); - label->text = "1V/Oct"; + label->box.pos = Vec(84, yPos); + label->text = "1"; addChild(label); } { Label *label = new Label(); - label->box.pos = Vec(67, yPos); - label->text = "Gate"; + label->box.pos = Vec(125, yPos); + label->text = "2"; addChild(label); } { Label *label = new Label(); - label->box.pos = Vec(133, yPos); - label->text = "Vel"; + label->box.pos = Vec(164, yPos); + label->text = "3"; addChild(label); } { Label *label = new Label(); - label->box.pos = Vec(195, yPos); - label->text = "At"; + label->box.pos = Vec(203, yPos); + label->text = "4"; addChild(label); } + std::string labels[4] = {"1V/Oct", "Gate", "Vel", "At"}; - yPos += labelHeight + margin; + yPos += labelHeight + margin * 2; for (int i = 0; i < 4; i++) { - addOutput(createOutput(Vec(0 * (63) + 15, yPos + 5), module, i)); - addOutput(createOutput(Vec(1 * (63) + 10, yPos + 5), module, i + 4)); - addOutput(createOutput(Vec(2 * (63) + 10, yPos + 5), module, i + 8)); - addOutput(createOutput(Vec(3 * (63) + 5, yPos + 5), module, i + 12)); + Label *label = new Label(); + label->box.pos = Vec(margin, yPos); + label->text = labels[i]; + addChild(label); + addOutput(createOutput(Vec(2 * (40), yPos - 5), module, i * 4)); + addOutput(createOutput(Vec(3 * (40), yPos - 5), module, i * 4 + 1)); + addOutput(createOutput(Vec(4 * (40), yPos - 5), module, i * 4 + 2)); + addOutput(createOutput(Vec(5 * (40), yPos - 5), module, i * 4 + 3)); yPos += 40; }