diff --git a/libs/QMidi/qmidiin.cpp b/libs/QMidi/qmidiin.cpp index 2d542e0..fdabacc 100644 --- a/libs/QMidi/qmidiin.cpp +++ b/libs/QMidi/qmidiin.cpp @@ -36,6 +36,14 @@ void QMidiIn::openPort(QString name) } } } +void QMidiIn::closePort() +{ + _midiIn->closePort(); +} +bool QMidiIn::isPortOpen() +{ + return _midiIn->isPortOpen(); +} void QMidiIn::setIgnoreTypes(bool sysex, bool time, bool sense) { _midiIn->ignoreTypes(sysex, time, sense); @@ -85,6 +93,9 @@ void QMidiIn::callback(double deltatime, std::vector *message, vo midiMessage->setPitch((unsigned int) message->at(1)); midiMessage->setValue((unsigned int) message->at(2)); break; + case MIDI_SYSEX: + midiMessage->setSysExData(*message); + break; default: break; } diff --git a/libs/QMidi/qmidiin.h b/libs/QMidi/qmidiin.h index 12a22af..f18393a 100644 --- a/libs/QMidi/qmidiin.h +++ b/libs/QMidi/qmidiin.h @@ -16,6 +16,8 @@ public: void openPort(QString name); void openPort(unsigned int index); void openVirtualPort(QString name); + void closePort(); + bool isPortOpen(); void setIgnoreTypes(bool sysex = true, bool time = true, bool sense = true); private: void onMidiMessageReceive(QMidiMessage *msg); diff --git a/libs/QMidi/qmidimessage.cpp b/libs/QMidi/qmidimessage.cpp index 56c3889..8a6ab33 100644 --- a/libs/QMidi/qmidimessage.cpp +++ b/libs/QMidi/qmidimessage.cpp @@ -19,6 +19,7 @@ QMidiMessage::QMidiMessage(const QMidiMessage &other) _control = other._control; _value = other._value; _deltaTime = other._deltaTime; + _sysExData = other._sysExData; _rawMessage = other._rawMessage; } @@ -31,6 +32,7 @@ QMidiMessage *QMidiMessage::clear() _control = 0; _value = 0; _deltaTime = 0; + _sysExData.clear(); _rawMessage.clear(); } @@ -69,6 +71,11 @@ double QMidiMessage::getDeltaTime() return _deltaTime; } +std::vector QMidiMessage::getSysExData() +{ + return _sysExData; +} + QMidiMessage *QMidiMessage::setStatus(QMidiStatus status) { _status = status; @@ -117,6 +124,11 @@ QMidiMessage *QMidiMessage::setRawMessage(std::vector rawMessage) return this; } +QMidiMessage *QMidiMessage::setSysExData(std::vector sysExData){ + _sysExData = sysExData; + return this; +} + std::vector QMidiMessage::getRawMessage() { if(_rawMessage.size() == 0) @@ -147,7 +159,14 @@ std::vector QMidiMessage::getRawMessage() _rawMessage.push_back(_value); break; } + case MIDI_SYSEX:{ + _rawMessage = _sysExData; + if(_sysExData.back() != MIDI_SYSEX_END) _rawMessage.push_back(MIDI_SYSEX_END); + break; + } + //TODO: check protocol and implement other cases + default:{ break; } diff --git a/libs/QMidi/qmidimessage.h b/libs/QMidi/qmidimessage.h index 58f4768..3e9ca80 100644 --- a/libs/QMidi/qmidimessage.h +++ b/libs/QMidi/qmidimessage.h @@ -54,6 +54,8 @@ public: unsigned int getControl(); unsigned int getValue(); double getDeltaTime(); + std::vector getSysExData(); + QMidiMessage* setStatus(QMidiStatus status); QMidiMessage* setChannel(unsigned int channel); @@ -62,6 +64,7 @@ public: QMidiMessage* setControl(unsigned int control); QMidiMessage* setValue(unsigned int value); QMidiMessage* setDeltaTime(double deltaTime); + QMidiMessage* setSysExData(std::vector sysExData); QMidiMessage* setRawMessage(std::vector rawMessage); std::vector getRawMessage(); @@ -74,6 +77,7 @@ public: unsigned int _control; unsigned int _value; double _deltaTime; + std::vector _sysExData; std::vector _rawMessage; signals: diff --git a/libs/QMidi/qmidiout.cpp b/libs/QMidi/qmidiout.cpp index 2717fab..8abfb3a 100644 --- a/libs/QMidi/qmidiout.cpp +++ b/libs/QMidi/qmidiout.cpp @@ -24,6 +24,14 @@ void QMidiOut::openVirtualPort(QString name) { _midiOut->openVirtualPort(name.toStdString()); } +void QMidiOut::closePort() +{ + _midiOut->closePort(); +} +bool QMidiOut::isPortOpen() +{ + return _midiOut->isPortOpen(); +} void QMidiOut::sendNoteOn(unsigned int channel, unsigned int pitch, unsigned int velocity) { std::vector message; diff --git a/libs/QMidi/qmidiout.h b/libs/QMidi/qmidiout.h index fc0b7a8..4b3b7e3 100644 --- a/libs/QMidi/qmidiout.h +++ b/libs/QMidi/qmidiout.h @@ -19,6 +19,8 @@ public: void sendRawMessage(std::vector &message); void openPort(unsigned int index); void openVirtualPort(QString name); + void closePort(); + bool isPortOpen(); private: RtMidiOut *_midiOut;