Public Member Functions

MidiFile Class Reference

Reads/writes standard midi format files. More...

List of all members.

Public Member Functions

 MidiFile ()
 Creates an empty MidiFile object.
 ~MidiFile ()
 Destructor.
int getNumTracks () const noexcept
 Returns the number of tracks in the file.
const MidiMessageSequencegetTrack (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.
double getLastTimestamp () const
 Returns the latest timestamp in any of the tracks.
bool readFrom (InputStream &sourceStream)
 Reads a midi file format stream.
bool writeTo (OutputStream &destStream)
 Writes the midi tracks as a standard midi file.
void convertTimestampTicksToSeconds ()
 Converts the timestamp of all the midi events from midi ticks to seconds.

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

Constructor & Destructor Documentation

MidiFile::MidiFile (  )

Creates an empty MidiFile object.

MidiFile::~MidiFile (  )

Destructor.


Member Function Documentation

int MidiFile::getNumTracks (  ) const

Returns the number of tracks in the file.

See also:
getTrack, addTrack
const MidiMessageSequence* MidiFile::getTrack ( int  index ) const

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

Returns:
a pointer to the track, or 0 if the index is out-of-range
See also:
getNumTracks, addTrack
void 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
void MidiFile::clear (  )

Removes all midi tracks from the file.

See also:
getNumTracks
short MidiFile::getTimeFormat (  ) const

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().

void MidiFile::setTicksPerQuarterNote ( int  ticksPerQuarterNote )

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:
ticksPerQuarterNotee.g. 96, 960
See also:
setSmpteTimeFormat
void MidiFile::setSmpteTimeFormat ( int  framesPerSecond,
int  subframeResolution 
)

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:
framesPerSecondmust be 24, 25, 29 or 30
subframeResolutionthe 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
void 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:
tempoChangeEventsa list to which all the events will be added
void 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:
timeSigEventsa list to which all the events will be added
double MidiFile::getLastTimestamp (  ) const

Returns the latest timestamp in any of the tracks.

(Useful for finding the length of the file).

bool MidiFile::readFrom ( InputStream sourceStream )

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.

Returns:
true if the stream was read successfully
bool MidiFile::writeTo ( OutputStream destStream )

Writes the midi tracks as a standard midi file.

Returns:
true if the operation succeeded.
void 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.


The documentation for this class was generated from the following file:
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines