Loading...
Searching...
No Matches
juce::MidiFile Class Reference

## Detailed Description

Reads/writes standard midi format files.

To read a midi file, create a MidiFile object and call its readFrom() method. You can then get the individual midi tracks from it using the getTrack() method.

To write a file, create a MidiFile object, add some MidiMessageSequence objects to it using the addTrack() method, and then call its writeTo() method to stream it out.

See also
  MidiMessageSequence

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

- juce_audio_basics/midi/juce_MidiFile.h

## Public Member Functions

| MidiFile ()
| Creates an empty MidiFile object.
| MidiFile (const MidiFile &)
| Creates a copy of another MidiFile.
MidiFile & | operator= (const MidiFile &)
| Copies from another MidiFile object.
| MidiFile (MidiFile &&)
| Creates a copy of another MidiFile.
MidiFile & | operator= (MidiFile &&)
| Copies from another MidiFile object.
int | getNumTracks () const noexcept
| Returns the number of tracks in the file.
const MidiMessageSequence * | getTrack (int index) const noexcept
| Returns a pointer to one of the tracks in the file.
void | addTrack (const MidiMessageSequence &trackSequence)
| Adds a midi track to the file.
void | clear ()
| Removes all midi tracks from the file.
short | getTimeFormat () const noexcept
| Returns the raw time format code that will be written to a stream.
void | setTicksPerQuarterNote (int ticksPerQuarterNote) noexcept
| Sets the time format to use when this file is written to a stream.
void | setSmpteTimeFormat (int framesPerSecond, int subframeResolution) noexcept
| Sets the time format to use when this file is written to a stream.
void | findAllTempoEvents (MidiMessageSequence &tempoChangeEvents) const
| Makes a list of all the tempo-change meta-events from all tracks in the midi file.
void | findAllTimeSigEvents (MidiMessageSequence &timeSigEvents) const
| Makes a list of all the time-signature meta-events from all tracks in the midi file.
void | findAllKeySigEvents (MidiMessageSequence &keySigEvents) const
| Makes a list of all the key-signature meta-events from all tracks in the midi file.
double | getLastTimestamp () const
| Returns the latest timestamp in any of the tracks.
bool | readFrom (InputStream &sourceStream, bool createMatchingNoteOffs=true, int *midiFileType=nullptr)
| Reads a midi file format stream.
bool | writeTo (OutputStream &destStream, int midiFileType=1) const
| Writes the midi tracks as a standard midi file.
void | convertTimestampTicksToSeconds ()
| Converts the timestamp of all the midi events from midi ticks to seconds.

## Constructors and Destructors

## MidiFile() [1/3]

juce::MidiFile::MidiFile | ( |  | ) |

Creates an empty MidiFile object.

Referenced by convertTimestampTicksToSeconds(), MidiFile(), MidiFile(), operator=(), and operator=().

## MidiFile() [2/3]

juce::MidiFile::MidiFile | ( | const MidiFile & |  | ) |

Creates a copy of another MidiFile.

References MidiFile().

## MidiFile() [3/3]

juce::MidiFile::MidiFile | ( | MidiFile && |  | ) |

Creates a copy of another MidiFile.

References MidiFile().

## Member Functions

## operator=() [1/2]

MidiFile & juce::MidiFile::operator= | ( | const MidiFile & |  | ) |

Copies from another MidiFile object.

References MidiFile().

## operator=() [2/2]

MidiFile & juce::MidiFile::operator= | ( | MidiFile && |  | ) |

Copies from another MidiFile object.

References MidiFile().

## getNumTracks()

int juce::MidiFile::getNumTracks | ( |  | ) | const

noexcept

Returns the number of tracks in the file.

See also
  getTrack, addTrack

## getTrack()

const MidiMessageSequence * juce::MidiFile::getTrack | ( | int | index | ) | const

noexcept

Returns a pointer to one of the tracks in the file.

Returns
  a pointer to the track, or nullptr if the index is out-of-range

See also
  getNumTracks, addTrack

References getTrack().

Referenced by getTrack().

## addTrack()

void juce::MidiFile::addTrack | ( | const MidiMessageSequence & | trackSequence | ) |

Adds a midi track to the file.

This will make its own internal copy of the sequence that is passed-in.

See also
  getNumTracks, getTrack

References addTrack().

Referenced by addTrack().

## clear()

void juce::MidiFile::clear | ( |  | ) |

Removes all midi tracks from the file.

See also
  getNumTracks

References clear().

Referenced by clear().

## getTimeFormat()

short juce::MidiFile::getTimeFormat | ( |  | ) | const

noexcept

Returns the raw time format code that will be written to a stream.

After reading a midi file, this method will return the time-format that was read from the file's header. It can be changed using the setTicksPerQuarterNote() or setSmpteTimeFormat() methods.

If the value returned is positive, it indicates the number of midi ticks per quarter-note - see setTicksPerQuarterNote().

It it's negative, the upper byte indicates the frames-per-second (but negative), and the lower byte is the number of ticks per frame - see setSmpteTimeFormat().

References getTimeFormat().

Referenced by getTimeFormat().

## setTicksPerQuarterNote()

void juce::MidiFile::setTicksPerQuarterNote | ( | int | ticksPerQuarterNote | ) |

noexcept

Sets the time format to use when this file is written to a stream.

If this is called, the file will be written as bars/beats using the specified resolution, rather than SMPTE absolute times, as would be used if setSmpteTimeFormat() had been called instead.

Parameters

  ticksPerQuarterNote | e.g. 96, 960

See also
  setSmpteTimeFormat

References setTicksPerQuarterNote().

Referenced by setTicksPerQuarterNote().

## setSmpteTimeFormat()

void juce::MidiFile::setSmpteTimeFormat | ( | int | framesPerSecond,
|  | int | subframeResolution )

noexcept

Sets the time format to use when this file is written to a stream.

If this is called, the file will be written using absolute times, rather than bars/beats as would be the case if setTicksPerBeat() had been called instead.

Parameters

  framesPerSecond | must be 24, 25, 29 or 30
  subframeResolution | the sub-second resolution, e.g. 4 (midi time code), 8, 10, 80 (SMPTE bit resolution), or 100. For millisecond timing, setSmpteTimeFormat (25, 40)

See also
  setTicksPerBeat

References setSmpteTimeFormat().

Referenced by setSmpteTimeFormat().

## findAllTempoEvents()

void juce::MidiFile::findAllTempoEvents | ( | MidiMessageSequence & | tempoChangeEvents | ) | const

Makes a list of all the tempo-change meta-events from all tracks in the midi file.

Useful for finding the positions of all the tempo changes in a file.

Parameters

  tempoChangeEvents | a list to which all the events will be added

References findAllTempoEvents().

Referenced by findAllTempoEvents().

## findAllTimeSigEvents()

void juce::MidiFile::findAllTimeSigEvents | ( | MidiMessageSequence & | timeSigEvents | ) | const

Makes a list of all the time-signature meta-events from all tracks in the midi file.

Useful for finding the positions of all the tempo changes in a file.

Parameters

  timeSigEvents | a list to which all the events will be added

References findAllTimeSigEvents().

Referenced by findAllTimeSigEvents().

## findAllKeySigEvents()

void juce::MidiFile::findAllKeySigEvents | ( | MidiMessageSequence & | keySigEvents | ) | const

Makes a list of all the key-signature meta-events from all tracks in the midi file.

Parameters

  keySigEvents | a list to which all the events will be added

References findAllKeySigEvents().

Referenced by findAllKeySigEvents().

## getLastTimestamp()

double juce::MidiFile::getLastTimestamp | ( |  | ) | const

Returns the latest timestamp in any of the tracks.

(Useful for finding the length of the file).

References getLastTimestamp().

Referenced by getLastTimestamp().

## readFrom()

bool juce::MidiFile::readFrom | ( | InputStream & | sourceStream,
|  | bool | createMatchingNoteOffs = true,
|  | int * | midiFileType = nullptr )

Reads a midi file format stream.

After calling this, you can get the tracks that were read from the file by using the getNumTracks() and getTrack() methods.

The timestamps of the midi events in the tracks will represent their positions in terms of midi ticks. To convert them to seconds, use the convertTimestampTicksToSeconds() method.

Parameters

  sourceStream | the source stream
  createMatchingNoteOffs | if true, any missing note-offs for previous note-ons will be automatically added at the end of the file by calling MidiMessageSequence::updateMatchedPairs on each track.
  midiFileType | if not nullptr, the integer at this address will be set to 0, 1, or 2 depending on the type of the midi file

Returns
  true if the stream was read successfully

References readFrom().

Referenced by readFrom().

## writeTo()

bool juce::MidiFile::writeTo | ( | OutputStream & | destStream,
|  | int | midiFileType = 1 ) const

Writes the midi tracks as a standard midi file.

The midiFileType value is written as the file's format type, which can be 0, 1 or 2 - see the midi file spec for more info about that.

Parameters

  destStream | the destination stream
  midiFileType | the type of midi file

Returns
  true if the operation succeeded.

References writeTo().

Referenced by writeTo().

## convertTimestampTicksToSeconds()

void juce::MidiFile::convertTimestampTicksToSeconds | ( |  | ) |

Converts the timestamp of all the midi events from midi ticks to seconds.

This will use the midi time format and tempo/time signature info in the tracks to convert all the timestamps to absolute values in seconds.

References convertTimestampTicksToSeconds(), JUCE_LEAK_DETECTOR, and MidiFile().

Referenced by convertTimestampTicksToSeconds().

### Purchase

Get JUCE

### Discover

What's New in JUCE Features

### Learn

Documentaion Tutorials Made with JUCE Resources

### Support

JUCE Forum Newsletter Archive

### About

Contact Us JUCE Legal JUCE Licensing FAQ

### Events

Audio Developer Conference
© Raw Material Software Limited