Home Information Classes Download Usage Mail List Requirements Links FAQ Tutorial

# MidiFileIn.h

    00001 #ifndef STK_MIDIFILEIN_H
    00002 #define STK_MIDIFILEIN_H
    00003
    00004 #include "Stk.h"
    00005 #include <string>
    00006 #include <vector>
    00007 #include <fstream>
    00008 #include <sstream>
    00009
    00010 namespace stk {
    00011
    00012 /**********************************************************************/
    00027 /**********************************************************************/
    00028
    00029 class MidiFileIn : public Stk
    00030 {
    00031  public:
    00033
    00037   MidiFileIn( std::string fileName );
    00038
    00040   ~MidiFileIn();
    00041
    00043   int getFileFormat() const;
    00044
    00046   unsigned int getNumberOfTracks() const;
    00047
    00049
    00054   int getDivision() const;
    00055
    00057
    00061   void rewindTrack( unsigned int track = 0 );
    00062
    00064
    00071   double getTickSeconds( unsigned int track = 0 );
    00072
    00074
    00086   unsigned long getNextEvent( std::vector<unsigned char> *event, unsigned int track = 0 );
    00087
    00089
    00099   unsigned long getNextMidiEvent( std::vector<unsigned char> *midiEvent, unsigned int track = 0 );
    00100
    00101  protected:
    00102
    00103   // This protected class function is used for reading variable-length
    00104   // MIDI file values. It is assumed that this function is called with
    00105   // the file read pointer positioned at the start of a
    00106   // variable-length value.  The function returns true if the value is
    00107   // successfully parsed.  Otherwise, it returns false.
    00108   bool readVariableLength( unsigned long *value );
    00109
    00110   std::ifstream file_;
    00111   unsigned int nTracks_;
    00112   int format_;
    00113   int division_;
    00114   bool usingTimeCode_;
    00115   std::vector<double> tickSeconds_;
    00116   std::vector<long> trackPointers_;
    00117   std::vector<long> trackOffsets_;
    00118   std::vector<long> trackLengths_;
    00119   std::vector<char> trackStatus_;
    00120
    00121   // This structure and the following variables are used to save and
    00122   // keep track of a format 1 tempo map (and the initial tickSeconds
    00123   // parameter for formats 0 and 2).
    00124   struct TempoChange {
    00125     unsigned long count;
    00126     double tickSeconds;
    00127   };
    00128   std::vector<TempoChange> tempoEvents_;
    00129   std::vector<unsigned long> trackCounters_;
    00130   std::vector<unsigned int> trackTempoIndex_;
    00131 };
    00132
    00133 } // stk namespace
    00134
    00135 #endif

The Synthesis ToolKit in C++ (STK)
©1995-2010 Perry R. Cook and Gary P. Scavone. All Rights Reserved.