| @@ -21,7 +21,7 @@ struct MIDICCToCVInterface : MidiIO, Module { | |||||
| int cc[NUM_OUTPUTS]; | int cc[NUM_OUTPUTS]; | ||||
| int ccNum[NUM_OUTPUTS]; | int ccNum[NUM_OUTPUTS]; | ||||
| bool ccSync[NUM_OUTPUTS]; | |||||
| int ccSync[NUM_OUTPUTS]; | |||||
| bool ccSyncFirst[NUM_OUTPUTS]; | bool ccSyncFirst[NUM_OUTPUTS]; | ||||
| bool ccNumInited[NUM_OUTPUTS]; | bool ccNumInited[NUM_OUTPUTS]; | ||||
| bool onFocus[NUM_OUTPUTS]; | bool onFocus[NUM_OUTPUTS]; | ||||
| @@ -32,7 +32,7 @@ struct MIDICCToCVInterface : MidiIO, Module { | |||||
| for (int i = 0; i < NUM_OUTPUTS; i++) { | for (int i = 0; i < NUM_OUTPUTS; i++) { | ||||
| cc[i] = 0; | cc[i] = 0; | ||||
| ccNum[i] = i; | ccNum[i] = i; | ||||
| ccSync[i] = true; | |||||
| ccSync[i] = 0; | |||||
| ccSyncFirst[i] = true; | ccSyncFirst[i] = true; | ||||
| onFocus[i] = false; | onFocus[i] = false; | ||||
| } | } | ||||
| @@ -97,7 +97,7 @@ void MIDICCToCVInterface::step() { | |||||
| for (int i = 0; i < NUM_OUTPUTS; i++) { | for (int i = 0; i < NUM_OUTPUTS; i++) { | ||||
| lights[i] = ccSync[i] ? 0.0 : 1.0; | |||||
| lights[i] = ccSync[i] / 127.0; | |||||
| outputs[i].value = cc[i] / 127.0 * 10.0; | outputs[i].value = cc[i] / 127.0 * 10.0; | ||||
| } | } | ||||
| @@ -106,6 +106,8 @@ void MIDICCToCVInterface::step() { | |||||
| void MIDICCToCVInterface::resetMidi() { | void MIDICCToCVInterface::resetMidi() { | ||||
| for (int i = 0; i < NUM_OUTPUTS; i++) { | for (int i = 0; i < NUM_OUTPUTS; i++) { | ||||
| cc[i] = 0; | cc[i] = 0; | ||||
| ccSync[i] = 0; | |||||
| ccSyncFirst[i] = true; | |||||
| } | } | ||||
| }; | }; | ||||
| @@ -133,16 +135,17 @@ void MIDICCToCVInterface::processMidi(std::vector<unsigned char> msg) { | |||||
| if (ccSyncFirst[i]) { | if (ccSyncFirst[i]) { | ||||
| ccSyncFirst[i] = false; | ccSyncFirst[i] = false; | ||||
| ccSync[i] = data2 < cc[i]+2 && data2 > cc[i] - 2; | |||||
| if (data2 < cc[i] + 2 && data2 > cc[i] - 2) { | |||||
| ccSync[i] = 0; | |||||
| } else { | |||||
| ccSync[i] = absi(data2 - cc[i]); | |||||
| } | |||||
| } | } | ||||
| if (ccSync[i]) { | |||||
| if (ccSync[i] == 0) { | |||||
| cc[i] = data2; | cc[i] = data2; | ||||
| } else if (cc[i] == data2) { | |||||
| ccSync[i] = true; | |||||
| return; | |||||
| } else { | |||||
| ccSync[i] = absi(data2 - cc[i]); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -212,7 +215,8 @@ void CCTextField::onTextChange() { | |||||
| } | } | ||||
| if (!module->ccNumInited[num] && *ccNum != std::stoi(text)) { | if (!module->ccNumInited[num] && *ccNum != std::stoi(text)) { | ||||
| module->ccSync[num] = true; | |||||
| module->ccSync[num] = 0; | |||||
| module->ccSyncFirst[num] = true; | |||||
| } | } | ||||
| } catch (...) { | } catch (...) { | ||||