Files
Work/sample/holdii/FmtChnk.hpp
2024-08-07 09:16:27 -04:00

167 lines
3.4 KiB
C++

#ifndef _SAMPLE_FORMATCHUNK_HPP_
#define _SAMPLE_FORMATCHUNK_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_MMSYSTEM_HPP_
#include <common/mmsystem.hpp>
#endif
#ifndef _COMMON_MEMFILE_HPP_
#include <common/memfile.hpp>
#endif
#ifndef _COMMON_OPENFILE_HPP_
#include <common/openfile.hpp>
#endif
#ifndef _COMMON_FILEIO_HPP_
#include <common/fileio.hpp>
#endif
#ifndef _SAMPLE_CHUNKID_HPP_
#include <sample/chunkid.hpp>
#endif
class FormatChunk
{
public:
enum {WaveFormatPCM=0x01,NumChannels=0x01,BlockAlign=0x01,BitsPerSample=0x08};
FormatChunk(void);
FormatChunk(const FormatChunk &someFormatChunk);
virtual ~FormatChunk();
MemFile &operator>>(MemFile &someMemFile)const;
FileHandle &operator<<(FileHandle &someFileHandle);
FormatChunk &operator=(const FormatChunk &someFormatChunk);
WORD formatTag(void)const;
void formatTag(WORD formatTag);
WORD channels(void)const;
void channels(WORD channels);
DWORD samplesPerSecond(void)const;
void samplesPerSecond(DWORD samplesPerSecond);
DWORD averageBytesPerSecond(void)const;
void averageBytesPerSecond(DWORD averageBytesPerSecond);
WORD blockAlign(void)const;
void blockAlign(WORD blockAlign);
WORD bitsPerSample(void)const;
void bitsPerSample(WORD bitsPerSample);
WORD size(void)const;
String toString(void)const;
private:
void initChunk(void);
ChunkID mChunkID;
DWORD mSize;
WORD mFormatTag;
WORD mChannels;
DWORD mSamplesPerSecond;
DWORD mAvgBytesPerSecond;
WORD mBlockAlign;
WORD mBitsPerSample;
WORD mExtraInfo;
};
inline
FormatChunk::FormatChunk(void)
: mSize(0), mFormatTag(WaveFormatPCM), mChannels(NumChannels), mSamplesPerSecond(0),
mAvgBytesPerSecond(0), mBlockAlign(BlockAlign), mBitsPerSample(0), mExtraInfo(0)
{
initChunk();
}
inline
FormatChunk::FormatChunk(const FormatChunk &someFormatChunk)
: mSize(0), mFormatTag(WaveFormatPCM), mChannels(NumChannels), mSamplesPerSecond(0),
mAvgBytesPerSecond(0), mBlockAlign(BlockAlign), mBitsPerSample(0), mExtraInfo(0)
{
initChunk();
*this=someFormatChunk;
}
inline
FormatChunk::~FormatChunk()
{
}
inline
WORD FormatChunk::formatTag(void)const
{
return mFormatTag;
}
inline
void FormatChunk::formatTag(WORD formatTag)
{
mFormatTag=formatTag;
}
inline
WORD FormatChunk::channels(void)const
{
return mChannels;
}
inline
void FormatChunk::channels(WORD channels)
{
mChannels=channels;
}
inline
DWORD FormatChunk::samplesPerSecond(void)const
{
return mSamplesPerSecond;
}
inline
void FormatChunk::samplesPerSecond(DWORD samplesPerSecond)
{
mSamplesPerSecond=samplesPerSecond;
}
inline
DWORD FormatChunk::averageBytesPerSecond(void)const
{
return mAvgBytesPerSecond;
}
inline
void FormatChunk::averageBytesPerSecond(DWORD averageBytesPerSecond)
{
mAvgBytesPerSecond=averageBytesPerSecond;
}
inline
WORD FormatChunk::blockAlign(void)const
{
return mBlockAlign;
}
inline
void FormatChunk::blockAlign(WORD blockAlign)
{
mBlockAlign=blockAlign;
}
inline
WORD FormatChunk::bitsPerSample(void)const
{
return mBitsPerSample;
}
inline
void FormatChunk::bitsPerSample(WORD bitsPerSample)
{
mBitsPerSample=bitsPerSample;
}
inline
WORD FormatChunk::size(void)const
{
return mSize+mChunkID.size();
}
inline
void FormatChunk::initChunk(void)
{
mChunkID=String("fmt ");
mSize=(mChunkID.size()+sizeof(mSize)+sizeof(mFormatTag)+sizeof(mChannels)+sizeof(mSamplesPerSecond)+
sizeof(mAvgBytesPerSecond)+sizeof(mBlockAlign)+sizeof(mBitsPerSample))-(mChunkID.size()+sizeof(mSize));
}
#endif