Browse Source

Fix for MidiMessageSequence copy constructor

tags/2021-05-28
jules 11 years ago
parent
commit
a47426aee1
2 changed files with 25 additions and 24 deletions
  1. +13
    -12
      modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp
  2. +12
    -12
      modules/juce_audio_basics/midi/juce_MidiMessageSequence.h

+ 13
- 12
modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp View File

@@ -29,6 +29,7 @@ MidiMessageSequence::MidiMessageSequence()
MidiMessageSequence::MidiMessageSequence (const MidiMessageSequence& other) MidiMessageSequence::MidiMessageSequence (const MidiMessageSequence& other)
{ {
list.addCopiesOf (other.list); list.addCopiesOf (other.list);
updateMatchedPairs();
} }
MidiMessageSequence& MidiMessageSequence::operator= (const MidiMessageSequence& other) MidiMessageSequence& MidiMessageSequence::operator= (const MidiMessageSequence& other)
@@ -52,17 +53,17 @@ void MidiMessageSequence::clear()
list.clear(); list.clear();
} }
int MidiMessageSequence::getNumEvents() const
int MidiMessageSequence::getNumEvents() const noexcept
{ {
return list.size(); return list.size();
} }
MidiMessageSequence::MidiEventHolder* MidiMessageSequence::getEventPointer (const int index) const
MidiMessageSequence::MidiEventHolder* MidiMessageSequence::getEventPointer (const int index) const noexcept
{ {
return list [index]; return list [index];
} }
double MidiMessageSequence::getTimeOfMatchingKeyUp (const int index) const
double MidiMessageSequence::getTimeOfMatchingKeyUp (const int index) const noexcept
{ {
if (const MidiEventHolder* const meh = list [index]) if (const MidiEventHolder* const meh = list [index])
if (meh->noteOffObject != nullptr) if (meh->noteOffObject != nullptr)
@@ -71,7 +72,7 @@ double MidiMessageSequence::getTimeOfMatchingKeyUp (const int index) const
return 0.0; return 0.0;
} }
int MidiMessageSequence::getIndexOfMatchingKeyUp (const int index) const
int MidiMessageSequence::getIndexOfMatchingKeyUp (const int index) const noexcept
{ {
if (const MidiEventHolder* const meh = list [index]) if (const MidiEventHolder* const meh = list [index])
return list.indexOf (meh->noteOffObject); return list.indexOf (meh->noteOffObject);
@@ -79,12 +80,12 @@ int MidiMessageSequence::getIndexOfMatchingKeyUp (const int index) const
return -1; return -1;
} }
int MidiMessageSequence::getIndexOf (MidiEventHolder* const event) const
int MidiMessageSequence::getIndexOf (MidiEventHolder* const event) const noexcept
{ {
return list.indexOf (event); return list.indexOf (event);
} }
int MidiMessageSequence::getNextIndexAtTime (const double timeStamp) const
int MidiMessageSequence::getNextIndexAtTime (const double timeStamp) const noexcept
{ {
const int numEvents = list.size(); const int numEvents = list.size();
@@ -97,17 +98,17 @@ int MidiMessageSequence::getNextIndexAtTime (const double timeStamp) const
} }
//============================================================================== //==============================================================================
double MidiMessageSequence::getStartTime() const
double MidiMessageSequence::getStartTime() const noexcept
{ {
return getEventTime (0); return getEventTime (0);
} }
double MidiMessageSequence::getEndTime() const
double MidiMessageSequence::getEndTime() const noexcept
{ {
return getEventTime (list.size() - 1); return getEventTime (list.size() - 1);
} }
double MidiMessageSequence::getEventTime (const int index) const
double MidiMessageSequence::getEventTime (const int index) const noexcept
{ {
if (const MidiEventHolder* const meh = list [index]) if (const MidiEventHolder* const meh = list [index])
return meh->message.getTimeStamp(); return meh->message.getTimeStamp();
@@ -181,13 +182,13 @@ void MidiMessageSequence::addSequence (const MidiMessageSequence& other,
} }
//============================================================================== //==============================================================================
void MidiMessageSequence::sort()
void MidiMessageSequence::sort() noexcept
{ {
MidiMessageSequenceSorter sorter; MidiMessageSequenceSorter sorter;
list.sort (sorter, true); list.sort (sorter, true);
} }
void MidiMessageSequence::updateMatchedPairs()
void MidiMessageSequence::updateMatchedPairs() noexcept
{ {
for (int i = 0; i < list.size(); ++i) for (int i = 0; i < list.size(); ++i)
{ {
@@ -226,7 +227,7 @@ void MidiMessageSequence::updateMatchedPairs()
} }
} }
void MidiMessageSequence::addTimeToMessages (const double delta)
void MidiMessageSequence::addTimeToMessages (const double delta) noexcept
{ {
for (int i = list.size(); --i >= 0;) for (int i = list.size(); --i >= 0;)
{ {


+ 12
- 12
modules/juce_audio_basics/midi/juce_MidiMessageSequence.h View File

@@ -91,47 +91,47 @@ public:
void clear(); void clear();
/** Returns the number of events in the sequence. */ /** Returns the number of events in the sequence. */
int getNumEvents() const;
int getNumEvents() const noexcept;
/** Returns a pointer to one of the events. */ /** Returns a pointer to one of the events. */
MidiEventHolder* getEventPointer (int index) const;
MidiEventHolder* getEventPointer (int index) const noexcept;
/** Returns the time of the note-up that matches the note-on at this index. /** Returns the time of the note-up that matches the note-on at this index.
If the event at this index isn't a note-on, it'll just return 0. If the event at this index isn't a note-on, it'll just return 0.
@see MidiMessageSequence::MidiEventHolder::noteOffObject @see MidiMessageSequence::MidiEventHolder::noteOffObject
*/ */
double getTimeOfMatchingKeyUp (int index) const;
double getTimeOfMatchingKeyUp (int index) const noexcept;
/** Returns the index of the note-up that matches the note-on at this index. /** Returns the index of the note-up that matches the note-on at this index.
If the event at this index isn't a note-on, it'll just return -1. If the event at this index isn't a note-on, it'll just return -1.
@see MidiMessageSequence::MidiEventHolder::noteOffObject @see MidiMessageSequence::MidiEventHolder::noteOffObject
*/ */
int getIndexOfMatchingKeyUp (int index) const;
int getIndexOfMatchingKeyUp (int index) const noexcept;
/** Returns the index of an event. */ /** Returns the index of an event. */
int getIndexOf (MidiEventHolder* event) const;
int getIndexOf (MidiEventHolder* event) const noexcept;
/** Returns the index of the first event on or after the given timestamp. /** Returns the index of the first event on or after the given timestamp.
If the time is beyond the end of the sequence, this will return the If the time is beyond the end of the sequence, this will return the
number of events. number of events.
*/ */
int getNextIndexAtTime (double timeStamp) const;
int getNextIndexAtTime (double timeStamp) const noexcept;
//============================================================================== //==============================================================================
/** Returns the timestamp of the first event in the sequence. /** Returns the timestamp of the first event in the sequence.
@see getEndTime @see getEndTime
*/ */
double getStartTime() const;
double getStartTime() const noexcept;
/** Returns the timestamp of the last event in the sequence. /** Returns the timestamp of the last event in the sequence.
@see getStartTime @see getStartTime
*/ */
double getEndTime() const;
double getEndTime() const noexcept;
/** Returns the timestamp of the event at a given index. /** Returns the timestamp of the event at a given index.
If the index is out-of-range, this will return 0.0 If the index is out-of-range, this will return 0.0
*/ */
double getEventTime (int index) const;
double getEventTime (int index) const noexcept;
//============================================================================== //==============================================================================
/** Inserts a midi message into the sequence. /** Inserts a midi message into the sequence.
@@ -185,13 +185,13 @@ public:
will scan the list and make sure all the note-offs in the MidiEventHolder will scan the list and make sure all the note-offs in the MidiEventHolder
structures are pointing at the correct ones. structures are pointing at the correct ones.
*/ */
void updateMatchedPairs();
void updateMatchedPairs() noexcept;
/** Forces a sort of the sequence. /** Forces a sort of the sequence.
You may need to call this if you've manually modified the timestamps of some You may need to call this if you've manually modified the timestamps of some
events such that the overall order now needs updating. events such that the overall order now needs updating.
*/ */
void sort();
void sort() noexcept;
//============================================================================== //==============================================================================
/** Copies all the messages for a particular midi channel to another sequence. /** Copies all the messages for a particular midi channel to another sequence.
@@ -224,7 +224,7 @@ public:
/** Adds an offset to the timestamps of all events in the sequence. /** Adds an offset to the timestamps of all events in the sequence.
@param deltaTime the amount to add to each timestamp. @param deltaTime the amount to add to each timestamp.
*/ */
void addTimeToMessages (double deltaTime);
void addTimeToMessages (double deltaTime) noexcept;
//============================================================================== //==============================================================================
/** Scans through the sequence to determine the state of any midi controllers at /** Scans through the sequence to determine the state of any midi controllers at


Loading…
Cancel
Save