prevent exception in MIDI in/out from crashing
This commit is contained in:
parent
9a0609ae1a
commit
1d77719640
|
@ -46,23 +46,28 @@ String sanitizePortName(const String& name) {
|
||||||
bool TAMidiInRtMidi::gather() {
|
bool TAMidiInRtMidi::gather() {
|
||||||
std::vector<unsigned char> msg;
|
std::vector<unsigned char> msg;
|
||||||
if (port==NULL) return false;
|
if (port==NULL) return false;
|
||||||
while (true) {
|
try {
|
||||||
TAMidiMessage m;
|
while (true) {
|
||||||
double t=port->getMessage(&msg);
|
TAMidiMessage m;
|
||||||
if (msg.empty()) break;
|
double t=port->getMessage(&msg);
|
||||||
|
if (msg.empty()) break;
|
||||||
|
|
||||||
// parse message
|
// parse message
|
||||||
m.time=t;
|
m.time=t;
|
||||||
m.type=msg[0];
|
m.type=msg[0];
|
||||||
if (m.type!=TA_MIDI_SYSEX && msg.size()>1) {
|
if (m.type!=TA_MIDI_SYSEX && msg.size()>1) {
|
||||||
memcpy(m.data,msg.data()+1,MIN(msg.size()-1,7));
|
memcpy(m.data,msg.data()+1,MIN(msg.size()-1,7));
|
||||||
} else if (m.type==TA_MIDI_SYSEX) {
|
} else if (m.type==TA_MIDI_SYSEX) {
|
||||||
m.sysExData.reset(new unsigned char[msg.size()]);
|
m.sysExData.reset(new unsigned char[msg.size()]);
|
||||||
m.sysExLen=msg.size();
|
m.sysExLen=msg.size();
|
||||||
logD("got a SysEx of length %ld!",msg.size());
|
logD("got a SysEx of length %ld!",msg.size());
|
||||||
memcpy(m.sysExData.get(),msg.data(),msg.size());
|
memcpy(m.sysExData.get(),msg.data(),msg.size());
|
||||||
|
}
|
||||||
|
queue.push(m);
|
||||||
}
|
}
|
||||||
queue.push(m);
|
} catch (RtMidiError& e) {
|
||||||
|
logE("MIDI input error! %s",e.what());
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -180,7 +185,12 @@ bool TAMidiOutRtMidi::send(const TAMidiMessage& what) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
len=what.sysExLen;
|
len=what.sysExLen;
|
||||||
port->sendMessage(what.sysExData.get(),len);
|
try {
|
||||||
|
port->sendMessage(what.sysExData.get(),len);
|
||||||
|
} catch (RtMidiError& e) {
|
||||||
|
logE("MIDI output error! %s",e.what());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
case TA_MIDI_MTC_FRAME:
|
case TA_MIDI_MTC_FRAME:
|
||||||
|
@ -194,7 +204,12 @@ bool TAMidiOutRtMidi::send(const TAMidiMessage& what) {
|
||||||
len=1;
|
len=1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
port->sendMessage((const unsigned char*)&what.type,len);
|
try {
|
||||||
|
port->sendMessage((const unsigned char*)&what.type,len);
|
||||||
|
} catch (RtMidiError& e) {
|
||||||
|
logE("MIDI output error! %s",e.what());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue