136 lines
2.6 KiB
C++
136 lines
2.6 KiB
C++
#ifndef _MIDISEQ_PUREHEADER_HPP_
|
|
#define _MIDISEQ_PUREHEADER_HPP_
|
|
#include <string.h>
|
|
#ifndef _COMMON_WINDOWS_HPP_
|
|
#include <common/windows.hpp>
|
|
#endif
|
|
#ifndef _COMMON_FILEIO_HPP_
|
|
#include <common/fileio.hpp>
|
|
#endif
|
|
|
|
class PureHeader
|
|
{
|
|
public:
|
|
enum Method{TimeCode,DeltaTime,Unset};
|
|
enum MIDIFormat{SingleMultiChannel,SimultaneousTracks,SequentialTracks};
|
|
PureHeader(void);
|
|
PureHeader(const PureHeader &somePureHeader);
|
|
virtual ~PureHeader();
|
|
PureHeader &operator=(const PureHeader &somePureHeader);
|
|
WORD operator==(const PureHeader &somePureHeader);
|
|
DWORD lengthData(void)const;
|
|
MIDIFormat smfType(void)const;
|
|
USHORT tracks(void)const;
|
|
USHORT method(void)const;
|
|
Method timingMethod(void)const;
|
|
String toString(void)const;
|
|
protected:
|
|
WORD readHeader(FileIO &midiFile);
|
|
private:
|
|
enum {MaxHeaderIDLength=4};
|
|
void method(USHORT method);
|
|
void lengthData(DWORD lengthData);
|
|
void smfType(USHORT smfType);
|
|
void tracks(USHORT smfType);
|
|
|
|
char mHeader[MaxHeaderIDLength];
|
|
DWORD mLengthData;
|
|
USHORT mSMFType;
|
|
USHORT mTracks;
|
|
USHORT mMethod;
|
|
};
|
|
|
|
inline
|
|
PureHeader::PureHeader(void)
|
|
: mLengthData(0L), mSMFType(0), mTracks(0), mMethod(0)
|
|
{
|
|
::memset(mHeader,0,sizeof(mHeader));
|
|
}
|
|
|
|
inline
|
|
PureHeader::PureHeader(const PureHeader &somePureHeader)
|
|
{
|
|
*this=somePureHeader;
|
|
}
|
|
|
|
inline
|
|
PureHeader::~PureHeader()
|
|
{
|
|
}
|
|
|
|
inline
|
|
PureHeader &PureHeader::operator=(const PureHeader &somePureHeader)
|
|
{
|
|
lengthData(somePureHeader.lengthData());
|
|
smfType(somePureHeader.smfType());
|
|
tracks(somePureHeader.tracks());
|
|
method(somePureHeader.method());
|
|
::memcpy(mHeader,somePureHeader.mHeader,sizeof(mHeader));
|
|
return *this;
|
|
}
|
|
|
|
inline
|
|
WORD PureHeader::operator==(const PureHeader &somePureHeader)
|
|
{
|
|
return (lengthData()==somePureHeader.lengthData()&&
|
|
smfType()==somePureHeader.smfType()&&
|
|
tracks()==somePureHeader.tracks()&&
|
|
method()==somePureHeader.method()&&
|
|
(0==::memcmp(mHeader,somePureHeader.mHeader,sizeof(mHeader))));
|
|
}
|
|
|
|
inline
|
|
DWORD PureHeader::lengthData(void)const
|
|
{
|
|
return mLengthData;
|
|
}
|
|
|
|
inline
|
|
void PureHeader::lengthData(DWORD lengthData)
|
|
{
|
|
mLengthData=lengthData;
|
|
}
|
|
|
|
inline
|
|
PureHeader::MIDIFormat PureHeader::smfType(void)const
|
|
{
|
|
return (MIDIFormat)mSMFType;
|
|
}
|
|
|
|
inline
|
|
void PureHeader::smfType(USHORT smfType)
|
|
{
|
|
mSMFType=smfType;
|
|
}
|
|
|
|
inline
|
|
USHORT PureHeader::tracks(void)const
|
|
{
|
|
return mTracks;
|
|
}
|
|
|
|
inline
|
|
void PureHeader::tracks(USHORT tracks)
|
|
{
|
|
mTracks=tracks;
|
|
}
|
|
|
|
inline
|
|
USHORT PureHeader::method(void)const
|
|
{
|
|
return mMethod;
|
|
}
|
|
|
|
inline
|
|
void PureHeader::method(USHORT method)
|
|
{
|
|
mMethod=method;
|
|
}
|
|
|
|
inline
|
|
PureHeader::Method PureHeader::timingMethod(void)const
|
|
{
|
|
return ((mMethod>>15)?TimeCode:DeltaTime);
|
|
}
|
|
#endif
|