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