home *** CD-ROM | disk | FTP | other *** search
/ Game Audio Programming / GameAudioProgramming.iso / Game_Audio / audio_sdk / src / AudioLib / Wave.h < prev    next >
C/C++ Source or Header  |  2002-07-13  |  2KB  |  75 lines

  1. /***********************************************************\
  2. Copyright (C) James Boer, 2002. 
  3. All rights reserved worldwide.
  4.  
  5. This software is provided "as is" without express or implied
  6. warranties. You may freely copy and compile this source into
  7. applications you distribute provided that the copyright text
  8. below is included in the resulting source code, for example:
  9. "Portions Copyright (C) James Boer, 2002"
  10. \***********************************************************/
  11. #pragma once
  12.  
  13. #ifndef _WAVE_H_
  14. #define _WAVE_H_
  15.  
  16. #include "Audio.h"
  17. #include "IAudioLoader.h"
  18.  
  19. namespace Audio
  20. {
  21.  
  22. class Wave : public IAudioLoader
  23. {
  24. DEFINE_POOL(Wave);
  25.  
  26. public:
  27.     bool            Open(std::string sFileName);
  28.     bool            Open(BYTE* pbData, uint32 dwDataSize);
  29.     bool            Close();
  30.  
  31.     bool            Read( BYTE* pDestBuffer, uint32 dwSizeToRead, uint32* pdwSizeRead );
  32.  
  33.     bool            Reset();
  34.     WAVEFORMATEX*    GetFormat()            {  return &m_DestFormat;  }
  35.     uint32            GetSize()            {  return m_dwSize;  }
  36.     bool            IsEOF()                {  return m_bEOF;  }
  37.  
  38.     void            Destroy();
  39. private:
  40.     bool OpenMMIO();
  41.     bool ReadMMIO();
  42.     bool PrepareACMBuffers(uint32& nDataIn, uint32& nStreamRead, uint32 dwSizeToRead);
  43.     bool DecompressData(uint32 nDataIn, BYTE* pDestBuffer, 
  44.         uint32 dwSizeToRead, DWORD* pdwSizeRead);
  45.  
  46. protected:
  47.     virtual ~Wave();
  48. private:
  49.     Wave();
  50.  
  51.     WAVEFORMATEX    m_DestFormat;// Pointer to WAVEFORMATEX structure
  52.     HMMIO            m_hmmio;     // MM I/O handle for the WAVE
  53.     MMCKINFO        m_ck;         // Multimedia RIFF chunk
  54.     MMCKINFO        m_ckRiff;     // Use in opening a WAVE file
  55.     uint32            m_dwSize;     // The size of the wave file
  56.     bool            m_bEOF;         // Has reached end of file?
  57.  
  58.     // ACM specific structures
  59.     WAVEFORMATEX*    m_pwfx;        
  60.     HACMSTREAM        m_hACMStream;
  61.     uint8*            m_pCompressBuffer;
  62.     uint32            m_nCompressBufferSize;
  63.     uint8*            m_pDecompressBuffer;
  64.     uint32            m_nDecompressStart;
  65.     uint32            m_nDecompressEnd;
  66.     uint32            m_nDecompressBufferSize;
  67.  
  68.     static uint32    s_nWaveCount;
  69. };
  70.  
  71. }; // namespace Audio
  72.  
  73.  
  74. #endif // _WAVE_H_
  75.