Files
Work/midiwrt/MIDIHDR.HPP
2024-08-07 09:16:27 -04:00

94 lines
1.7 KiB
C++

#ifndef _MIDIHEADER_HPP_
#define _MIDIHEADER_HPP_
#include <string.h>
#include <common/windows.hpp>
#include <common/memfile.hpp>
class MidiHeader
{
public:
MidiHeader(void);
MidiHeader(const MidiHeader &someMidiHeader);
~MidiHeader();
MidiHeader &operator=(const MidiHeader &someMidiHeader);
WORD readHeader(MemFile &midiFile);
WORD writeHeader(MemFile &midiFile);
DWORD lengthData(void)const;
void smfType(USHORT smfType);
USHORT smfType(void)const;
USHORT tracks(void)const;
void tracks(USHORT tracks);
void deltaTempo(USHORT deltaTempo);
USHORT deltaTempo(void)const;
private:
enum {MaxHeaderIDLength=4,SingleTrack=0,MultiTrack=1,Sequential=2,DefaultTempo=136};
char mHeader[MaxHeaderIDLength];
DWORD mLengthData;
USHORT mSMFType;
USHORT mTracks;
USHORT mDeltaTempo;
String mHeaderString;
};
inline
MidiHeader::MidiHeader(void)
: mLengthData(0L), mSMFType(MultiTrack), mTracks(0), mDeltaTempo(DefaultTempo),
mHeaderString("MThd")
{
mLengthData=sizeof(*this)-(sizeof(mLengthData)+sizeof(mHeader)+sizeof(mHeaderString));
}
inline
MidiHeader::~MidiHeader()
{
}
inline
DWORD MidiHeader::lengthData(void)const
{
return mLengthData;
}
inline
USHORT MidiHeader::smfType(void)const
{
return mSMFType;
}
inline
void MidiHeader::smfType(USHORT smfType)
{
mSMFType=smfType;
}
inline
USHORT MidiHeader::tracks(void)const
{
return mTracks;
}
inline
void MidiHeader::tracks(USHORT tracks)
{
mTracks=tracks;
}
inline
USHORT MidiHeader::deltaTempo(void)const
{
return mDeltaTempo;
}
inline
void MidiHeader::deltaTempo(USHORT deltaTempo)
{
mDeltaTempo=deltaTempo;
}
inline
MidiHeader::MidiHeader(const MidiHeader &someMidiHeader)
{
*this=someMidiHeader;
}
#endif