• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

src/audio/src/OALFramework/CWaves.h

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

Generated on Fri Jun 18 2010 17:48:39 for Cannonball by  doxygen 1.7.0