TracktionEngine
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | List of all members
tracktion::engine::MidiList Class Reference

Public Types

enum class  NoteAutomationType { none , expression }
 
enum class  TimeBase { seconds , beats , beatsRaw }
 Determines MIDI event timing. More...
 

Public Member Functions

 MidiList ()
 
 MidiList (const juce::ValueTree &, juce::UndoManager *)
 
 ~MidiList ()
 
void copyFrom (const MidiList &, juce::UndoManager *)
 Clears the current list and copies the others contents and properties. More...
 
void addFrom (const MidiList &, juce::UndoManager *)
 Adds copies of the events in another list to this one. More...
 
const juce::Array< MidiNote * > & getNotes () const
 
const juce::Array< MidiControllerEvent * > & getControllerEvents () const
 
const juce::Array< MidiSysexEvent * > & getSysexEvents () const
 
bool isAttachedToClip () const noexcept
 
void setCompList (bool shouldBeComp) noexcept
 
bool isCompList () const noexcept
 
MidiChannel getMidiChannel () const
 Gets the list's midi channel number. More...
 
void setMidiChannel (MidiChannel chanNum)
 Gives the list a channel number that it'll use when generating real midi messages. More...
 
juce::String getImportedMidiTrackName () const noexcept
 If the data was pulled from a midi file then this may have a useful name describing its purpose. More...
 
juce::String getImportedFileName () const noexcept
 Set the imported file name if you want it to appear on the clip. More...
 
void setImportedFileName (const juce::String &n)
 
bool isEmpty () const noexcept
 
void clear (juce::UndoManager *)
 
void trimOutside (BeatPosition firstBeat, BeatPosition lastBeat, juce::UndoManager *)
 
void moveAllBeatPositions (BeatDuration deltaBeats, juce::UndoManager *)
 
void rescale (double factor, juce::UndoManager *)
 
int getNumNotes () const
 
MidiNotegetNote (int index) const
 
MidiNotegetNoteFor (const juce::ValueTree &)
 
juce::Range< int > getNoteNumberRange () const
 
BeatPosition getFirstBeatNumber () const
 Beat number of first event in the list. More...
 
BeatPosition getLastBeatNumber () const
 Beat number of last event in the list. More...
 
MidiNoteaddNote (const MidiNote &, juce::UndoManager *)
 
MidiNoteaddNote (int pitch, BeatPosition startBeat, BeatDuration lengthInBeats, int velocity, int colourIndex, juce::UndoManager *)
 
void removeNote (MidiNote &, juce::UndoManager *)
 
void removeAllNotes (juce::UndoManager *)
 
int getNumControllerEvents () const
 
MidiControllerEventgetControllerEvent (int index) const
 
MidiControllerEventgetControllerEventAt (BeatPosition, int controllerType) const
 
MidiControllerEventaddControllerEvent (const MidiControllerEvent &, juce::UndoManager *)
 
MidiControllerEventaddControllerEvent (BeatPosition, int controllerType, int controllerValue, juce::UndoManager *)
 
MidiControllerEventaddControllerEvent (BeatPosition, int controllerType, int controllerValue, int metadata, juce::UndoManager *)
 
void removeControllerEvent (MidiControllerEvent &, juce::UndoManager *)
 
void removeAllControllers (juce::UndoManager *)
 
bool containsController (int controllerType) const
 True if there are any controller events of this type. More...
 
void setControllerValueAt (int controllerType, BeatPosition beatNumber, int newValue, juce::UndoManager *)
 
void removeControllersBetween (int controllerType, BeatPosition beatNumberStart, BeatPosition beatNumberEnd, juce::UndoManager *)
 
void insertRepeatedControllerValue (int type, int startVal, int endVal, BeatRange rangeBeats, BeatDuration intervalBeats, juce::UndoManager *)
 Adds controller values over a specified time, at an even interval. More...
 
int getNumSysExEvents () const
 
MidiSysexEventgetSysexEvent (int index) const
 
MidiSysexEventgetSysexEventUnchecked (int index) const
 
MidiSysexEventgetSysexEventFor (const juce::ValueTree &) const
 
MidiSysexEventaddSysExEvent (const juce::MidiMessage &, BeatPosition, juce::UndoManager *)
 
void removeSysExEvent (const MidiSysexEvent &, juce::UndoManager *)
 
void removeAllSysexes (juce::UndoManager *)
 
void importMidiSequence (const juce::MidiMessageSequence &, Edit *, TimePosition editTimeOfListTimeZero, juce::UndoManager *)
 Adds the contents of a MidiMessageSequence to this list. More...
 
void importFromEditTimeSequenceWithNoteExpression (const juce::MidiMessageSequence &, Edit *, TimePosition editTimeOfListTimeZero, juce::UndoManager *)
 Adds the contents of a MidiSequence to this list assigning MPE expression changes to EXP expression. More...
 
juce::MidiMessageSequence exportToPlaybackMidiSequence (MidiClip &, TimeBase, bool generateMPE) const
 Creates a juce::MidiMessageSequence from the list in order to be played back The sequence will be in terms of edit time, either in seconds or beats. More...
 

Static Public Member Functions

static juce::ValueTree createMidiList ()
 
static juce::MidiMessageSequence createDefaultPlaybackMidiSequence (const MidiList &, MidiClip &, TimeBase, bool generateMPE)
 Creates the default MIDI playback sequence. More...
 
static bool looksLikeMPEData (const juce::File &)
 
static bool fileHasTempoChanges (const juce::File &)
 
static bool readSeparateTracksFromFile (const juce::File &, juce::OwnedArray< MidiList > &lists, juce::Array< BeatPosition > &tempoChangeBeatNumbers, juce::Array< double > &bpms, juce::Array< int > &numerators, juce::Array< int > &denominators, BeatDuration &songLength, bool importAsNoteExpression)
 
template<typename Type >
static void sortMidiEventsByTime (juce::Array< Type > &notes)
 
template<typename Type >
static void sortMidiEventsByNoteNumber (juce::Array< Type > &notes)
 

Public Attributes

juce::ValueTree state
 

Static Public Attributes

static constexpr const double defaultInitialTimbreValue = 0.5
 
static constexpr const double defaultInitialPitchBendValue = 0
 
static constexpr const double defaultInitialPressureValue = 0
 

Member Enumeration Documentation

◆ NoteAutomationType

Enumerator
none 

No automation, add the sequence as plain MIDI with the channel of the clip.

expression 

Add the automation as EXP assuming the source sequence is MPE MIDI.

◆ TimeBase

Determines MIDI event timing.

Enumerator
seconds 
beats 

Event times will be in seconds relative to the Edit timeline.

beatsRaw 

Event times will be in beats relative to the Edit timeline.

Event times will be in beats with no quantisation or groove.

Constructor & Destructor Documentation

◆ MidiList() [1/2]

tracktion::engine::MidiList::MidiList ( )

◆ MidiList() [2/2]

tracktion::engine::MidiList::MidiList ( const juce::ValueTree &  ,
juce::UndoManager *   
)

◆ ~MidiList()

tracktion::engine::MidiList::~MidiList ( )

Member Function Documentation

◆ createMidiList()

static juce::ValueTree tracktion::engine::MidiList::createMidiList ( )
static

◆ copyFrom()

void tracktion::engine::MidiList::copyFrom ( const MidiList ,
juce::UndoManager *   
)

Clears the current list and copies the others contents and properties.

◆ addFrom()

void tracktion::engine::MidiList::addFrom ( const MidiList ,
juce::UndoManager *   
)

Adds copies of the events in another list to this one.

◆ getNotes()

const juce::Array<MidiNote*>& tracktion::engine::MidiList::getNotes ( ) const

Referenced by getNote(), and getNumNotes().

◆ getControllerEvents()

const juce::Array<MidiControllerEvent*>& tracktion::engine::MidiList::getControllerEvents ( ) const

◆ getSysexEvents()

const juce::Array<MidiSysexEvent*>& tracktion::engine::MidiList::getSysexEvents ( ) const

◆ isAttachedToClip()

bool tracktion::engine::MidiList::isAttachedToClip ( ) const
noexcept

References state.

◆ setCompList()

void tracktion::engine::MidiList::setCompList ( bool  shouldBeComp)
noexcept

◆ isCompList()

bool tracktion::engine::MidiList::isCompList ( ) const
noexcept

◆ getMidiChannel()

MidiChannel tracktion::engine::MidiList::getMidiChannel ( ) const

Gets the list's midi channel number.

Value is 1 to 16.

Referenced by tracktion::engine::MidiClip::getMidiChannel().

◆ setMidiChannel()

void tracktion::engine::MidiList::setMidiChannel ( MidiChannel  chanNum)

Gives the list a channel number that it'll use when generating real midi messages.

Value is 1 to 16.

Referenced by tracktion::engine::MidiClip::setMidiChannel().

◆ getImportedMidiTrackName()

juce::String tracktion::engine::MidiList::getImportedMidiTrackName ( ) const
noexcept

If the data was pulled from a midi file then this may have a useful name describing its purpose.

