25 #ifndef JUCE_MIDIDATACONCATENATOR_H_INCLUDED 26 #define JUCE_MIDIDATACONCATENATOR_H_INCLUDED 38 : pendingData ((size_t) initialBufferSize),
39 pendingDataTime (0), pendingBytes (0), runningStatus (0)
50 template <
typename UserDataType,
typename CallbackType>
51 void pushMidiData (
const void* inputData,
int numBytes,
double time,
52 UserDataType* input, CallbackType& callback)
54 const uint8* d = static_cast <
const uint8*> (inputData);
58 if (pendingBytes > 0 || d[0] == 0xf0)
60 processSysex (d, numBytes, time, input, callback);
72 if (*d >= 0xf8 && *d <= 0xfe)
75 callback.handleIncomingMidiMessage (input, m);
80 if (len == 0 && *d < 0x80 && runningStatus >= 0x80)
81 data[len++] = runningStatus;
100 callback.handleIncomingMidiMessage (input, m);
101 runningStatus = data[0];
108 template <
typename UserDataType,
typename CallbackType>
109 void processSysex (
const uint8*& d,
int& numBytes,
double time,
110 UserDataType* input, CallbackType& callback)
115 pendingDataTime = time;
118 pendingData.
ensureSize ((
size_t) (pendingBytes + numBytes),
false);
120 uint8* dest = totalMessage + pendingBytes;
124 if (pendingBytes > 0 && *d >= 0x80)
134 if (*d >= 0xfa || *d == 0xf8)
136 callback.handleIncomingMidiMessage (input,
MidiMessage (*d, time));
148 callback.handleIncomingMidiMessage (input, m);
163 while (numBytes > 0);
165 if (pendingBytes > 0)
167 if (totalMessage [pendingBytes - 1] == 0xf7)
169 callback.handleIncomingMidiMessage (input,
MidiMessage (totalMessage, pendingBytes, pendingDataTime));
174 callback.handlePartialSysexMessage (input, totalMessage, pendingBytes, pendingDataTime);
180 double pendingDataTime;
187 #endif // JUCE_MIDIDATACONCATENATOR_H_INCLUDED static int getMessageLengthFromFirstByte(const uint8 firstByte) noexcept
Definition: juce_MidiMessage.cpp:58
Definition: juce_MidiDataConcatenator.h:33
void pushMidiData(const void *inputData, int numBytes, double time, UserDataType *input, CallbackType &callback)
Definition: juce_MidiDataConcatenator.h:51
Definition: juce_MemoryBlock.h:38
MidiDataConcatenator(const int initialBufferSize)
Definition: juce_MidiDataConcatenator.h:37
void * getData() const noexcept
Definition: juce_MemoryBlock.h:96
void ensureSize(const size_t minimumSize, bool initialiseNewSpaceToZero=false)
Definition: juce_MemoryBlock.cpp:157
void reset()
Definition: juce_MidiDataConcatenator.h:43
unsigned char uint8
Definition: juce_MathsFunctions.h:43
Definition: juce_MidiMessage.h:35