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
10namespace stk {
11
12/**********************************************************************/
27/**********************************************************************/
28
29class MidiFileIn : public Stk
30{
31 public:
33
37 MidiFileIn( std::string fileName );
38
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
A standard MIDI file reading/parsing class.
Definition: MidiFileIn.h:30
unsigned long getNextEvent(std::vector< unsigned char > *event, unsigned int track=0)
Fill the user-provided vector with the next event in the specified track and return the event delta-t...
int getFileFormat() const
Return the MIDI file format (0, 1, or 2).
Definition: MidiFileIn.h:43
void rewindTrack(unsigned int track=0)
Move the specified track event reader to the beginning of its track.
~MidiFileIn()
Class destructor.
double getTickSeconds(unsigned int track=0)
Get the current value, in seconds, of delta-time ticks for the specified track.
unsigned long getNextMidiEvent(std::vector< unsigned char > *midiEvent, unsigned int track=0)
Fill the user-provided vector with the next MIDI channel event in the specified track and return the ...
int getDivision() const
Return the MIDI file division value from the file header.
Definition: MidiFileIn.h:54
MidiFileIn(std::string fileName)
Default constructor.
unsigned int getNumberOfTracks() const
Return the number of tracks in the MIDI file.
Definition: MidiFileIn.h:46
STK base class.
Definition: Stk.h:136
The STK namespace.
Definition: ADSR.h:6

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