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

113 lines
2.5 KiB
C++

#ifndef _SAMPLE_PURESAMPLE_HPP_
#define _SAMPLE_PURESAMPLE_HPP_
#ifndef _COMMON_TYPES_HPP_
#include <common/types.hpp>
#endif
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_MEMFILE_HPP_
#include <common/memfile.hpp>
#endif
#ifndef _COMMON_OPENFILE_HPP_
#include <common/openfile.hpp>
#endif
#ifndef _COMMON_GLOBALDATA_HPP_
#include <common/gdata.hpp>
#endif
// This object holds the sample data as bytes. It does not know anything about the internal
// makeup of the sample (ie) does not know how many bits per sample
class PureSample
{
public:
PureSample(void);
PureSample(const PureSample &somePureSample);
virtual ~PureSample();
PureSample &operator=(const PureSample &somePureSample);
PureSample &operator+=(const PureSample &somePureSample);
DWORD numSamples(void)const;
void numSamples(DWORD numSamples);
UHUGE *sampleData(void);
WORD isOkay(void)const;
MemFile &operator>>(MemFile &someMemFile)const;
FileHandle &operator<<(FileHandle &someFileHandle);
String toString(void)const;
private:
void copySampleData(UHUGE *lpDstSample,UHUGE *lpSrcSamples,DWORD numBytes);
DWORD mNumSamples;
GlobalData<BYTE> mSampleData;
};
inline
PureSample::PureSample(void)
: mNumSamples(0)
{
}
inline
PureSample::PureSample(const PureSample &somePureSample)
{
*this=somePureSample;
}
inline
PureSample::~PureSample()
{
}
inline
DWORD PureSample::numSamples(void)const
{
return mNumSamples;
}
inline
void PureSample::numSamples(DWORD numSamples)
{
mNumSamples=numSamples;
mSampleData.size(mNumSamples,GMEM_MOVEABLE);
}
inline
UHUGE *PureSample::sampleData(void)
{
if(!isOkay())return (UHUGE*)0;
return (UHUGE*)&mSampleData[0];
}
inline
MemFile &PureSample::operator>>(MemFile &someMemFile)const
{
if(!isOkay())return someMemFile;
someMemFile.write((char*)(UHUGE*)&(((GlobalData<BYTE>&)mSampleData)[0]),mNumSamples);
return someMemFile;
}
inline
FileHandle &PureSample::operator<<(FileHandle &someFileHandle)
{
if(!isOkay())return someFileHandle;
someFileHandle.read((BYTE*)(UHUGE*)&mSampleData[0],mNumSamples);
return someFileHandle;
}
inline
WORD PureSample::isOkay(void)const
{
return mSampleData.isOkay();
}
inline
String PureSample::toString(void)const
{
String strPureSample;
strPureSample+="<PURESAMPLE>";
strPureSample+=String(" NumSamples=")+String().fromInt(mNumSamples).quotes();
strPureSample+=String(" SampleData=")+String().fromInt(mSampleData.size()).quotes();
strPureSample+=String("<PURESAMPLE/>");
return strPureSample;
}
#endif