#include <MIDIFileReader.h>

Inheritance diagram for MIDIFileReader:
Inheritance graph
Collaboration diagram for MIDIFileReader:
Collaboration graph

Public Member Functions

 MIDIFileReader (QString path, MIDIFileImportPreferenceAcquirer *pref, sv_samplerate_t mainModelSampleRate, ProgressReporter *reporter=0)
 
virtual ~MIDIFileReader ()
 
bool isOK () const override
 Return true if the file appears to be of the correct type. More...
 
QString getError () const override
 
Modelload () const override
 Read the file and return the corresponding data model. More...
 

Protected Types

enum  MIDIFileFormatType { MIDI_SINGLE_TRACK_FILE = 0x00, MIDI_SIMULTANEOUS_TRACK_FILE = 0x01, MIDI_SEQUENTIAL_TRACK_FILE = 0x02, MIDI_FILE_BAD_FORMAT = 0xFF }
 
typedef std::vector< MIDIEvent * > MIDITrack
 
typedef std::map< unsigned int, MIDITrackMIDIComposition
 
typedef std::pair< RealTime, double > TempoChange
 
typedef std::map< unsigned long, TempoChangeTempoMap
 

Protected Member Functions

bool parseFile ()
 
bool parseHeader (const std::string &midiHeader)
 
bool parseTrack (unsigned int &trackNum)
 
ModelloadTrack (unsigned int trackNum, Model *existingModel=0, int minProgress=0, int progressAmount=100) const
 
bool consolidateNoteOffEvents (unsigned int track)
 
void updateTempoMap (unsigned int track)
 
void calculateTempoTimestamps ()
 
RealTime getTimeForMIDITime (unsigned long midiTime) const
 
int midiBytesToInt (const std::string &bytes)
 
long midiBytesToLong (const std::string &bytes)
 
long getNumberFromMIDIBytes (int firstByte=-1)
 
MIDIByte getMIDIByte ()
 
std::string getMIDIBytes (unsigned long bytes)
 
bool skipToNextTrack ()
 

Protected Attributes

bool m_smpte
 
int m_timingDivision
 
int m_fps
 
int m_subframes
 
MIDIFileFormatType m_format
 
unsigned int m_numberOfTracks
 
long m_trackByteCount
 
bool m_decrementCount
 
std::map< int, QString > m_trackNames
 
std::set< unsigned int > m_loadableTracks
 
std::set< unsigned int > m_percussionTracks
 
MIDIComposition m_midiComposition
 
TempoMap m_tempoMap
 
QString m_path
 
std::ifstream * m_midiFile
 
size_t m_fileSize
 
QString m_error
 
sv_samplerate_t m_mainModelSampleRate
 
MIDIFileImportPreferenceAcquirerm_acquirer
 

Detailed Description

Definition at line 58 of file MIDIFileReader.h.

Member Typedef Documentation

typedef std::vector<MIDIEvent *> MIDIFileReader::MIDITrack
protected

Definition at line 74 of file MIDIFileReader.h.

typedef std::map<unsigned int, MIDITrack> MIDIFileReader::MIDIComposition
protected

Definition at line 75 of file MIDIFileReader.h.

typedef std::pair<RealTime, double> MIDIFileReader::TempoChange
protected

Definition at line 76 of file MIDIFileReader.h.

typedef std::map<unsigned long, TempoChange> MIDIFileReader::TempoMap
protected

Definition at line 77 of file MIDIFileReader.h.

Member Enumeration Documentation

Enumerator
MIDI_SINGLE_TRACK_FILE 
MIDI_SIMULTANEOUS_TRACK_FILE 
MIDI_SEQUENTIAL_TRACK_FILE 
MIDI_FILE_BAD_FORMAT 

Definition at line 79 of file MIDIFileReader.h.

Constructor & Destructor Documentation

MIDIFileReader::MIDIFileReader ( QString  path,
MIDIFileImportPreferenceAcquirer pref,
sv_samplerate_t  mainModelSampleRate,
ProgressReporter reporter = 0 
)

Definition at line 59 of file MIDIFileReader.cpp.

References m_error, and parseFile().

MIDIFileReader::~MIDIFileReader ( )
virtual

Definition at line 82 of file MIDIFileReader.cpp.

References m_midiComposition.

Member Function Documentation

bool MIDIFileReader::isOK ( ) const
overridevirtual

Return true if the file appears to be of the correct type.

The DataFileReader will be constructed by passing a file path to its constructor. If the file can at that time be determined to be not of a type that this reader can read, it should return false in response to any subsequent call to isOK().

If the file is apparently of the correct type, isOK() should return true; if it turns out that the file cannot after all be read (because it's corrupted or the detection misfired), then the read() function may return NULL.

Implements DataFileReader.

Definition at line 99 of file MIDIFileReader.cpp.

References m_error.

Referenced by load().

QString MIDIFileReader::getError ( ) const
overridevirtual

Reimplemented from DataFileReader.

Definition at line 105 of file MIDIFileReader.cpp.

References m_error.

Model * MIDIFileReader::load ( ) const
overridevirtual

Read the file and return the corresponding data model.

This function is not expected to be thread-safe or reentrant. This function may be interactive (i.e. it's permitted to pop up dialogs and windows and ask the user to specify any details that can't be automatically extracted from the file).

Return NULL if the file cannot be parsed at all (although it's preferable to return a partial model and warn the user).

Caller owns the returned model and must delete it after use.

Implements DataFileReader.

Definition at line 802 of file MIDIFileReader.cpp.

References MIDIFileImportPreferenceAcquirer::getTrackImportPreference(), MIDIFileImportPreferenceAcquirer::ImportNothing, isOK(), loadTrack(), m_acquirer, m_loadableTracks, m_path, m_percussionTracks, m_trackNames, MIDIFileImportPreferenceAcquirer::MergeAllNonPercussionTracks, MIDIFileImportPreferenceAcquirer::MergeAllTracks, and MIDIFileImportPreferenceAcquirer::showError().

bool MIDIFileReader::parseHeader ( const std::string &  midiHeader)
protected
bool MIDIFileReader::consolidateNoteOffEvents ( unsigned int  track)
protected
void MIDIFileReader::updateTempoMap ( unsigned int  track)
protected
void MIDIFileReader::calculateTempoTimestamps ( )
protected

Definition at line 739 of file MIDIFileReader.cpp.

References RealTime::fromSeconds(), m_tempoMap, m_timingDivision, and RealTime::zeroTime.

Referenced by parseFile().

RealTime MIDIFileReader::getTimeForMIDITime ( unsigned long  midiTime) const
protected

Definition at line 765 of file MIDIFileReader.cpp.

References RealTime::fromSeconds(), m_tempoMap, m_timingDivision, and RealTime::zeroTime.

Referenced by loadTrack().

int MIDIFileReader::midiBytesToInt ( const std::string &  bytes)
protected

Definition at line 126 of file MIDIFileReader.cpp.

Referenced by parseHeader().

long MIDIFileReader::midiBytesToLong ( const std::string &  bytes)
protected

Definition at line 111 of file MIDIFileReader.cpp.

Referenced by parseHeader(), and skipToNextTrack().

long MIDIFileReader::getNumberFromMIDIBytes ( int  firstByte = -1)
protected

Definition at line 213 of file MIDIFileReader.cpp.

References getMIDIByte(), and m_midiFile.

Referenced by parseTrack().

MIDIByte MIDIFileReader::getMIDIByte ( )
protected

Definition at line 143 of file MIDIFileReader.cpp.

References m_decrementCount, m_midiFile, and m_trackByteCount.

Referenced by getNumberFromMIDIBytes(), and parseTrack().

string MIDIFileReader::getMIDIBytes ( unsigned long  bytes)
protected

Definition at line 172 of file MIDIFileReader.cpp.

References m_decrementCount, m_midiFile, and m_trackByteCount.

Referenced by parseFile(), parseTrack(), and skipToNextTrack().

bool MIDIFileReader::skipToNextTrack ( )
protected

Member Data Documentation

bool MIDIFileReader::m_smpte
protected

Definition at line 112 of file MIDIFileReader.h.

Referenced by loadTrack(), and parseHeader().

int MIDIFileReader::m_timingDivision
protected

Definition at line 113 of file MIDIFileReader.h.

Referenced by calculateTempoTimestamps(), getTimeForMIDITime(), and parseHeader().

int MIDIFileReader::m_fps
protected

Definition at line 114 of file MIDIFileReader.h.

Referenced by loadTrack(), and parseHeader().

int MIDIFileReader::m_subframes
protected

Definition at line 115 of file MIDIFileReader.h.

Referenced by loadTrack(), and parseHeader().

MIDIFileFormatType MIDIFileReader::m_format
protected

Definition at line 116 of file MIDIFileReader.h.

Referenced by parseFile(), and parseHeader().

unsigned int MIDIFileReader::m_numberOfTracks
protected

Definition at line 117 of file MIDIFileReader.h.

Referenced by parseFile(), and parseHeader().

long MIDIFileReader::m_trackByteCount
protected

Definition at line 119 of file MIDIFileReader.h.

Referenced by getMIDIByte(), getMIDIBytes(), parseFile(), parseTrack(), and skipToNextTrack().

bool MIDIFileReader::m_decrementCount
protected

Definition at line 120 of file MIDIFileReader.h.

Referenced by getMIDIByte(), getMIDIBytes(), and skipToNextTrack().

std::map<int, QString> MIDIFileReader::m_trackNames
protected

Definition at line 122 of file MIDIFileReader.h.

Referenced by load(), and parseTrack().

std::set<unsigned int> MIDIFileReader::m_loadableTracks
protected

Definition at line 123 of file MIDIFileReader.h.

Referenced by load(), and parseFile().

std::set<unsigned int> MIDIFileReader::m_percussionTracks
protected

Definition at line 124 of file MIDIFileReader.h.

Referenced by load(), and parseTrack().

MIDIComposition MIDIFileReader::m_midiComposition
protected
TempoMap MIDIFileReader::m_tempoMap
protected

Definition at line 126 of file MIDIFileReader.h.

Referenced by calculateTempoTimestamps(), getTimeForMIDITime(), and updateTempoMap().

QString MIDIFileReader::m_path
protected

Definition at line 128 of file MIDIFileReader.h.

Referenced by load(), loadTrack(), and parseFile().

std::ifstream* MIDIFileReader::m_midiFile
protected
size_t MIDIFileReader::m_fileSize
protected

Definition at line 130 of file MIDIFileReader.h.

Referenced by parseFile().

QString MIDIFileReader::m_error
protected

Definition at line 131 of file MIDIFileReader.h.

Referenced by getError(), isOK(), MIDIFileReader(), and parseFile().

sv_samplerate_t MIDIFileReader::m_mainModelSampleRate
protected

Definition at line 132 of file MIDIFileReader.h.

Referenced by loadTrack().

MIDIFileImportPreferenceAcquirer* MIDIFileReader::m_acquirer
protected

Definition at line 134 of file MIDIFileReader.h.

Referenced by load().


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