home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 27 / IOPROG_27.ISO / SOFT / CDX.ZIP / Inc / CDS.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-09-14  |  4.6 KB  |  186 lines

  1. //////////////////////////////////////////////////////////////////////////////////
  2. // Project Name: [ CDS Class Library - CDS.lib ]
  3. // Author:       [ Dan Farley - 97308096@brookes.ac.uk ]
  4. // Source File:  [ Main Header File ]
  5. // Revision:     [ 1.6 ]
  6. //////////////////////////////////////////////////////////////////////////////////
  7. #ifndef CDS_H
  8. #define CDS_H
  9.  
  10. #include <windows.h>
  11. #include <mmsystem.h>
  12. #include <dsound.h>
  13.  
  14. //////////////////////////////////////////////////////////////////////////////////
  15. // Definied Types
  16. //////////////////////////////////////////////////////////////////////////////////
  17.  
  18. #define SAFE_RELEASE(x) if(x != NULL) { x->Release(); x = NULL; }
  19. #define SAFE_DELETE(x) if(x != NULL) { delete x; x = NULL; }
  20.  
  21. typedef BOOL (*TIMERCALLBACK)(DWORD);
  22.  
  23. //////////////////////////////////////////////////////////////////////////////////
  24. // CDS_Sound Class
  25. //////////////////////////////////////////////////////////////////////////////////
  26.  
  27. class CDS_Sound
  28. {
  29. public:
  30.     CDS_Sound(void);
  31.     ~CDS_Sound(void);
  32.  
  33.     HRESULT Create(void *hwnd);
  34.  
  35.     LPDIRECTSOUND GetDS(void) { return m_DirectSound; }
  36.     LPDIRECTSOUNDBUFFER GetPrimary(void) { return m_Primary; }
  37.     LPDIRECTSOUND3DLISTENER GetListener(void) { return m_Listener; }
  38.  
  39. public:
  40.     LPDIRECTSOUND m_DirectSound;
  41.     LPDIRECTSOUNDBUFFER m_Primary;
  42.     LPDIRECTSOUND3DLISTENER m_Listener;
  43. };
  44.  
  45. //////////////////////////////////////////////////////////////////////////////////
  46. // CDS_WaveFile Class
  47. //////////////////////////////////////////////////////////////////////////////////
  48.  
  49. class CDS_WaveFile
  50. {
  51. public:
  52.     CDS_WaveFile(void);
  53.     ~CDS_WaveFile(void);
  54.  
  55.     BOOL Open(LPSTR pszFilename);
  56.     BOOL Cue(void);
  57.     UINT Read(BYTE* pbDest, UINT cbSize);
  58.  
  59.     UINT GetNumBytesRemaining(void) { return (m_nDataSize - m_nBytesPlayed); }
  60.     UINT GetAvgDataRate(void)       { return (m_nAvgDataRate); }
  61.     UINT GetDataSize(void)          { return (m_nDataSize); }
  62.     UINT GetNumBytesPlayed(void)    { return (m_nBytesPlayed); }
  63.     UINT GetDuration(void)          { return (m_nDuration); }
  64.     BYTE GetSilenceData(void);
  65.  
  66. public:
  67.     WAVEFORMATEX* m_pFormat;
  68.     HMMIO m_hmmio;
  69.     MMRESULT m_mmr;
  70.     MMCKINFO m_mmckiRiff;
  71.     MMCKINFO m_mmckiFmt;
  72.     MMCKINFO m_mmckiData;
  73.     UINT m_nDuration;
  74.     UINT m_nBlockAlign;
  75.     UINT m_nAvgDataRate;
  76.     UINT m_nDataSize;
  77.     UINT m_nBytesPlayed;
  78. };
  79.  
  80. //////////////////////////////////////////////////////////////////////////////////
  81. // CDS_Buffer Class
  82. //////////////////////////////////////////////////////////////////////////////////
  83.  
  84. class CDS_Buffer
  85. {
  86. public:
  87.     CDS_Buffer(void);
  88.     ~CDS_Buffer(void);
  89.  
  90.     virtual HRESULT Create(CDS_Sound* sound, char* filename, int count);
  91.  
  92.     HRESULT Play(DWORD flags);
  93.     HRESULT Stop(void);
  94.     LPDIRECTSOUNDBUFFER GetFreeBuffer(void);
  95.  
  96. public:
  97.     int m_BufferCount;
  98.     CDS_WaveFile* m_WaveFile;
  99.     LPDIRECTSOUNDBUFFER *m_Buffer;
  100. };
  101.  
  102. //////////////////////////////////////////////////////////////////////////////////
  103. // CDS_3DBuffer Class
  104. //////////////////////////////////////////////////////////////////////////////////
  105.  
  106. class CDS_3DBuffer : public CDS_Buffer
  107. {
  108. public:
  109.     HRESULT Create(CDS_Sound* sound, char* filename, int count);
  110.     LPDIRECTSOUND3DBUFFER m_3dBuffer;
  111. };
  112.  
  113. //////////////////////////////////////////////////////////////////////////////////
  114. // CDS_Timer Class
  115. //////////////////////////////////////////////////////////////////////////////////
  116.  
  117. class CDS_Timer
  118. {
  119. public:
  120.     CDS_Timer(void);
  121.     ~CDS_Timer(void);
  122.  
  123.     BOOL Create(
  124.         UINT nPeriod,
  125.         UINT nRes,
  126.         DWORD dwUser,
  127.         TIMERCALLBACK pfnCallback);
  128.  
  129. protected:
  130.     static void CALLBACK TimeProc(
  131.         UINT uID,
  132.         UINT uMsg,
  133.         DWORD dwUser,
  134.         DWORD dw1,
  135.         DWORD dw2);
  136.  
  137.     TIMERCALLBACK m_pfnCallback;
  138.     DWORD m_dwUser;
  139.     UINT m_nPeriod;
  140.     UINT m_nRes;
  141.     UINT m_nIDTimer;
  142. };
  143.  
  144. //////////////////////////////////////////////////////////////////////////////////
  145. // CDS_Stream Class
  146. //////////////////////////////////////////////////////////////////////////////////
  147.  
  148. class CDS_Stream
  149. {
  150. public:
  151.     CDS_Stream(void);
  152.     ~CDS_Stream(void);
  153.  
  154.     BOOL Create(CDS_Sound* pass, LPSTR pszFilename);
  155.     BOOL Destroy(void);
  156.     void Play(void);
  157.     void Stop(void);
  158.  
  159. public:
  160.     void Cue(void);
  161.     BOOL WriteWaveData(UINT cbSize);
  162.     BOOL WriteSilence(UINT cbSize);
  163.     BOOL ServiceBuffer(void);
  164.     DWORD GetMaxWriteSize(void);
  165.     static BOOL TimerCallback(DWORD dwUser);
  166.  
  167.     CDS_Sound* m_pass;
  168.     CDS_WaveFile* m_pwavefile;
  169.     CDS_Timer* m_ptimer;
  170.  
  171.     LPDIRECTSOUNDBUFFER m_pdsb;
  172.     DSBUFFERDESC m_dsbd;
  173.     BOOL m_fCued;
  174.     BOOL m_fPlaying;
  175.     LONG m_lInService;
  176.     UINT m_cbBufOffset;
  177.     UINT m_nBufLength;
  178.     UINT m_cbBufSize;
  179.     UINT m_nBufService;
  180.     UINT m_nDuration;
  181.     UINT m_nTimeStarted;
  182.     UINT m_nTimeElapsed;
  183. };
  184.  
  185. #endif
  186.