Browse Source

Merge branch 'master' of github.com:VCVRack/Rack

pull/1639/head
Andrew Belt 6 years ago
parent
commit
a5c1164fec
6 changed files with 30 additions and 25 deletions
  1. +4
    -5
      dep/Makefile
  2. +2
    -2
      src/core/MidiCCToCV.cpp
  3. +1
    -2
      src/core/MidiClockToCV.cpp
  4. +1
    -2
      src/core/MidiToCV.cpp
  5. +1
    -2
      src/core/MidiTriggerToCV.cpp
  6. +21
    -12
      src/core/QuadMidiToCV.cpp

+ 4
- 5
dep/Makefile View File

@@ -140,11 +140,10 @@ $(libzip):
$(MAKE) -C libzip-1.2.0 install $(MAKE) -C libzip-1.2.0 install


$(rtmidi): $(rtmidi):
$(WGET) http://www.music.mcgill.ca/~gary/rtmidi/release/rtmidi-3.0.0.tar.gz
$(UNTAR) rtmidi-3.0.0.tar.gz
cd rtmidi-3.0.0 && ./configure --prefix="$(LOCAL)"
$(MAKE) -C rtmidi-3.0.0
$(MAKE) -C rtmidi-3.0.0 install
git clone https://github.com/thestk/rtmidi.git
cd rtmidi && ./autogen.sh --no-configure && ./configure --prefix="$(LOCAL)"
$(MAKE) -C rtmidi
$(MAKE) -C rtmidi install


$(rtaudio): $(rtaudio):
cd rtaudio && mkdir -p cmakebuild cd rtaudio && mkdir -p cmakebuild


+ 2
- 2
src/core/MidiCCToCV.cpp View File

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




+ 1
- 2
src/core/MidiClockToCV.cpp View File

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




+ 1
- 2
src/core/MidiToCV.cpp View File

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




+ 1
- 2
src/core/MidiTriggerToCV.cpp View File

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




+ 21
- 12
src/core/QuadMidiToCV.cpp View File

@@ -10,6 +10,7 @@ struct MidiKey {
int at = 0; // aftertouch int at = 0; // aftertouch
int vel = 0; // velocity int vel = 0; // velocity
bool gate = false; bool gate = false;
bool pedal_gate_released = false;
}; };


struct QuadMIDIToCVInterface : MidiIO, Module { struct QuadMIDIToCVInterface : MidiIO, Module {
@@ -98,16 +99,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++;
} }
} }


@@ -165,10 +161,15 @@ void QuadMIDIToCVInterface::processMidi(std::vector<unsigned char> msg) {
if (data1 == 0x40) { // pedal if (data1 == 0x40) { // pedal
pedal = (data2 >= 64); pedal = (data2 >= 64);
if (!pedal) { if (!pedal) {
open.clear();
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
activeKeys[i].gate = false;
open.push_back(i);
if (activeKeys[i].pedal_gate_released) {
activeKeys[i].gate = false;
activeKeys[i].pedal_gate_released = false;
if (std::find(open.begin(), open.end(), i) != open.end()) {
open.remove(i);
}
open.push_front(i);
}
} }
} }
} }
@@ -178,12 +179,17 @@ void QuadMIDIToCVInterface::processMidi(std::vector<unsigned char> msg) {
} }


if (pedal && !gate) { if (pedal && !gate) {
for (int i = 0; i < 4; i++) {
if (activeKeys[i].pitch == data1 && activeKeys[i].gate) {
activeKeys[i].pedal_gate_released = true;
}
}
return; return;
} }


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()) {
@@ -202,7 +208,7 @@ void QuadMIDIToCVInterface::processMidi(std::vector<unsigned char> msg) {
} }


if (!activeKeys[0].gate && !activeKeys[1].gate && if (!activeKeys[0].gate && !activeKeys[1].gate &&
!activeKeys[2].gate && !activeKeys[3].gate) {
!activeKeys[2].gate && !activeKeys[3].gate) {
open.sort(); open.sort();
} }


@@ -210,6 +216,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);
@@ -234,10 +241,12 @@ void QuadMIDIToCVInterface::processMidi(std::vector<unsigned char> msg) {


open.push_front(i); open.push_front(i);
activeKeys[i].gate = false; activeKeys[i].gate = false;
activeKeys[i].pedal_gate_released = false;
} }
} }


activeKeys[next].gate = true; activeKeys[next].gate = true;
activeKeys[next].pedal_gate_released = false;
activeKeys[next].pitch = data1; activeKeys[next].pitch = data1;
activeKeys[next].vel = data2; activeKeys[next].vel = data2;
} }
@@ -314,7 +323,7 @@ QuadMidiToCVWidget::QuadMidiToCVWidget() {
} }


addParam(createParam<LEDButton>(Vec(12 * 15, labelHeight), module, QuadMIDIToCVInterface::RESET_PARAM, 0.0, 1.0, addParam(createParam<LEDButton>(Vec(12 * 15, labelHeight), module, QuadMIDIToCVInterface::RESET_PARAM, 0.0, 1.0,
0.0));
0.0));
addChild(createLight<SmallLight<RedLight>>(Vec(12 * 15 + 5, labelHeight + 5), module, QuadMIDIToCVInterface::RESET_LIGHT)); addChild(createLight<SmallLight<RedLight>>(Vec(12 * 15 + 5, labelHeight + 5), module, QuadMIDIToCVInterface::RESET_LIGHT));
{ {
Label *label = new Label(); Label *label = new Label();


Loading…
Cancel
Save