home *** CD-ROM | disk | FTP | other *** search
/ Game Audio Programming / GameAudioProgramming.iso / Game_Audio / audio_sdk / src / AudioLib / Vorbis.h < prev    next >
C/C++ Source or Header  |  2002-07-14  |  2KB  |  99 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. #ifndef __IN_VORBIS_H__
  12. #define __IN_VORBIS_H__
  13.  
  14. #ifdef USE_VORBIS
  15.  
  16. #include "Audio.h"
  17. #include "IAudioLoader.h"
  18.  
  19. #pragma pack(push,8)
  20. #include <vorbis/codec.h>
  21. #include <vorbis/vorbisfile.h>
  22.  
  23. namespace Audio
  24. {
  25.  
  26. struct MemorySource
  27. {
  28.     MemorySource()
  29.     {
  30.         Clear();
  31.     };
  32.     void Clear()
  33.     {
  34.         m_pData = 0;
  35.         m_nDataSize = 0;
  36.         m_pReadPtr = 0;
  37.     };
  38.     char*    m_pData;
  39.     uint32    m_nDataSize;
  40.     char*    m_pReadPtr;
  41. };
  42.  
  43.  
  44. class Vorbis : public IAudioLoader
  45. {
  46. DEFINE_POOL(Vorbis);
  47.  
  48. public:
  49.     void Clear();
  50.  
  51.     // This Open function is used if the source is to be streamed from the disk
  52.     bool Open(std::string  sFileName);
  53.     bool Open(BYTE* pbData, uint32 dwDataSize);
  54.     bool Close();
  55.  
  56.     bool Read( BYTE* pBuffer, uint32 dwSizeToRead, uint32* pdwSizeRead );
  57.  
  58.     uint32            GetSize();
  59.     bool            Reset();
  60.     WAVEFORMATEX*    GetFormat();
  61.     bool            IsEOF();
  62.     
  63.     void            Destroy();
  64.  
  65. protected:
  66.     virtual ~Vorbis();
  67. private:
  68.     Vorbis();
  69.  
  70.     bool GetStreamInfo();
  71.  
  72. private:
  73.     WAVEFORMATEX    m_WaveFormatEx;
  74.  
  75.     bool            m_bOpen;
  76.     OggVorbis_File    m_VorbisFile;
  77.     vorbis_info*    m_pVorbisInfo;
  78.  
  79.     uint8*            m_pBufferPtr;
  80.     uint8*            m_pBuffer;
  81.     uint32            m_nBufferSize;
  82.     uint32            m_nNumSamples;
  83.  
  84.     bool            m_bEOF;
  85.  
  86. public:
  87.     // This has to be public so the callback functions can access it
  88.     MemorySource    m_MemSrc;
  89.     IAudioStream*    m_pStreamSrc;
  90. };
  91.  
  92. }; // namespace Audio
  93.  
  94. #pragma pack(pop,8)
  95.  
  96. #endif // USE_VORBIS
  97.  
  98.  
  99. #endif // __IN_VORBIS_H__