MIDIReader.hxx
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __MIDIReader__
00025 #define __MIDIReader__
00026
00027 #include <stdio.h>
00028 #include <CLAM/MIDIDataTypes.hxx>
00029 #include "MIDIChunkType.hxx"
00030
00031 namespace MIDI
00032 {
00033 class Song;
00034
00035 class Reader
00036
00037
00038 {
00039 private:
00040 FILE* mFile;
00041 int mCnt;
00042 public:
00043 Reader(const char* filename)
00044 {
00045 mFile = fopen(filename,"rb");
00046 }
00047 bool Ok(void)
00048 {
00049 return mFile!=NULL;
00050 }
00051 Byte GetByte(void)
00052 {
00053 mCnt++;
00054 return fgetc(mFile);
00055 }
00056 unsigned int GetInt(void)
00057 {
00058 unsigned int val;
00059
00060 val = GetByte();
00061 val <<=8;
00062 val |= GetByte();
00063 val <<=8;
00064 val |= GetByte();
00065 val <<=8;
00066 val |= GetByte();
00067
00068 return val;
00069 }
00070 unsigned short GetShort(void)
00071 {
00072 unsigned short val;
00073
00074 val = GetByte();
00075 val <<= 8;
00076 val |= GetByte();
00077
00078 return val;
00079 }
00080
00081 ChunkType GetChunkType(void)
00082 {
00083 Byte bytes[4];
00084 for (int i=0;i<4;i++) bytes[i] = GetByte();
00085 return ChunkType(bytes);
00086 }
00087
00088 unsigned int GetVarLength(void)
00089 {
00090
00091 unsigned int ret = 0;
00092 Byte tmp;
00093
00094 tmp = GetByte();
00095 ret = tmp&0x7F;
00096 while (tmp&0x80)
00097 {
00098 tmp = GetByte();
00099 ret <<= 7;
00100 ret |= (tmp&0x7F);
00101 }
00102 return ret;
00103 }
00104
00105 class Error
00106 {
00107 public:
00108 const char* mStr;
00109 Error(const char* str):mStr(str) { printf(str); }
00110 };
00111
00112 void Read(Song& s);
00113 };
00114
00115 }
00116
00117 #endif
00118