home *** CD-ROM | disk | FTP | other *** search
/ Game Audio Programming / GameAudioProgramming.iso / Game_Audio / audio_sdk / src / AudioLib / Sound.h < prev    next >
C/C++ Source or Header  |  2002-07-11  |  3KB  |  144 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 SOUND_H___
  12. #define SOUND_H___
  13.  
  14. #include <dsound.h>
  15. #include "Audio.h"
  16. #include "IAudioLoader.h"
  17. #include "PropertySet.h"
  18.  
  19. struct IDirectSoundBuffer8;
  20.  
  21. namespace Audio
  22. {
  23.  
  24. class Sound : public ISound
  25. {
  26. DEFINE_POOL(Sound);
  27.  
  28. // Interface functions
  29. public:
  30.     void Destroy();
  31.  
  32.     bool Init(const SoundInit& create);
  33.  
  34.     bool IsInitialized() const    {  return m_bInitialized;  }
  35.  
  36.     bool Load();
  37.     bool Unload();
  38.     bool IsLoaded()    const    {  return m_bLoaded;  }
  39.  
  40.     bool Play();
  41.     bool Stop();
  42.     bool Pause();
  43.  
  44.     bool IsPlaying() const;
  45.     bool IsPaused() const;
  46.  
  47.     bool IsLooping() const;
  48.  
  49.     bool SetProperties(const SoundProp& prop);
  50.     bool GetProperties(SoundProp& prop) const;
  51.  
  52.     bool SetVolume(float fVolume);
  53.     bool GetVolume(float &fVolume) const;
  54.  
  55.     bool SetPan(float fPan);
  56.     bool GetPan(float& fPan) const;
  57.  
  58.     bool SetPitch(float fPitch);
  59.     bool GetPitch(float& fPitch) const;
  60.  
  61.     bool SetReadCursor(uint32 nBytes);
  62.     bool GetReadCursor(uint32& nBytes) const;
  63.     bool GetSourceSize(uint32& nBytes) const;
  64.  
  65.     // Generic property support (for driver-specific extensions)
  66.     bool QuerySupport(const GUID& guid, uint32 nID, uint32* pTypeSupport);
  67.     bool Get(const GUID& guidProperty, uint32 nID, void* pInstanceData,
  68.         uint32 nInstanceLength, void* pPropData, 
  69.         uint32 nPropLength, uint32* pBytesReturned);
  70.     bool Set(const GUID& guidProperty, uint32 nID, void* pInstanceData,
  71.         uint32 nInstanceLength, void* pPropData, 
  72.         uint32 nPropLength,
  73.         bool bStoreProperty);
  74.  
  75. // Concrete-only functions
  76. public:
  77.  
  78.     void Term();
  79.  
  80.     bool IsLoading()            {  return m_bLoading;  }
  81.     bool DoLoad();
  82.  
  83.     bool SetFrequency(uint32 nFrequency);
  84.  
  85.     inline bool IsMusic()        {  return m_Init.m_bMusic;  }
  86.  
  87.     void ServiceBuffer();
  88.  
  89.     uint32 GetLastPlayTime() const;
  90.     bool operator < (const Sound& snd) const;
  91.  
  92. private:
  93.     Sound();
  94.     virtual ~Sound();
  95.     uint8 GetSilenceData();
  96.  
  97.     bool LoadSource(uint32& nBufferSize);
  98.     bool FillBuffer();
  99.  
  100.     void Clear();
  101.  
  102. // Private data
  103. private:
  104.     // This thread function needs access to a number of sound member variables
  105.     friend class Sound3D;
  106.  
  107.     // DirectSound-required structures
  108.     IDirectSoundBuffer8*    m_pDSBuffer; 
  109.     DSBUFFERDESC            m_BufferDesc;
  110.     WAVEFORMATEX            m_WaveFormat;
  111.     DSBCAPS                    m_Caps;
  112.  
  113.     PropertySet                m_PropertySet;
  114.  
  115.     // Initial sound properties set at Init()
  116.     SoundInit                m_Init;
  117.  
  118.     // status flags
  119.     bool                    m_bInitialized;
  120.     bool                    m_b3DSound;
  121.     bool                    m_bQueuePlayback;
  122.     bool                    m_bLoading;
  123.     bool                    m_bLoaded;
  124.     bool                    m_bPaused;
  125.  
  126.     // Last time the sound was played (used for prioritization)
  127.     uint32                    m_nLastTimePlayed;
  128.  
  129.     // This is the data source file
  130.     uint32                    m_nSourceSize;
  131.  
  132.     // Streaming data
  133.     IAudioLoader*            m_pLoader;
  134.     uint32                    m_nDataCursor;
  135.     uint32                    m_nBytesPlayed;
  136.     uint32                    m_nLastReadPos;
  137.     bool                    m_bRemoveStream;
  138.  
  139. };
  140.  
  141. }; // namespace Audio
  142.  
  143.  
  144. #endif // SOUND_H___