mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
MidiBuffer: Add iterator compatible with C++11 range-for
This commit is contained in:
parent
e7e1de78fa
commit
eae9a10944
21 changed files with 259 additions and 205 deletions
|
|
@ -1834,12 +1834,8 @@ public:
|
|||
buffer.addEvents (MPEMessages::setLowerZone (5), 0, -1, 0);
|
||||
buffer.addEvents (MPEMessages::setUpperZone (6), 0, -1, 0);
|
||||
|
||||
MidiBuffer::Iterator iter (buffer);
|
||||
MidiMessage message;
|
||||
int samplePosition; // not actually used, so no need to initialise.
|
||||
|
||||
while (iter.getNextEvent (message, samplePosition))
|
||||
test.processNextMidiEvent (message);
|
||||
for (const auto metadata : buffer)
|
||||
test.processNextMidiEvent (metadata.getMessage());
|
||||
|
||||
expect (test.getZoneLayout().getLowerZone().isActive());
|
||||
expect (test.getZoneLayout().getUpperZone().isActive());
|
||||
|
|
|
|||
|
|
@ -216,14 +216,11 @@ private:
|
|||
void extractRawBinaryData (const MidiBuffer& midiBuffer, const uint8* bufferToCopyTo, std::size_t maxBytes)
|
||||
{
|
||||
std::size_t pos = 0;
|
||||
MidiBuffer::Iterator iter (midiBuffer);
|
||||
MidiMessage midiMessage;
|
||||
int samplePosition; // Note: Not actually used, so no need to initialise.
|
||||
|
||||
while (iter.getNextEvent (midiMessage, samplePosition))
|
||||
for (const auto metadata : midiBuffer)
|
||||
{
|
||||
const uint8* data = midiMessage.getRawData();
|
||||
std::size_t dataSize = (std::size_t) midiMessage.getRawDataSize();
|
||||
const uint8* data = metadata.data;
|
||||
std::size_t dataSize = (std::size_t) metadata.numBytes;
|
||||
|
||||
if (pos + dataSize > maxBytes)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -110,48 +110,47 @@ void MPESynthesiserBase::renderNextBlock (AudioBuffer<floatType>& outputAudio,
|
|||
// you must set the sample rate before using this!
|
||||
jassert (sampleRate != 0);
|
||||
|
||||
MidiBuffer::Iterator midiIterator (inputMidi);
|
||||
midiIterator.setNextSamplePosition (startSample);
|
||||
const auto midiIterator = inputMidi.findNextSamplePosition (startSample);
|
||||
|
||||
bool firstEvent = true;
|
||||
int midiEventPos;
|
||||
MidiMessage m;
|
||||
|
||||
const ScopedLock sl (noteStateLock);
|
||||
|
||||
while (numSamples > 0)
|
||||
{
|
||||
if (! midiIterator.getNextEvent (m, midiEventPos))
|
||||
if (midiIterator == inputMidi.cend())
|
||||
{
|
||||
renderNextSubBlock (outputAudio, startSample, numSamples);
|
||||
return;
|
||||
}
|
||||
|
||||
auto samplesToNextMidiMessage = midiEventPos - startSample;
|
||||
const auto metadata = *midiIterator;
|
||||
auto samplesToNextMidiMessage = metadata.samplePosition - startSample;
|
||||
|
||||
if (samplesToNextMidiMessage >= numSamples)
|
||||
{
|
||||
renderNextSubBlock (outputAudio, startSample, numSamples);
|
||||
handleMidiEvent (m);
|
||||
handleMidiEvent (metadata.getMessage());
|
||||
break;
|
||||
}
|
||||
|
||||
if (samplesToNextMidiMessage < ((firstEvent && ! subBlockSubdivisionIsStrict) ? 1 : minimumSubBlockSize))
|
||||
{
|
||||
handleMidiEvent (m);
|
||||
handleMidiEvent (metadata.getMessage());
|
||||
continue;
|
||||
}
|
||||
|
||||
firstEvent = false;
|
||||
|
||||
renderNextSubBlock (outputAudio, startSample, samplesToNextMidiMessage);
|
||||
handleMidiEvent (m);
|
||||
handleMidiEvent (metadata.getMessage());
|
||||
startSample += samplesToNextMidiMessage;
|
||||
numSamples -= samplesToNextMidiMessage;
|
||||
}
|
||||
|
||||
while (midiIterator.getNextEvent (m, midiEventPos))
|
||||
handleMidiEvent (m);
|
||||
std::for_each (midiIterator,
|
||||
inputMidi.cend(),
|
||||
[&] (const MidiMessageMetadata& meta) { handleMidiEvent (meta.getMessage()); });
|
||||
}
|
||||
|
||||
// explicit instantiation for supported float types:
|
||||
|
|
|
|||
|
|
@ -169,12 +169,8 @@ void MPEZoneLayout::processPitchbendRangeRpnMessage (MidiRPNMessage rpn)
|
|||
|
||||
void MPEZoneLayout::processNextMidiBuffer (const MidiBuffer& buffer)
|
||||
{
|
||||
MidiBuffer::Iterator iter (buffer);
|
||||
MidiMessage message;
|
||||
int samplePosition; // not actually used, so no need to initialise.
|
||||
|
||||
while (iter.getNextEvent (message, samplePosition))
|
||||
processNextMidiEvent (message);
|
||||
for (const auto metadata : buffer)
|
||||
processNextMidiEvent (metadata.getMessage());
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue