Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial


MidiFileIn.h
1 #ifndef STK_MIDIFILEIN_H
2 #define STK_MIDIFILEIN_H
3 
4 #include "Stk.h"
5 #include <string>
6 #include <vector>
7 #include <fstream>
8 #include <sstream>
9 
10 namespace stk {
11 
12 /**********************************************************************/
27 /**********************************************************************/
28 
29 class MidiFileIn : public Stk
30 {
31  public:
33 
37  MidiFileIn( std::string fileName );
38 
40  ~MidiFileIn();
41 
43  int getFileFormat() const { return format_; };
44 
46  unsigned int getNumberOfTracks() const { return nTracks_; };
47 
49 
54  int getDivision() const { return division_; };
55 
57 
61  void rewindTrack( unsigned int track = 0 );
62 
64 
71  double getTickSeconds( unsigned int track = 0 );
72 
74 
86  unsigned long getNextEvent( std::vector<unsigned char> *event, unsigned int track = 0 );
87 
89 
99  unsigned long getNextMidiEvent( std::vector<unsigned char> *midiEvent, unsigned int track = 0 );
100 
101  protected:
102 
103  // This protected class function is used for reading variable-length
104  // MIDI file values. It is assumed that this function is called with
105  // the file read pointer positioned at the start of a
106  // variable-length value. The function returns true if the value is
107  // successfully parsed. Otherwise, it returns false.
108  bool readVariableLength( unsigned long *value );
109 
110  std::ifstream file_;
111  unsigned int nTracks_;
112  int format_;
113  int division_;
114  bool usingTimeCode_;
115  std::vector<double> tickSeconds_;
116  std::vector<long> trackPointers_;
117  std::vector<long> trackOffsets_;
118  std::vector<long> trackLengths_;
119  std::vector<char> trackStatus_;
120 
121  // This structure and the following variables are used to save and
122  // keep track of a format 1 tempo map (and the initial tickSeconds
123  // parameter for formats 0 and 2).
124  struct TempoChange {
125  unsigned long count;
126  double tickSeconds;
127  };
128  std::vector<TempoChange> tempoEvents_;
129  std::vector<unsigned long> trackCounters_;
130  std::vector<unsigned int> trackTempoIndex_;
131 };
132 
133 } // stk namespace
134 
135 #endif

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