Go to the documentation of this file.00001
00002
00004
00005 #ifndef _CWAVES_H_
00006 #define _CWAVES_H_
00007
00008
00009
00010
00011
00012 #define MAX_NUM_WAVEID 32
00013
00014 enum WAVEFILETYPE
00015 {
00016 WF_EX = 1,
00017 WF_EXT = 2
00018 };
00019
00020 enum WAVERESULT
00021 {
00022 WR_OK = 0,
00023 WR_INVALIDFILENAME = - 1,
00024 WR_BADWAVEFILE = - 2,
00025 WR_INVALIDPARAM = - 3,
00026 WR_INVALIDWAVEID = - 4,
00027 WR_NOTSUPPORTEDYET = - 5,
00028 WR_WAVEMUSTBEMONO = - 6,
00029 WR_WAVEMUSTBEWAVEFORMATPCM = - 7,
00030 WR_WAVESMUSTHAVESAMEBITRESOLUTION = - 8,
00031 WR_WAVESMUSTHAVESAMEFREQUENCY = - 9,
00032 WR_WAVESMUSTHAVESAMEBITRATE = -10,
00033 WR_WAVESMUSTHAVESAMEBLOCKALIGNMENT = -11,
00034 WR_OFFSETOUTOFDATARANGE = -12,
00035 WR_FILEERROR = -13,
00036 WR_OUTOFMEMORY = -14,
00037 WR_INVALIDSPEAKERPOS = -15,
00038 WR_INVALIDWAVEFILETYPE = -16,
00039 WR_NOTWAVEFORMATEXTENSIBLEFORMAT = -17
00040 };
00041
00042 #ifndef _WAVEFORMATEX_
00043 #define _WAVEFORMATEX_
00044 typedef struct tWAVEFORMATEX
00045 {
00046 WORD wFormatTag;
00047 WORD nChannels;
00048 DWORD nSamplesPerSec;
00049 DWORD nAvgBytesPerSec;
00050 WORD nBlockAlign;
00051 WORD wBitsPerSample;
00052 WORD cbSize;
00053 } WAVEFORMATEX;
00054 #endif
00055
00056 #ifndef _WAVEFORMATEXTENSIBLE_
00057 #define _WAVEFORMATEXTENSIBLE_
00058 typedef struct {
00059 WAVEFORMATEX Format;
00060 union {
00061 WORD wValidBitsPerSample;
00062 WORD wSamplesPerBlock;
00063 WORD wReserved;
00064 } Samples;
00065 DWORD dwChannelMask;
00066
00067 GUID SubFormat;
00068 } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
00069 #endif // !_WAVEFORMATEXTENSIBLE_
00070
00071 typedef struct
00072 {
00073 WAVEFILETYPE wfType;
00074 WAVEFORMATEXTENSIBLE wfEXT;
00075 char *pData;
00076 unsigned long ulDataSize;
00077 FILE *pFile;
00078 unsigned long ulDataOffset;
00079 } WAVEFILEINFO, *LPWAVEFILEINFO;
00080
00081 typedef int (__cdecl *PFNALGETENUMVALUE)( const char *szEnumName );
00082 typedef int WAVEID;
00083
00084 class CWaves
00085 {
00086 public:
00087 CWaves(int numIDs = 32);
00088 ~CWaves();
00089
00090 WAVERESULT LoadWaveFile(const rchar *szFilename, WAVEID *WaveID);
00091 WAVERESULT OpenWaveFile(const rchar *szFilename, WAVEID *WaveID);
00092 WAVERESULT ReadWaveData(WAVEID WaveID, void *pData, unsigned long ulDataSize, unsigned long *pulBytesWritten);
00093 WAVERESULT SetWaveDataOffset(WAVEID WaveID, unsigned long ulOffset);
00094 WAVERESULT GetWaveDataOffset(WAVEID WaveID, unsigned long *pulOffset);
00095 WAVERESULT GetWaveType(WAVEID WaveID, WAVEFILETYPE *pwfType);
00096 WAVERESULT GetWaveFormatExHeader(WAVEID WaveID, WAVEFORMATEX *pWFEX);
00097 WAVERESULT GetWaveFormatExtensibleHeader(WAVEID WaveID, WAVEFORMATEXTENSIBLE *pWFEXT);
00098 WAVERESULT GetWaveData(WAVEID WaveID, void **ppAudioData);
00099 WAVERESULT GetWaveSize(WAVEID WaveID, unsigned long *pulDataSize);
00100 WAVERESULT GetWaveFrequency(WAVEID WaveID, unsigned long *pulFrequency);
00101 WAVERESULT GetWaveALBufferFormat(WAVEID WaveID, PFNALGETENUMVALUE pfnGetEnumValue, unsigned long *pulFormat);
00102 WAVERESULT DeleteWaveFile(WAVEID WaveID);
00103
00104 char *GetErrorString(WAVERESULT wr, char *szErrorString, unsigned long nSizeOfErrorString);
00105 bool IsWaveID(WAVEID WaveID);
00106
00107 private:
00108 WAVERESULT ParseFile(const rchar *szFilename, LPWAVEFILEINFO pWaveInfo);
00109 WAVEID InsertWaveID(LPWAVEFILEINFO pWaveFileInfo);
00110
00111 LPWAVEFILEINFO* m_WaveIDs;
00112 int m_numWaveIDs;
00113 };
00114
00115 #endif // _CWAVES_H_