diff --git a/src/MIDI.hpp b/src/MIDI.hpp index bb9ffc1c..be7c28a1 100644 --- a/src/MIDI.hpp +++ b/src/MIDI.hpp @@ -124,22 +124,25 @@ MidiInterface& MidiInterface 1) mTransport.write(inMessage.data1); if (inMessage.length > 2) mTransport.write(inMessage.data2); - } else + } else if (inMessage.type == MidiType::SystemExclusive) { - // sysexArray does not contain the start and end tags - mTransport.write(MidiType::SystemExclusiveStart); - - for (size_t i = 0; i < inMessage.getSysExSize(); i++) + const unsigned size = inMessage.getSysExSize(); + for (size_t i = 0; i < size; i++) mTransport.write(inMessage.sysexArray[i]); - - mTransport.write(MidiType::SystemExclusiveEnd); + } else // at this point, it it assumed to be a system common message + { + mTransport.write(inMessage.type); + if (inMessage.length > 1) mTransport.write(inMessage.data1); + if (inMessage.length > 2) mTransport.write(inMessage.data2); } } mTransport.endTransmission(); @@ -1083,6 +1086,7 @@ bool MidiInterface::parse() mMessage.data1 = mPendingMessage[1]; // Save data2 only if applicable mMessage.data2 = mPendingMessageExpectedLength == 3 ? mPendingMessage[2] : 0; + mMessage.length = mPendingMessageExpectedLength; // Reset local variables mPendingMessageIndex = 0; diff --git a/src/midi_Message.h b/src/midi_Message.h index bbd8d6a1..0879fa37 100644 --- a/src/midi_Message.h +++ b/src/midi_Message.h @@ -114,6 +114,18 @@ struct Message const unsigned size = unsigned(data2) << 8 | data1; return size > sSysExMaxSize ? sSysExMaxSize : size; } + inline bool isSystemRealTime () const + { + return (type & 0xf8) == 0xf8; + } + inline bool isSystemCommon () const + { + return (type & 0xf8) == 0xf0; + } + inline bool isChannelMessage () const + { + return (type & 0xf0) != 0xf0; + } }; END_MIDI_NAMESPACE