00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "MetaNumberEvent.h"
00024
00025 #include "Defines.h"
00026
00027 #include <iostream>
00028 #include <iomanip>
00029 using namespace std;
00030
00031 namespace MIDI
00032 {
00033 MetaNumberEvent::MetaNumberEvent()
00034 : MetaEvent(),_number(0),_length(0)
00035 { }
00036
00037 MetaNumberEvent::MetaNumberEvent(const MetaNumberEvent& o)
00038 : MetaEvent(o),_number(o._number),_length(o._length)
00039 { }
00040
00041 MetaNumberEvent::MetaNumberEvent(dword deltaTime,byte metaType,dword length,unsigned int value)
00042 : MetaEvent(deltaTime,metaType),_number(value),_length(length)
00043 { }
00044
00045 MetaNumberEvent::MetaNumberEvent(dword deltaTime,byte metaType,byte data[],dword length)
00046 : MetaEvent(deltaTime,metaType),_number(0),_length(length)
00047 {
00048 for(int i=0;i<_length;i++)
00049 {
00050 _number=(_number<<8);
00051 _number+=(unsigned int)data[i];
00052 }
00053 }
00054
00055 unsigned int MetaNumberEvent::number()
00056 {
00057 return _number;
00058 }
00059
00060 DataBuffer MetaNumberEvent::data()
00061 {
00062 DataBuffer data=MetaEvent::data();
00063
00064
00065 unsigned int num=_number;
00066
00067 data.write(_length);
00068
00069 byte bytedata[_length];
00070 for(int i=0;i<_length;i++)
00071 {
00072 bytedata[_length-1-i]=(num & 0xFF);
00073 num=(num>>8);
00074 }
00075
00076 data.write(bytedata,_length);
00077
00078 return data;
00079 }
00080
00081 void MetaNumberEvent::debug()
00082 {
00083 switch(metaType())
00084 {
00085 case MIDI_METAEVENT_SETTEMPO:
00086 cout << "\tSet Tempo" << endl;
00087 cout << "\t\tMicroseconds/Quarter-note: " << number() << endl;
00088 break;
00089 default:
00090 cout << "\tUnknown Meta Number Event 0x" << setbase(16) << (unsigned int)metaType() << endl;
00091 cout << "\t\t" << _number << endl;
00092 break;
00093 }
00094 }
00095 }