diff --git a/modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp b/modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp index 94a6b9bcfd..51efd7f1f1 100644 --- a/modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp +++ b/modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp @@ -276,14 +276,11 @@ void MidiMessageSequence::deleteSysExMessages() } //============================================================================== -void MidiMessageSequence::createControllerUpdatesForTime (const int channelNumber, - const double time, - OwnedArray& dest) +void MidiMessageSequence::createControllerUpdatesForTime (const int channelNumber, const double time, Array& dest) { bool doneProg = false; bool donePitchWheel = false; - Array doneControllers; - doneControllers.ensureStorageAllocated (32); + bool doneControllers[128] = { 0 }; for (int i = list.size(); --i >= 0;) { @@ -291,28 +288,25 @@ void MidiMessageSequence::createControllerUpdatesForTime (const int channelNumbe if (mm.isForChannel (channelNumber) && mm.getTimeStamp() <= time) { - if (mm.isProgramChange()) + if (mm.isProgramChange() && ! doneProg) { - if (! doneProg) - { - dest.add (new MidiMessage (mm, 0.0)); - doneProg = true; - } + doneProg = true; + dest.add (MidiMessage (mm, 0.0)); + } + else if (mm.isPitchWheel() && ! donePitchWheel) + { + donePitchWheel = true; + dest.add (MidiMessage (mm, 0.0)); } else if (mm.isController()) { - if (! doneControllers.contains (mm.getControllerNumber())) + const int controllerNumber = mm.getControllerNumber(); + jassert (isPositiveAndBelow (controllerNumber, 128)); + + if (! doneControllers[controllerNumber]) { - dest.add (new MidiMessage (mm, 0.0)); - doneControllers.add (mm.getControllerNumber()); - } - } - else if (mm.isPitchWheel()) - { - if (! donePitchWheel) - { - dest.add (new MidiMessage (mm, 0.0)); - donePitchWheel = true; + doneControllers[controllerNumber] = true; + dest.add (MidiMessage (mm, 0.0)); } } } diff --git a/modules/juce_audio_basics/midi/juce_MidiMessageSequence.h b/modules/juce_audio_basics/midi/juce_MidiMessageSequence.h index b62940c2d0..fe11dd1ba2 100644 --- a/modules/juce_audio_basics/midi/juce_MidiMessageSequence.h +++ b/modules/juce_audio_basics/midi/juce_MidiMessageSequence.h @@ -247,7 +247,7 @@ public: state at the required time. */ void createControllerUpdatesForTime (int channelNumber, double time, - OwnedArray& resultMessages); + Array& resultMessages); //============================================================================== /** Swaps this sequence with another one. */