home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / graphics / directx / dsstream / dsstream.h < prev    next >
C/C++ Source or Header  |  1997-07-14  |  6KB  |  200 lines

  1. /*==========================================================================
  2.  *
  3.  *  Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
  4.  *
  5.  *  File:        DSStream.h
  6.  *  Content:    DirectSound Stream Sample Application Header
  7.  *
  8.  ***************************************************************************/
  9. #ifndef __DSSTREAM_INCLUDED__
  10. #define __DSSTREAM_INCLUDED__
  11.  
  12. #include <dsound.h>
  13. #include "resource.h"
  14. #include "debug.h"
  15.  
  16.  
  17. #define NUM_PLAY_NOTIFICATIONS    4    // number of notifications *not* including stop.
  18.  
  19. #define DSSTREAM_STOPF_NOREOPEN    0x0001
  20. #define DSSTREAM_STOPF_NOEXIT    0x0002    // Prevent the stop code from calling exit
  21.  
  22. #define ERR_WAVE_OPEN_FAILED    -100
  23. #define ERR_WAVE_INVALID_FORMAT    -101
  24. #define ERR_CREATEDSB_FAILED    -102
  25. #define ERR_WAVE_CORRUPTED_FILE    -103
  26.  
  27.  
  28. #define BORDER_SPACE_CX        10
  29. #define BORDER_SPACE_CY        10
  30. #define CONTROL_SPACE_CX    4
  31. #define CONTROL_SPACE_CY    4
  32. #define TEXT_SPACE_CY        0
  33. #define TEXT_SPACE_CX        2
  34.  
  35. #define BUTTON_CX        70
  36. #define BUTTON_CY        32
  37. #define CHECK_CX        70
  38. #define CHECK_CY        22
  39. #define BUTTON_SPACE_CY        6
  40.  
  41. #define PAN_TEXT_CX             140
  42. #define VOL_TEXT_CX             140
  43. #define FREQ_TEXT_CX            140
  44. #define PROG_TEXT_CX            140
  45.  
  46. #define PAN_TB_CX        200
  47. #define PAN_TB_CY        30
  48. #define VOL_TB_CX        200
  49. #define VOL_TB_CY        30
  50. #define FREQ_TB_CX        200
  51. #define FREQ_TB_CY        30
  52. #define PROG_TB_CX        200
  53. #define PROG_TB_CY        30
  54.  
  55. // The values for PAN may change in range...
  56.  
  57. //#define PAN_TB_MIN              0
  58. //#define PAN_TB_MAX              2000
  59. //#define PAN_TB_CENTER           1000
  60. //#define PAN_MULTIPLIER          1
  61. #define PAN_MIN                 0
  62. #define PAN_MAX                 800
  63. #define PAN_CENTER              400
  64. #define PAN_SHIFT               (-400)
  65. #define PAN_PAGESIZE            10
  66. #define PAN_DIV                 10
  67. #define PAN_MULT                10
  68.  
  69. //#define PAN_DSB_MIN           (-400)
  70. //#define PAN_DSB_MAX           400
  71. //#define PAN_DSB_CENTER    0
  72.  
  73. //#define VOL_TB_MIN              0
  74. //#define VOL_TB_MAX              1000
  75. //#define VOL_MULTIPLIER          1
  76. #define VOL_SHIFT               (-400)
  77. #define VOL_MIN            0
  78. #define VOL_MAX                 400
  79. #define VOL_PAGESIZE            10
  80. #define VOL_DIV                 10
  81. #define VOL_MULT                10
  82. #define FREQ_MIN        441
  83. #define FREQ_MAX        4410
  84. #define FREQ_PAGESIZE        100
  85. #define FREQ_MULTIPLIER        10
  86. #define PROG_MIN        0
  87. #define PROG_MAX        10000
  88. #define PROG_MULTIPLIER         100
  89.  
  90.  
  91. /* WAVE I/O subsystem defines */
  92.  
  93. #define WAVEVERSION 1
  94.  
  95. #ifndef ER_MEM
  96. #define ER_MEM             0xe000
  97. #endif
  98.  
  99. #ifndef ER_CANNOTOPEN
  100. #define ER_CANNOTOPEN         0xe100
  101. #endif
  102.  
  103. #ifndef ER_NOTWAVEFILE
  104. #define ER_NOTWAVEFILE         0xe101
  105. #endif
  106.  
  107. #ifndef ER_CANNOTREAD
  108. #define ER_CANNOTREAD         0xe102
  109. #endif
  110.  
  111. #ifndef ER_CORRUPTWAVEFILE
  112. #define ER_CORRUPTWAVEFILE    0xe103
  113. #endif
  114.  
  115. #ifndef ER_CANNOTWRITE
  116. #define ER_CANNOTWRITE        0xe104
  117. #endif
  118.  
  119. /* Streaming communication defines and structures */
  120.  
  121. #define WM_DSSTREAM_DONE    WM_USER + 0x100    /* Make our own app messages */
  122. #define WM_DSSTREAM_DEBUG    WM_USER + 0x101
  123. #define WM_DSSTREAM_PROGRESS    WM_USER + 0x102
  124.  
  125. #define DEBUGF_PLAYPOSITION    0x0300
  126. #define DEBUGF_WRITEPOSITION    0x0301
  127. #define DEBUGF_NEXTWRITE    0x0302
  128. #define DEBUGF_SKIP        0x0303
  129.  
  130. /*
  131.  * This structure keeps all the data that the TimeFunc callback uses in one
  132.  * place.  In this implementation, that means the global data segement.  This
  133.  * is setup so that if you wanted to put your callback in a DLL, all you'd need
  134.  * to do is pass the address of this structure as a parameter.
  135.  */
  136.  
  137. typedef struct waveinfoca_tag
  138. {
  139.     WAVEFORMATEX         *pwfx;            /* Wave Format data structure */
  140.     HMMIO                hmmio;            /* MM I/O handle for the WAVE */
  141.     MMCKINFO             mmck;            /* Multimedia RIFF chunk */
  142.     MMCKINFO             mmckInRIFF;        /* Use in opening a WAVE file */
  143.     LPDIRECTSOUNDBUFFER  lpDSBStreamBuffer; /* Points to DirectSoundBuffer */
  144.     DWORD                dwBufferSize;        /* Size of the entire buffer */
  145.     DWORD                 dwNotifySize;        // size of each notification period.
  146.     DWORD                dwNextWriteOffset; /* Offset to next buffer segment */
  147.     DWORD                dwProgress;        /* Used with above to show prog. */
  148.     DWORD                 dwLastPos;            // the last play position returned by GetCurrentPos().
  149.     //DWORD                dwBytesRemaining;  /* Bytes 'til timer shutdown */
  150.     BOOL                 bDonePlaying;        /* Signals early abort to timer */
  151.     BOOL                 bLoopFile;        /* Should we loop playback? */
  152.     BOOL                 bFoundEnd;        /* Timer found file end */
  153. } WAVEINFOCA, *LPWAVEINFOCA;
  154.  
  155. // Notify events. We deal with 2 notifications.
  156. HANDLE hNotifyEvent[2];
  157. int SetupNotifications(void);
  158. DWORD HandleNotifications(LPVOID);
  159.  
  160. /* Function declarations */
  161.  
  162. LRESULT CALLBACK MainWindowProc( HWND, unsigned, WPARAM, LPARAM );
  163. BOOL CALLBACK DLG_About( HWND, UINT, WPARAM, LPARAM );
  164. void CALLBACK TimeFunc( UINT, UINT, DWORD, DWORD, DWORD );
  165. BOOL CALLBACK DSEnumDlgProc( HWND, UINT, WPARAM, LPARAM );
  166. BOOL CALLBACK DSEnumProc( LPGUID, LPSTR, LPSTR, LPVOID );
  167.  
  168. void ErrorMessageBox( UINT, DWORD );
  169. void HandlePanScroll( int, int );
  170. void HandleVolScroll( int, int );
  171. void HandleFreqScroll( int, int );
  172. void ResetWavePlayer( void );
  173. void UpdateFromControls( void );
  174.  
  175. int CreateChildren( RECT );
  176. int HandleCommDlgError( DWORD );
  177. int StreamBufferSetup( void );
  178.  
  179. BOOL DoDSoundEnumerate( LPGUID );
  180.  
  181. int WaveOpenFile(char *, HMMIO *, WAVEFORMATEX **, MMCKINFO *);
  182. int WaveStartDataRead(HMMIO *, MMCKINFO *, MMCKINFO *);
  183. int WaveReadFile(HMMIO, UINT, BYTE *, MMCKINFO *, UINT *);
  184. int WaveCloseReadFile(HMMIO *, WAVEFORMATEX **);
  185.  
  186. int WaveCreateFile(char *, HMMIO *, WAVEFORMATEX *, MMCKINFO *, MMCKINFO *);
  187. int WaveStartDataWrite(HMMIO *, MMCKINFO *, MMIOINFO *);
  188. int WaveWriteFile(HMMIO, UINT, BYTE *, MMCKINFO *, UINT *, MMIOINFO *);
  189. int WaveCloseWriteFile(HMMIO *, MMCKINFO *, MMCKINFO *, MMIOINFO *, DWORD);
  190.  
  191. int WaveLoadFile(char *, UINT *, DWORD *, WAVEFORMATEX **, BYTE **);
  192. int WaveSaveFile(char *, UINT, DWORD, WAVEFORMATEX *, BYTE *);
  193.  
  194. int WaveCopyUselessChunks(HMMIO *, MMCKINFO *, MMCKINFO *, HMMIO *,
  195.                 MMCKINFO *, MMCKINFO *);
  196. BOOL riffCopyChunk(HMMIO, HMMIO, const LPMMCKINFO);
  197.  
  198. #endif /* __DSSTREAM_INCLUDED__ */
  199.  
  200.