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--2017 Perry R. Cook and Gary P. Scavone. All Rights Reserved.