◆ getImportedFileName()

juce::String tracktion::engine::MidiList::getImportedFileName ( ) const
noexcept

Set the imported file name if you want it to appear on the clip.

◆ setImportedFileName()

void tracktion::engine::MidiList::setImportedFileName ( const juce::String &  n)

◆ isEmpty()

bool tracktion::engine::MidiList::isEmpty ( ) const
noexcept

References state.

◆ clear()

void tracktion::engine::MidiList::clear ( juce::UndoManager *  )

◆ trimOutside()

void tracktion::engine::MidiList::trimOutside ( BeatPosition  firstBeat,
BeatPosition  lastBeat,
juce::UndoManager *   
)

◆ moveAllBeatPositions()

void tracktion::engine::MidiList::moveAllBeatPositions ( BeatDuration  deltaBeats,
juce::UndoManager *   
)

◆ rescale()

void tracktion::engine::MidiList::rescale ( double  factor,
juce::UndoManager *   
)

◆ getNumNotes()

int tracktion::engine::MidiList::getNumNotes ( ) const

References getNotes().

◆ getNote()

MidiNote* tracktion::engine::MidiList::getNote ( int  index) const

References getNotes().

◆ getNoteFor()

MidiNote* tracktion::engine::MidiList::getNoteFor ( const juce::ValueTree &  )

◆ getNoteNumberRange()

juce::Range<int> tracktion::engine::MidiList::getNoteNumberRange ( ) const

◆ getFirstBeatNumber()

BeatPosition tracktion::engine::MidiList::getFirstBeatNumber ( ) const

Beat number of first event in the list.

◆ getLastBeatNumber()

BeatPosition tracktion::engine::MidiList::getLastBeatNumber ( ) const

Beat number of last event in the list.

◆ addNote() [1/2]

MidiNote* tracktion::engine::MidiList::addNote ( const MidiNote ,
juce::UndoManager *   
)

◆ addNote() [2/2]

MidiNote* tracktion::engine::MidiList::addNote ( int  pitch,
BeatPosition  startBeat,
BeatDuration  lengthInBeats,
int  velocity,
int  colourIndex,
juce::UndoManager *   
)

◆ removeNote()

void tracktion::engine::MidiList::removeNote ( MidiNote ,
juce::UndoManager *   
)

◆ removeAllNotes()

void tracktion::engine::MidiList::removeAllNotes ( juce::UndoManager *  )

◆ getNumControllerEvents()

int tracktion::engine::MidiList::getNumControllerEvents ( ) const

References getControllerEvents().

◆ getControllerEvent()

MidiControllerEvent* tracktion::engine::MidiList::getControllerEvent ( int  index) const

References getControllerEvents().

◆ getControllerEventAt()

MidiControllerEvent* tracktion::engine::MidiList::getControllerEventAt ( BeatPosition  ,
int  controllerType 
) const

◆ addControllerEvent() [1/3]

MidiControllerEvent* tracktion::engine::MidiList::addControllerEvent ( const MidiControllerEvent ,
juce::UndoManager *   
)

◆ addControllerEvent() [2/3]

MidiControllerEvent* tracktion::engine::MidiList::addControllerEvent ( BeatPosition  ,
int  controllerType,
int  controllerValue,
juce::UndoManager *   
)

◆ addControllerEvent() [3/3]

MidiControllerEvent* tracktion::engine::MidiList::addControllerEvent ( BeatPosition  ,
int  controllerType,
int  controllerValue,
int  metadata,
juce::UndoManager *   
)

◆ removeControllerEvent()

void tracktion::engine::MidiList::removeControllerEvent ( MidiControllerEvent ,
juce::UndoManager *   
)

◆ removeAllControllers()

void tracktion::engine::MidiList::removeAllControllers ( juce::UndoManager *  )

◆ containsController()

bool tracktion::engine::MidiList::containsController ( int  controllerType) const

True if there are any controller events of this type.

◆ setControllerValueAt()

void tracktion::engine::MidiList::setControllerValueAt ( int  controllerType,
BeatPosition  beatNumber,
int  newValue,
juce::UndoManager *   
)

◆ removeControllersBetween()

void tracktion::engine::MidiList::removeControllersBetween ( int  controllerType,
BeatPosition  beatNumberStart,
BeatPosition  beatNumberEnd,
juce::UndoManager *   
)

◆ insertRepeatedControllerValue()

void tracktion::engine::MidiList::insertRepeatedControllerValue ( int  type,
int  startVal,
int  endVal,
BeatRange  rangeBeats,
BeatDuration  intervalBeats,
juce::UndoManager *   
)

