@@ -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); | ||||