From 93bc4b97be57f36c2283a9a5c06fc72614b6d6f3 Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 21 Mar 2014 20:02:24 +0000 Subject: [PATCH] Added a parameter to the MidiMessage constructor to optionally parse sysexes without embdedded lengths --- .../juce_audio_basics/midi/juce_MidiMessage.cpp | 5 +++-- modules/juce_audio_basics/midi/juce_MidiMessage.h | 14 +++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/modules/juce_audio_basics/midi/juce_MidiMessage.cpp b/modules/juce_audio_basics/midi/juce_MidiMessage.cpp index 6f6c37475d..18733a30da 100644 --- a/modules/juce_audio_basics/midi/juce_MidiMessage.cpp +++ b/modules/juce_audio_basics/midi/juce_MidiMessage.cpp @@ -152,7 +152,8 @@ MidiMessage::MidiMessage (const MidiMessage& other, const double newTimeStamp) } } -MidiMessage::MidiMessage (const void* srcData, int sz, int& numBytesUsed, const uint8 lastStatusByte, double t) +MidiMessage::MidiMessage (const void* srcData, int sz, int& numBytesUsed, const uint8 lastStatusByte, + double t, bool sysexHasEmbeddedLength) : timeStamp (t) { const uint8* src = static_cast (srcData); @@ -175,7 +176,7 @@ MidiMessage::MidiMessage (const void* srcData, int sz, int& numBytesUsed, const if (byte == 0xf0) { const uint8* d = src; - bool haveReadAllLengthBytes = false; + bool haveReadAllLengthBytes = ! sysexHasEmbeddedLength; int numVariableLengthSysexBytes = 0; while (d < src + sz) diff --git a/modules/juce_audio_basics/midi/juce_MidiMessage.h b/modules/juce_audio_basics/midi/juce_MidiMessage.h index 4694c550f1..9002aa0336 100644 --- a/modules/juce_audio_basics/midi/juce_MidiMessage.h +++ b/modules/juce_audio_basics/midi/juce_MidiMessage.h @@ -82,10 +82,14 @@ public: has in fact been dropped. @param timeStamp the time to give the midi message - this value doesn't use any particular units, so will be application-specific + @param sysexHasEmbeddedLength when reading sysexes, this flag indicates whether + to expect the data to begin with a variable-length field + indicating its size */ MidiMessage (const void* data, int maxBytesToUse, int& numBytesUsed, uint8 lastStatusByte, - double timeStamp = 0); + double timeStamp = 0, + bool sysexHasEmbeddedLength = true); /** Creates an active-sense message. Since the MidiMessage has to contain a valid message, this default constructor @@ -94,10 +98,10 @@ public: MidiMessage() noexcept; /** Creates a copy of another midi message. */ - MidiMessage (const MidiMessage& other); + MidiMessage (const MidiMessage&); /** Creates a copy of another midi message, with a different timestamp. */ - MidiMessage (const MidiMessage& other, double newTimeStamp); + MidiMessage (const MidiMessage&, double newTimeStamp); /** Destructor. */ ~MidiMessage(); @@ -106,8 +110,8 @@ public: MidiMessage& operator= (const MidiMessage& other); #if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS - MidiMessage (MidiMessage&& other) noexcept; - MidiMessage& operator= (MidiMessage&& other) noexcept; + MidiMessage (MidiMessage&&) noexcept; + MidiMessage& operator= (MidiMessage&&) noexcept; #endif //==============================================================================