OpenShot Audio Library | OpenShotAudio  0.6.0
juce_MidiMessageSequence.h
1 /*
2  ==============================================================================
3 
4  This file is part of the JUCE library.
5  Copyright (c) 2022 - Raw Material Software Limited
6 
7  JUCE is an open source library subject to commercial or open-source
8  licensing.
9 
10  The code included in this file is provided under the terms of the ISC license
11  http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12  To use, copy, modify, and/or distribute this software for any purpose with or
13  without fee is hereby granted provided that the above copyright notice and
14  this permission notice appear in all copies.
15 
16  JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17  EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18  DISCLAIMED.
19 
20  ==============================================================================
21 */
22 
23 namespace juce
24 {
25 
26 //==============================================================================
37 class JUCE_API MidiMessageSequence
38 {
39 public:
40  //==============================================================================
43 
46 
48  MidiMessageSequence& operator= (const MidiMessageSequence&);
49 
52 
54  MidiMessageSequence& operator= (MidiMessageSequence&&) noexcept;
55 
56  //==============================================================================
65  {
66  public:
67  //==============================================================================
70 
79  MidiEventHolder* noteOffObject = nullptr;
80 
81  private:
82  //==============================================================================
83  friend class MidiMessageSequence;
86  JUCE_LEAK_DETECTOR (MidiEventHolder)
87  };
88 
89  //==============================================================================
91  void clear();
92 
94  int getNumEvents() const noexcept;
95 
97  MidiEventHolder* getEventPointer (int index) const noexcept;
98 
100  MidiEventHolder** begin() noexcept;
101 
103  MidiEventHolder* const* begin() const noexcept;
104 
106  MidiEventHolder** end() noexcept;
107 
109  MidiEventHolder* const* end() const noexcept;
110 
115  double getTimeOfMatchingKeyUp (int index) const noexcept;
116 
121  int getIndexOfMatchingKeyUp (int index) const noexcept;
122 
124  int getIndexOf (const MidiEventHolder* event) const noexcept;
125 
130  int getNextIndexAtTime (double timeStamp) const noexcept;
131 
132  //==============================================================================
136  double getStartTime() const noexcept;
137 
141  double getEndTime() const noexcept;
142 
146  double getEventTime (int index) const noexcept;
147 
148  //==============================================================================
161  MidiEventHolder* addEvent (const MidiMessage& newMessage, double timeAdjustment = 0);
162 
175  MidiEventHolder* addEvent (MidiMessage&& newMessage, double timeAdjustment = 0);
176 
185  void deleteEvent (int index, bool deleteMatchingNoteUp);
186 
200  void addSequence (const MidiMessageSequence& other,
201  double timeAdjustmentDelta,
202  double firstAllowableDestTime,
203  double endOfAllowableDestTimes);
204 
212  void addSequence (const MidiMessageSequence& other,
213  double timeAdjustmentDelta);
214 
215  //==============================================================================
222  void updateMatchedPairs() noexcept;
223 
228  void sort() noexcept;
229 
230  //==============================================================================
239  void extractMidiChannelMessages (int channelNumberToExtract,
240  MidiMessageSequence& destSequence,
241  bool alsoIncludeMetaEvents) const;
242 
248  void extractSysExMessages (MidiMessageSequence& destSequence) const;
249 
253  void deleteMidiChannelMessages (int channelNumberToRemove);
254 
256  void deleteSysExMessages();
257 
261  void addTimeToMessages (double deltaTime) noexcept;
262 
263  //==============================================================================
298  void createControllerUpdatesForTime (int channelNumber, double time,
299  Array<MidiMessage>& resultMessages);
300 
301  //==============================================================================
303  void swapWith (MidiMessageSequence&) noexcept;
304 
305 private:
306  //==============================================================================
307  friend class MidiFile;
309 
310  MidiEventHolder* addEvent (MidiEventHolder*, double);
311 
312  JUCE_LEAK_DETECTOR (MidiMessageSequence)
313 };
314 
315 } // namespace juce