45 auto byte = (
unsigned int) *
data;
47 if (
byte == 0xf0 ||
byte == 0xf7)
52 if (
data[
i++] == 0xf7)
124 return addEvent (
m.getRawData(),
m.getRawDataSize(), sampleNumber);
134 if (std::numeric_limits<uint16>::max() < numBytes)
140 auto newItemSize = (size_t) numBytes +
sizeof (
int32) +
sizeof (
uint16);
143 data.insertMultiple (offset, 0, (
int) newItemSize);
145 auto*
d =
data.begin() + offset;
150 memcpy (
d, newData, (
size_t) numBytes);
156 int startSample,
int numSamples,
int sampleDeltaToAdd)
160 const auto metadata = *
i;
162 if (metadata.samplePosition >= startSample + numSamples && numSamples >= 0)
165 addEvent (metadata.data, metadata.numBytes, metadata.samplePosition + sampleDeltaToAdd);
187 if (
data.size() == 0)
190 auto endData =
data.end();
192 for (
auto d =
data.begin();;)
196 if (nextOne >= endData)
231 midiData = metadata.data;
232 numBytes = metadata.numBytes;
233 samplePosition = metadata.samplePosition;
243 result = metadata.getMessage();
244 samplePosition = metadata.samplePosition;
255struct MidiBufferTest :
public UnitTest
261 void runTest()
override
263 beginTest (
"Clear messages");
267 const auto testBuffer = [&]
278 auto buffer = testBuffer;
279 buffer.clear (10, 0);
280 expectEquals (buffer.getNumEvents(), 4);
286 expectEquals (
buffer.getNumEvents(), 3);
292 expectEquals (
buffer.getNumEvents(), 3);
298 expectEquals (
buffer.getNumEvents(), 2);
304 expectEquals (
buffer.getNumEvents(), 1);
310 expectEquals (
buffer.getNumEvents(), 1);
316static MidiBufferTest midiBufferTest;
#define copy(x)
Definition ADnoteParameters.cpp:1011
Type jmin(const Type a, const Type b)
Definition MathsFunctions.h:60
#define noexcept
Definition DistrhoDefines.h:72
static void message(int level, const char *fmt,...)
Definition adplugdb.cpp:120
void setNextSamplePosition(int samplePosition) noexcept
Definition MidiBuffer.cpp:203
bool getNextEvent(MidiMessage &result, int &samplePosition) noexcept
Definition MidiBuffer.cpp:226
int getLastEventTime() const noexcept
Definition MidiBuffer.cpp:175
void addEvent(const MidiMessage &midiMessage, int sampleNumber)
Definition MidiBuffer.cpp:118
void addEvents(const MidiBuffer &otherBuffer, int startSample, int numSamples, int sampleDeltaToAdd)
Definition MidiBuffer.cpp:141
int getFirstEventTime() const noexcept
Definition MidiBuffer.cpp:170
void ensureSize(size_t minimumNumBytes)
Definition MidiBuffer.cpp:107
bool isEmpty() const noexcept
Definition MidiBuffer.cpp:108
MidiBuffer() noexcept
Definition MidiBuffer.cpp:89
int getNumEvents() const noexcept
Definition MidiBuffer.cpp:159
void clear() noexcept
Definition MidiBuffer.cpp:106
void swapWith(MidiBuffer &) noexcept
Definition MidiBuffer.cpp:105
static MidiMessage noteOn(int channel, int noteNumber, float velocity) noexcept
Definition MidiMessage.cpp:534
Iterator(const MidiBuffer &b) noexcept
Definition juce_MidiBuffer.cpp:215
const MidiBuffer & buffer
Definition juce_MidiBuffer.h:330
MidiBufferIterator iterator
Definition juce_MidiBuffer.h:331
Definition juce_MidiBuffer.h:145
MidiBufferIterator cbegin() const noexcept
Definition juce_MidiBuffer.h:265
MidiBufferIterator findNextSamplePosition(int samplePosition) const noexcept
Definition juce_MidiBuffer.cpp:203
MidiBufferIterator cend() const noexcept
Definition juce_MidiBuffer.h:268
bool addEvent(const MidiMessage &midiMessage, int sampleNumber)
Definition juce_MidiBuffer.cpp:122
MidiBuffer() noexcept=default
Array< uint8 > data
Definition juce_MidiBuffer.h:339
MidiBufferIterator begin() const noexcept
Definition juce_MidiBuffer.h:259
MidiBufferIterator end() const noexcept
Definition juce_MidiBuffer.h:262
Definition juce_MidiBuffer.h:79
MidiMessageMetadata reference
Definition juce_MidiBuffer.h:97
MidiBufferIterator & operator++() noexcept
Definition juce_MidiBuffer.cpp:83
Ptr data
Definition juce_MidiBuffer.h:125
reference operator*() const noexcept
Definition juce_MidiBuffer.cpp:96
MidiBufferIterator()=default
Definition juce_MidiMessage.h:35
static int getMessageLengthFromFirstByte(uint8 firstByte) noexcept
Definition juce_MidiMessage.cpp:104
static VariableLengthValue readVariableLengthValue(const uint8 *data, int maxBytesToUse) noexcept
Definition juce_MidiMessage.cpp:60
Definition juce_UnitTest.h:70
Definition juce_Variant.h:42
ValueUnion value
Definition juce_Variant.h:314
unsigned * m
Definition inflate.c:1559
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
virtual ASIOError start()=0
JSAMPIMAGE data
Definition jpeglib.h:945
#define JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE(...)
Definition juce_CompilerWarnings.h:181
#define JUCE_END_IGNORE_WARNINGS_GCC_LIKE
Definition juce_CompilerWarnings.h:182
#define JUCE_BEGIN_IGNORE_WARNINGS_MSVC(warnings)
Definition juce_CompilerWarnings.h:198
#define JUCE_END_IGNORE_WARNINGS_MSVC
Definition juce_CompilerWarnings.h:199
Definition juce_MidiBuffer.cpp:27
uint16 getEventTotalSize(const void *d) noexcept
Definition juce_MidiBuffer.cpp:38
static uint8 * findEventAfter(uint8 *d, uint8 *endData, int samplePosition) noexcept
Definition juce_MidiBuffer.cpp:73
static int findActualEventLength(const uint8 *data, int maxBytes) noexcept
Definition juce_MidiBuffer.cpp:43
int getEventTime(const void *d) noexcept
Definition juce_MidiBuffer.cpp:28
uint16 getEventDataSize(const void *d) noexcept
Definition juce_MidiBuffer.cpp:33
Definition juce_UnitTestCategories.h:27
JOCTET * buffer
Definition juce_JPEGLoader.cpp:302
Definition carla_juce.cpp:31
unsigned short uint16
Definition juce_MathsFunctions.h:41
Type readUnaligned(const void *srcPtr) noexcept
Definition juce_Memory.h:65
signed int int32
Definition juce_MathsFunctions.h:43
void writeUnaligned(void *dstPtr, Type value) noexcept
Definition juce_Memory.h:74
unsigned char uint8
Definition juce_MathsFunctions.h:37
int n
Definition crypt.c:458
memcpy(hh, h, RAND_HEAD_LEN)
int result
Definition process.c:1455
typedef int(UZ_EXP MsgFn)()
#define const
Definition zconf.h:137