Holds a sequence of time-stamped midi events. More...
Public Member Functions | |
MidiBuffer () noexcept=default | |
Creates an empty MidiBuffer. | |
MidiBuffer (const MidiMessage &message) noexcept | |
Creates a MidiBuffer containing a single midi message. | |
void | clear () noexcept |
Removes all events from the buffer. | |
void | clear (int start, int numSamples) |
Removes all events between two times from the buffer. | |
bool | isEmpty () const noexcept |
Returns true if the buffer is empty. | |
int | getNumEvents () const noexcept |
Counts the number of events in the buffer. | |
bool | addEvent (const MidiMessage &midiMessage, int sampleNumber) |
Adds an event to the buffer. | |
bool | addEvent (const void *rawMidiData, int maxBytesOfMidiData, int sampleNumber) |
Adds an event to the buffer from raw midi data. | |
void | addEvents (const MidiBuffer &otherBuffer, int startSample, int numSamples, int sampleDeltaToAdd) |
Adds some events from another buffer to this one. | |
int | getFirstEventTime () const noexcept |
Returns the sample number of the first event in the buffer. | |
int | getLastEventTime () const noexcept |
Returns the sample number of the last event in the buffer. | |
void | swapWith (MidiBuffer &) noexcept |
Exchanges the contents of this buffer with another one. | |
void | ensureSize (size_t minimumNumBytes) |
Preallocates some memory for the buffer to use. | |
MidiBufferIterator | begin () const noexcept |
Get a read-only iterator pointing to the beginning of this buffer. | |
MidiBufferIterator | end () const noexcept |
Get a read-only iterator pointing one past the end of this buffer. | |
MidiBufferIterator | cbegin () const noexcept |
Get a read-only iterator pointing to the beginning of this buffer. | |
MidiBufferIterator | cend () const noexcept |
Get a read-only iterator pointing one past the end of this buffer. | |
MidiBufferIterator | findNextSamplePosition (int samplePosition) const noexcept |
Get an iterator pointing to the first event with a timestamp greater-than or equal-to samplePosition . | |
Public Attributes | |
Array< uint8 > | data |
The raw data holding this buffer. | |
Holds a sequence of time-stamped midi events.
Analogous to the AudioBuffer, this holds a set of midi events with integer time-stamps. The buffer is kept sorted in order of the time-stamps.
If you're working with a sequence of midi events that may need to be manipulated or read/written to a midi file, then MidiMessageSequence is probably a more appropriate container. MidiBuffer is designed for lower-level streams of raw midi data.
|
defaultnoexcept |
Creates an empty MidiBuffer.
Referenced by addEvents(), findNextSamplePosition(), MidiBuffer(), and swapWith().
|
explicitnoexcept |
Creates a MidiBuffer containing a single midi message.
References MidiBuffer().
|
noexcept |
void MidiBuffer::clear | ( | int | start, |
int | numSamples ) |
Removes all events between two times from the buffer.
All events for which (start <= event position < start + numSamples) will be removed.
References clear().
|
noexcept |
Returns true if the buffer is empty.
To actually retrieve the events, use a MidiBufferIterator object
References isEmpty().
Referenced by isEmpty().
|
noexcept |
Counts the number of events in the buffer.
This is actually quite a slow operation, as it has to iterate through all the events, so you might prefer to call isEmpty() if that's all you need to know.
References getNumEvents().
Referenced by getNumEvents().
bool MidiBuffer::addEvent | ( | const MidiMessage & | midiMessage, |
int | sampleNumber ) |
Adds an event to the buffer.
The sample number will be used to determine the position of the event in the buffer, which is always kept sorted. The MidiMessage's timestamp is ignored.
If an event is added whose sample position is the same as one or more events already in the buffer, the new event will be placed after the existing ones.
To retrieve events, use a MidiBufferIterator object.
Returns true on success, or false on failure.
References addEvent().
Referenced by addEvent(), and addEvent().
bool MidiBuffer::addEvent | ( | const void * | rawMidiData, |
int | maxBytesOfMidiData, | ||
int | sampleNumber ) |
Adds an event to the buffer from raw midi data.
The sample number will be used to determine the position of the event in the buffer, which is always kept sorted.
If an event is added whose sample position is the same as one or more events already in the buffer, the new event will be placed after the existing ones.
The event data will be inspected to calculate the number of bytes in length that the midi event really takes up, so maxBytesOfMidiData may be longer than the data that actually gets stored. E.g. if you pass in a note-on and a length of 4 bytes, it'll actually only store 3 bytes. If the midi data is invalid, it might not add an event at all.
To retrieve events, use a MidiBufferIterator object.
Returns true on success, or false on failure.
References addEvent().
void MidiBuffer::addEvents | ( | const MidiBuffer & | otherBuffer, |
int | startSample, | ||
int | numSamples, | ||
int | sampleDeltaToAdd ) |
Adds some events from another buffer to this one.
otherBuffer | the buffer containing the events you want to add |
startSample | the lowest sample number in the source buffer for which events should be added. Any source events whose timestamp is less than this will be ignored |
numSamples | the valid range of samples from the source buffer for which events should be added - i.e. events in the source buffer whose timestamp is greater than or equal to (startSample + numSamples) will be ignored. If this value is less than 0, all events after startSample will be taken. |
sampleDeltaToAdd | a value which will be added to the source timestamps of the events that are added to this buffer |
References addEvents(), and MidiBuffer().
Referenced by addEvents().
|
noexcept |
Returns the sample number of the first event in the buffer.
If the buffer's empty, this will just return 0.
References getFirstEventTime().
Referenced by getFirstEventTime().
|
noexcept |
Returns the sample number of the last event in the buffer.
If the buffer's empty, this will just return 0.
References getLastEventTime().
Referenced by getLastEventTime().
|
noexcept |
Exchanges the contents of this buffer with another one.
This is a quick operation, because no memory allocating or copying is done, it just swaps the internal state of the two buffers.
References MidiBuffer(), and swapWith().
Referenced by swapWith().
void MidiBuffer::ensureSize | ( | size_t | minimumNumBytes | ) |
Preallocates some memory for the buffer to use.
This helps to avoid needing to reallocate space when the buffer has messages added to it.
References ensureSize().
Referenced by ensureSize().
|
noexcept |
|
noexcept |
Get a read-only iterator pointing one past the end of this buffer.
References cend().
|
noexcept |
|
noexcept |
|
noexcept |
Get an iterator pointing to the first event with a timestamp greater-than or equal-to samplePosition
.
References JUCE_API, and MidiBuffer().