| @@ -91,11 +91,11 @@ void MIDICCToCVInterface::step() { | |||||
| if (isPortOpen()) { | if (isPortOpen()) { | ||||
| std::vector<unsigned char> message; | std::vector<unsigned char> message; | ||||
| // midiIn->getMessage returns empty vector if there are no messages in the queue | // midiIn->getMessage returns empty vector if there are no messages in the queue | ||||
| getMessage(&message); | getMessage(&message); | ||||
| while (message.size() > 0) { | |||||
| if (message.size() > 0) { | |||||
| processMidi(message); | processMidi(message); | ||||
| getMessage(&message); | |||||
| } | } | ||||
| } | } | ||||
| @@ -101,9 +101,8 @@ void MIDIClockToCVInterface::step() { | |||||
| // midiIn->getMessage returns empty vector if there are no messages in the queue | // midiIn->getMessage returns empty vector if there are no messages in the queue | ||||
| getMessage(&message); | getMessage(&message); | ||||
| while (message.size() > 0) { | |||||
| if (message.size() > 0) { | |||||
| processMidi(message); | processMidi(message); | ||||
| getMessage(&message); | |||||
| } | } | ||||
| } | } | ||||
| @@ -100,9 +100,8 @@ void MIDIToCVInterface::step() { | |||||
| // midiIn->getMessage returns empty vector if there are no messages in the queue | // midiIn->getMessage returns empty vector if there are no messages in the queue | ||||
| getMessage(&message); | getMessage(&message); | ||||
| while (message.size() > 0) { | |||||
| if (message.size() > 0) { | |||||
| processMidi(message); | processMidi(message); | ||||
| getMessage(&message); | |||||
| } | } | ||||
| } | } | ||||
| @@ -75,9 +75,8 @@ void MIDITriggerToCVInterface::step() { | |||||
| // midiIn->getMessage returns empty vector if there are no messages in the queue | // midiIn->getMessage returns empty vector if there are no messages in the queue | ||||
| getMessage(&message); | getMessage(&message); | ||||
| while (message.size() > 0) { | |||||
| if (message.size() > 0) { | |||||
| processMidi(message); | processMidi(message); | ||||
| getMessage(&message); | |||||
| } | } | ||||
| } | } | ||||
| @@ -98,16 +98,11 @@ void QuadMIDIToCVInterface::resetMidi() { | |||||
| void QuadMIDIToCVInterface::step() { | void QuadMIDIToCVInterface::step() { | ||||
| if (isPortOpen()) { | if (isPortOpen()) { | ||||
| std::vector<unsigned char> message; | std::vector<unsigned char> message; | ||||
| int msgsProcessed = 0; | |||||
| // midiIn->getMessage returns empty vector if there are no messages in the queue | // midiIn->getMessage returns empty vector if there are no messages in the queue | ||||
| // NOTE: For the quadmidi we will process max 4 midi messages per step to avoid | |||||
| // problems with parallel input. | |||||
| getMessage(&message); | getMessage(&message); | ||||
| while (msgsProcessed < 4 && message.size() > 0) { | |||||
| if (message.size() > 0) { | |||||
| processMidi(message); | processMidi(message); | ||||
| getMessage(&message); | |||||
| msgsProcessed++; | |||||
| } | } | ||||
| } | } | ||||
| @@ -183,7 +178,7 @@ void QuadMIDIToCVInterface::processMidi(std::vector<unsigned char> msg) { | |||||
| if (!gate) { | if (!gate) { | ||||
| for (int i = 0; i < 4; i++) { | for (int i = 0; i < 4; i++) { | ||||
| if (activeKeys[i].pitch == data1) { | |||||
| if (activeKeys[i].pitch == data1 && activeKeys[i].gate) { | |||||
| activeKeys[i].gate = false; | activeKeys[i].gate = false; | ||||
| activeKeys[i].vel = data2; | activeKeys[i].vel = data2; | ||||
| if (std::find(open.begin(), open.end(), i) != open.end()) { | if (std::find(open.begin(), open.end(), i) != open.end()) { | ||||
| @@ -210,6 +205,7 @@ void QuadMIDIToCVInterface::processMidi(std::vector<unsigned char> msg) { | |||||
| switch (mode) { | switch (mode) { | ||||
| case RESET: | case RESET: | ||||
| if (open.size() >= 4) { | if (open.size() >= 4) { | ||||
| open.clear(); | |||||
| for (int i = 0; i < 4; i++) { | for (int i = 0; i < 4; i++) { | ||||
| activeKeys[i].gate = false; | activeKeys[i].gate = false; | ||||
| open.push_back(i); | open.push_back(i); | ||||