00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "Header.h"
00024
00025 #include <iostream>
00026 #include <iomanip>
00027 using namespace std;
00028
00029 namespace MIDI
00030 {
00031 Header::Header()
00032 : Chunk(),_formatType(0),_numTracks(0),_timeDivisions(0)
00033 { }
00034
00035
00036 Header::Header(byte* data,dword size)
00037 : Chunk(),_formatType(0),_numTracks(0),_timeDivisions(0)
00038 {
00039 _formatType=byte2word(data);
00040 _numTracks=byte2word(data+2);
00041 _timeDivisions=byte2word(data+4);
00042 }
00043
00044 unsigned int Header::numTracks()
00045 {
00046 return _numTracks;
00047 }
00048
00049 void Header::setNumTracks(unsigned int numTracks)
00050 {
00051 _numTracks=numTracks;
00052 }
00053
00054 int Header::formatType()
00055 {
00056 return _formatType;
00057 }
00058
00059 int Header::timeDivisions()
00060 {
00061 return _timeDivisions;
00062 }
00063
00064 unsigned int Header::ticksPerBeat()
00065 {
00066 if( 0x8000 & _timeDivisions ) return 0;
00067
00068 return (0x7FFF & _timeDivisions);
00069 }
00070
00071 void Header::setTicksPerBeat(unsigned int ticksPerBeat)
00072 {
00073 _timeDivisions=ticksPerBeat;
00074 }
00075
00076 unsigned int Header::framesPerSecond()
00077 {
00078 if( !(0x8000 & _timeDivisions) ) return 0;
00079
00080 return (0x7F00 & _timeDivisions)>>8;
00081 }
00082
00083 void Header::setFramesPerSecond(unsigned int framesPerSecond)
00084 {
00085 _timeDivisions=( 0x8000 | (framesPerSecond<<8) | (0x00FF & _timeDivisions) );
00086 }
00087
00088 unsigned int Header::ticksPerFrame()
00089 {
00090 if( !(0x8000 & _timeDivisions) ) return 0;
00091
00092 return (0x00FF & _timeDivisions);
00093 }
00094
00095 void Header::setTicksPerFrame(unsigned int ticksPerFrame)
00096 {
00097 _timeDivisions=( 0x8000 | ticksPerFrame | (0x7F00 & _timeDivisions) );
00098 }
00099
00100
00101 DataBuffer Header::data()
00102 {
00103 DataBuffer data(6);
00104
00105 data.write(word2byte(_formatType),2);
00106 data.write(word2byte(_numTracks),2);
00107 data.write(word2byte(_timeDivisions),2);
00108
00109 return data;
00110 }
00111 }