Loading...
Searching...
No Matches
juce::MidiBuffer Class Reference

`#include <juce_MidiBuffer.h>`

## Classes

class | Iterator

## Public Member Functions

| MidiBuffer () noexcept=default
| MidiBuffer (const MidiMessage &message) noexcept
void | clear () noexcept
void | clear (int start, int numSamples)
bool | isEmpty () const noexcept
int | getNumEvents () const noexcept
bool | addEvent (const MidiMessage &midiMessage, int sampleNumber)
bool | addEvent (const void *rawMidiData, int maxBytesOfMidiData, int sampleNumber)
void | addEvents (const MidiBuffer &otherBuffer, int startSample, int numSamples, int sampleDeltaToAdd)
int | getFirstEventTime () const noexcept
int | getLastEventTime () const noexcept
void | swapWith (MidiBuffer &) noexcept
void | ensureSize (size_t minimumNumBytes)
MidiBufferIterator | begin () const noexcept
MidiBufferIterator | end () const noexcept
MidiBufferIterator | cbegin () const noexcept
MidiBufferIterator | cend () const noexcept
MidiBufferIterator | findNextSamplePosition (int samplePosition) const noexcept

## Public Attributes

Array< uint8 > | data

## Detailed Description

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.

See also
  MidiMessage

Definition at line 144 of file juce_MidiBuffer.h.

## Constructor & Destructor Documentation

## MidiBuffer() [1/2]

juce::MidiBuffer::MidiBuffer | ( |  | ) |

default noexcept

Creates an empty MidiBuffer.

Referenced by addEvents(), juce::MidiBuffer::Iterator::Iterator(), MidiBuffer(), and swapWith().

## MidiBuffer() [2/2]

juce::MidiBuffer::MidiBuffer | ( | const MidiMessage & | message | ) |

explicit noexcept

Creates a MidiBuffer containing a single midi message.

Definition at line 104 of file juce_MidiBuffer.cpp.

## Member Function Documentation

## addEvent() [1/2]

bool juce::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.

Definition at line 122 of file juce_MidiBuffer.cpp.

Referenced by addEvent(), addEvents(), juce::MidiRPNGenerator::generate(), MidiBuffer(), MidiBuffer(), juce::MidiKeyboardState::processNextMidiBuffer(), and juce::MidiMessageCollector::removeNextBlockOfMessages().

## addEvent() [2/2]

bool juce::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.

Definition at line 127 of file juce_MidiBuffer.cpp.

## addEvents()

void juce::MidiBuffer::addEvents | ( | const MidiBuffer & | otherBuffer,
|  | int | startSample,
|  | int | numSamples,
|  | int | sampleDeltaToAdd )

Adds some events from another buffer to this one.

Parameters

  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

Definition at line 155 of file juce_MidiBuffer.cpp.

Referenced by juce::MPEMessages::clearAllZones(), MidiBuffer(), and juce::MPEMessages::setZoneLayout().

## begin()

MidiBufferIterator juce::MidiBuffer::begin | ( |  | ) | const

inline noexcept

Get a read-only iterator pointing to the beginning of this buffer.

Definition at line 259 of file juce_MidiBuffer.h.

Referenced by begin(), and juce::MidiBuffer::Iterator::Iterator().

## cbegin()

MidiBufferIterator juce::MidiBuffer::cbegin | ( |  | ) | const

inline noexcept

Get a read-only iterator pointing to the beginning of this buffer.

Definition at line 265 of file juce_MidiBuffer.h.

Referenced by begin(), and findNextSamplePosition().

## cend()

MidiBufferIterator juce::MidiBuffer::cend | ( |  | ) | const

inline noexcept

Get a read-only iterator pointing one past the end of this buffer.

Definition at line 268 of file juce_MidiBuffer.h.

Referenced by addEvents(), end(), findNextSamplePosition(), and juce::MPESynthesiserBase::renderNextBlock().

## clear() [1/2]

void juce::MidiBuffer::clear | ( |  | ) |

noexcept

Removes all events from the buffer.

Definition at line 110 of file juce_MidiBuffer.cpp.

Referenced by MidiBuffer().

## clear() [2/2]

void juce::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.

Definition at line 114 of file juce_MidiBuffer.cpp.

## end()

MidiBufferIterator juce::MidiBuffer::end | ( |  | ) | const

inline noexcept

Get a read-only iterator pointing one past the end of this buffer.

Definition at line 262 of file juce_MidiBuffer.h.

Referenced by clear(), and getNumEvents().

## ensureSize()

void juce::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.

Definition at line 111 of file juce_MidiBuffer.cpp.

Referenced by MidiBuffer().

## findNextSamplePosition()

MidiBufferIterator juce::MidiBuffer::findNextSamplePosition | ( | int | samplePosition | ) | const

noexcept

Get an iterator pointing to the first event with a timestamp greater-than or equal-to samplePosition.

Definition at line 203 of file juce_MidiBuffer.cpp.

Referenced by addEvents(), and juce::MPESynthesiserBase::renderNextBlock().

## getFirstEventTime()

int juce::MidiBuffer::getFirstEventTime | ( |  | ) | const

noexcept

Returns the sample number of the first event in the buffer. If the buffer's empty, this will just return 0.

Definition at line 180 of file juce_MidiBuffer.cpp.

Referenced by MidiBuffer().

## getLastEventTime()

int juce::MidiBuffer::getLastEventTime | ( |  | ) | const

noexcept

Returns the sample number of the last event in the buffer. If the buffer's empty, this will just return 0.

Definition at line 185 of file juce_MidiBuffer.cpp.

Referenced by MidiBuffer().

## getNumEvents()

int juce::MidiBuffer::getNumEvents | ( |  | ) | const

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.

Definition at line 169 of file juce_MidiBuffer.cpp.

Referenced by MidiBuffer().

## isEmpty()

bool juce::MidiBuffer::isEmpty | ( |  | ) | const

noexcept

Returns true if the buffer is empty. To actually retrieve the events, use a MidiBufferIterator object

Definition at line 112 of file juce_MidiBuffer.cpp.

Referenced by MidiBuffer().

## swapWith()

void juce::MidiBuffer::swapWith | ( | MidiBuffer & | other | ) |

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.

Definition at line 109 of file juce_MidiBuffer.cpp.

Referenced by MidiBuffer().

## Member Data Documentation

## data

Array<uint8> juce::MidiBuffer::data

The raw data holding this buffer. Obviously access to this data is provided at your own risk. Its internal format could change in future, so don't write code that relies on it!

Definition at line 339 of file juce_MidiBuffer.h.

Referenced by addEvent(), cbegin(), cend(), clear(), clear(), ensureSize(), getFirstEventTime(), getLastEventTime(), getNumEvents(), isEmpty(), juce::MidiBuffer::Iterator::Iterator(), and swapWith().

The documentation for this class was generated from the following files:

- juce_MidiBuffer.h
- juce_MidiBuffer.cpp