include/CWaves.h

00001 // Waves.h: interface for the CWaves class.
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 /* _WAVEFORMATEX_ */
00054 
00055 #ifndef _WAVEFORMATEXTENSIBLE_
00056 #define _WAVEFORMATEXTENSIBLE_
00057 typedef struct {
00058     WAVEFORMATEX    Format;
00059     union {
00060         WORD wValidBitsPerSample;       /* bits of precision  */
00061         WORD wSamplesPerBlock;          /* valid if wBitsPerSample==0 */
00062         WORD wReserved;                 /* If neither applies, set to zero. */
00063     } Samples;
00064     DWORD           dwChannelMask;      /* which channels are */
00065                                         /* present in stream  */
00066     GUID            SubFormat;
00067 } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
00068 #endif // !_WAVEFORMATEXTENSIBLE_
00069 
00070 typedef struct
00071 {
00072         WAVEFILETYPE    wfType;
00073         WAVEFORMATEXTENSIBLE wfEXT;             // For non-WAVEFORMATEXTENSIBLE wavefiles, the header is stored in the Format member of 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_

Generated on Tue Aug 26 12:26:54 2008 for sonus by  doxygen 1.5.4