Adds controller values over a specified time, at an even interval.

◆ getNumSysExEvents()

int tracktion::engine::MidiList::getNumSysExEvents ( ) const

References getSysexEvents().

◆ getSysexEvent()

MidiSysexEvent* tracktion::engine::MidiList::getSysexEvent ( int  index) const

References getSysexEvents().

◆ getSysexEventUnchecked()

MidiSysexEvent* tracktion::engine::MidiList::getSysexEventUnchecked ( int  index) const

References getSysexEvents().

◆ getSysexEventFor()

MidiSysexEvent* tracktion::engine::MidiList::getSysexEventFor ( const juce::ValueTree &  ) const

◆ addSysExEvent()

MidiSysexEvent& tracktion::engine::MidiList::addSysExEvent ( const juce::MidiMessage &  ,
BeatPosition  ,
juce::UndoManager *   
)

◆ removeSysExEvent()

void tracktion::engine::MidiList::removeSysExEvent ( const MidiSysexEvent ,
juce::UndoManager *   
)

◆ removeAllSysexes()

void tracktion::engine::MidiList::removeAllSysexes ( juce::UndoManager *  )

◆ importMidiSequence()

void tracktion::engine::MidiList::importMidiSequence ( const juce::MidiMessageSequence &  ,
Edit ,
TimePosition  editTimeOfListTimeZero,
juce::UndoManager *   
)

Adds the contents of a MidiMessageSequence to this list.

If an Edit is provided, it'll be used to convert the timestamps from possible seconds to beats

◆ importFromEditTimeSequenceWithNoteExpression()

void tracktion::engine::MidiList::importFromEditTimeSequenceWithNoteExpression ( const juce::MidiMessageSequence &  ,
Edit ,
TimePosition  editTimeOfListTimeZero,
juce::UndoManager *   
)

Adds the contents of a MidiSequence to this list assigning MPE expression changes to EXP expression.

◆ exportToPlaybackMidiSequence()

juce::MidiMessageSequence tracktion::engine::MidiList::exportToPlaybackMidiSequence ( MidiClip ,
TimeBase  ,
bool  generateMPE 
) const

Creates a juce::MidiMessageSequence from the list in order to be played back The sequence will be in terms of edit time, either in seconds or beats.

Parameters
MidiClipThe clip boundries to use and the groove template if the clip contains one
TimeBaseThe format the exported MIDI event times will be in
generateMPEWhether the sequence should create MPE or standard MIDI

◆ createDefaultPlaybackMidiSequence()

static juce::MidiMessageSequence tracktion::engine::MidiList::createDefaultPlaybackMidiSequence ( const MidiList ,
MidiClip ,
TimeBase  ,
bool  generateMPE 
)
static

Creates the default MIDI playback sequence.

Referenced by tracktion::engine::EngineBehaviour::createPlaybackMidiSequence().

◆ looksLikeMPEData()

static bool tracktion::engine::MidiList::looksLikeMPEData ( const juce::File &  )
static

◆ fileHasTempoChanges()

static bool tracktion::engine::MidiList::fileHasTempoChanges ( const juce::File &  )
static

◆ readSeparateTracksFromFile()

static bool tracktion::engine::MidiList::readSeparateTracksFromFile ( const juce::File &  ,
juce::OwnedArray< MidiList > &  lists,
juce::Array< BeatPosition > &  tempoChangeBeatNumbers,
juce::Array< double > &  bpms,
juce::Array< int > &  numerators,
juce::Array< int > &  denominators,
BeatDuration &  songLength,
bool  importAsNoteExpression 
)
static

◆ sortMidiEventsByTime()

template<typename Type >
static void tracktion::engine::MidiList::sortMidiEventsByTime ( juce::Array< Type > &  notes)
static

◆ sortMidiEventsByNoteNumber()

template<typename Type >
static void tracktion::engine::MidiList::sortMidiEventsByNoteNumber ( juce::Array< Type > &  notes)
static

Member Data Documentation

◆ defaultInitialTimbreValue

constexpr const double tracktion::engine::MidiList::defaultInitialTimbreValue = 0.5
staticconstexpr

◆ defaultInitialPitchBendValue

constexpr const double tracktion::engine::MidiList::defaultInitialPitchBendValue = 0
staticconstexpr

◆ defaultInitialPressureValue

constexpr const double tracktion::engine::MidiList::defaultInitialPressureValue = 0
staticconstexpr

◆ state

juce::ValueTree tracktion::engine::MidiList::state

Referenced by isAttachedToClip(), and isEmpty().


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