MMSystem.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:171k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*==========================================================================
  2.  *
  3.  *  mmsystem.h -- Include file for Multimedia API's
  4.  *
  5.  *  Version 4.00
  6.  *
  7.  *  Copyright (C) 1992-1998 Microsoft Corporation.  All Rights Reserved.
  8.  *
  9.  *--------------------------------------------------------------------------
  10.  *
  11.  *  Define:         Prevent inclusion of:
  12.  *  --------------  --------------------------------------------------------
  13.  *  MMNODRV         Installable driver support
  14.  *  MMNOSOUND       Sound support
  15.  *  MMNOWAVE        Waveform support
  16.  *  MMNOMIDI        MIDI support
  17.  *  MMNOAUX         Auxiliary audio support
  18.  *  MMNOMIXER       Mixer support
  19.  *  MMNOTIMER       Timer support
  20.  *  MMNOJOY         Joystick support
  21.  *  MMNOMCI         MCI support
  22.  *  MMNOMMIO        Multimedia file I/O support
  23.  *  MMNOMMSYSTEM    General MMSYSTEM functions
  24.  *
  25.  *==========================================================================
  26.  */
  27. #ifndef _INC_MMSYSTEM
  28. #define _INC_MMSYSTEM   /* #defined if mmsystem.h has been included */
  29. #ifdef _WIN32
  30. #include <pshpack1.h>
  31. #else
  32. #ifndef RC_INVOKED
  33. #pragma pack(1)
  34. #endif
  35. #endif
  36. #ifdef __cplusplus
  37. extern "C" {            /* Assume C declarations for C++ */
  38. #endif  /* __cplusplus */
  39. #ifdef _WIN32
  40. #ifndef _WINMM_
  41. #define WINMMAPI        DECLSPEC_IMPORT
  42. #else
  43. #define WINMMAPI
  44. #endif
  45. #define _loadds
  46. #define _huge
  47. #else
  48. #define WINMMAPI
  49. #endif
  50. #ifdef _MAC
  51. #include <macwin32.h>
  52. #endif //_MAC
  53. /****************************************************************************
  54.                     General constants and data types
  55. ****************************************************************************/
  56. /* general constants */
  57. #define MAXPNAMELEN      32     /* max product name length (including NULL) */
  58. #define MAXERRORLENGTH   256    /* max error text length (including NULL) */
  59. #define MAX_JOYSTICKOEMVXDNAME 260 /* max oem vxd name length (including NULL) */
  60. /*
  61.  *  Microsoft Manufacturer and Product ID's (these have been moved to
  62.  *  MMREG.H for Windows 4.00 and above).
  63.  */
  64. #if (WINVER <= 0x0400)
  65. #ifndef MM_MICROSOFT
  66. #define MM_MICROSOFT            1   /* Microsoft Corporation */
  67. #endif
  68. #ifndef MM_MIDI_MAPPER
  69. #define MM_MIDI_MAPPER          1   /* MIDI Mapper */
  70. #define MM_WAVE_MAPPER          2   /* Wave Mapper */
  71. #define MM_SNDBLST_MIDIOUT      3   /* Sound Blaster MIDI output port */
  72. #define MM_SNDBLST_MIDIIN       4   /* Sound Blaster MIDI input port */
  73. #define MM_SNDBLST_SYNTH        5   /* Sound Blaster internal synthesizer */
  74. #define MM_SNDBLST_WAVEOUT      6   /* Sound Blaster waveform output */
  75. #define MM_SNDBLST_WAVEIN       7   /* Sound Blaster waveform input */
  76. #define MM_ADLIB                9   /* Ad Lib-compatible synthesizer */
  77. #define MM_MPU401_MIDIOUT      10   /* MPU401-compatible MIDI output port */
  78. #define MM_MPU401_MIDIIN       11   /* MPU401-compatible MIDI input port */
  79. #define MM_PC_JOYSTICK         12   /* Joystick adapter */
  80. #endif
  81. #endif
  82. /* general data types */
  83. #ifdef _WIN32
  84. typedef UINT        MMVERSION;  /* major (high byte), minor (low byte) */
  85. #else
  86. typedef UINT        VERSION;    /* major (high byte), minor (low byte) */
  87. #endif
  88. typedef UINT        MMRESULT;   /* error return code, 0 means no error */
  89.                                 /* call as if(err=xxxx(...)) Error(err); else */
  90. #define _MMRESULT_
  91. typedef UINT FAR   *LPUINT;
  92. /* MMTIME data structure */
  93. typedef struct mmtime_tag
  94. {
  95.     UINT            wType;      /* indicates the contents of the union */
  96.     union
  97.     {
  98.         DWORD       ms;         /* milliseconds */
  99.         DWORD       sample;     /* samples */
  100.         DWORD       cb;         /* byte count */
  101.         DWORD       ticks;      /* ticks in MIDI stream */
  102.         /* SMPTE */
  103.         struct
  104.         {
  105.             BYTE    hour;       /* hours */
  106.             BYTE    min;        /* minutes */
  107.             BYTE    sec;        /* seconds */
  108.             BYTE    frame;      /* frames  */
  109.             BYTE    fps;        /* frames per second */
  110.             BYTE    dummy;      /* pad */
  111. #ifdef _WIN32
  112.             BYTE    pad[2];
  113. #endif
  114.         } smpte;
  115.         /* MIDI */
  116.         struct
  117.         {
  118.             DWORD songptrpos;   /* song pointer position */
  119.         } midi;
  120.     } u;
  121. } MMTIME, *PMMTIME, NEAR *NPMMTIME, FAR *LPMMTIME;
  122. /* types for wType field in MMTIME struct */
  123. #define TIME_MS         0x0001  /* time in milliseconds */
  124. #define TIME_SAMPLES    0x0002  /* number of wave samples */
  125. #define TIME_BYTES      0x0004  /* current byte offset */
  126. #define TIME_SMPTE      0x0008  /* SMPTE time */
  127. #define TIME_MIDI       0x0010  /* MIDI time */
  128. #define TIME_TICKS      0x0020  /* Ticks within MIDI stream */
  129. /*
  130.  *
  131.  *
  132.  */
  133. #define MAKEFOURCC(ch0, ch1, ch2, ch3)                              
  134.                 ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |   
  135.                 ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
  136. /****************************************************************************
  137.                     Multimedia Extensions Window Messages
  138. ****************************************************************************/
  139. #define MM_JOY1MOVE         0x3A0           /* joystick */
  140. #define MM_JOY2MOVE         0x3A1
  141. #define MM_JOY1ZMOVE        0x3A2
  142. #define MM_JOY2ZMOVE        0x3A3
  143. #define MM_JOY1BUTTONDOWN   0x3B5
  144. #define MM_JOY2BUTTONDOWN   0x3B6
  145. #define MM_JOY1BUTTONUP     0x3B7
  146. #define MM_JOY2BUTTONUP     0x3B8
  147. #define MM_MCINOTIFY        0x3B9           /* MCI */
  148. #define MM_WOM_OPEN         0x3BB           /* waveform output */
  149. #define MM_WOM_CLOSE        0x3BC
  150. #define MM_WOM_DONE         0x3BD
  151. #define MM_WIM_OPEN         0x3BE           /* waveform input */
  152. #define MM_WIM_CLOSE        0x3BF
  153. #define MM_WIM_DATA         0x3C0
  154. #define MM_MIM_OPEN         0x3C1           /* MIDI input */
  155. #define MM_MIM_CLOSE        0x3C2
  156. #define MM_MIM_DATA         0x3C3
  157. #define MM_MIM_LONGDATA     0x3C4
  158. #define MM_MIM_ERROR        0x3C5
  159. #define MM_MIM_LONGERROR    0x3C6
  160. #define MM_MOM_OPEN         0x3C7           /* MIDI output */
  161. #define MM_MOM_CLOSE        0x3C8
  162. #define MM_MOM_DONE         0x3C9
  163. /* these are also in msvideo.h */
  164. #ifndef MM_DRVM_OPEN
  165.  #define MM_DRVM_OPEN       0x3D0           /* installable drivers */
  166.  #define MM_DRVM_CLOSE      0x3D1
  167.  #define MM_DRVM_DATA       0x3D2
  168.  #define MM_DRVM_ERROR      0x3D3
  169. #endif
  170. /* these are used by msacm.h */
  171. #define MM_STREAM_OPEN      0x3D4
  172. #define MM_STREAM_CLOSE     0x3D5
  173. #define MM_STREAM_DONE      0x3D6
  174. #define MM_STREAM_ERROR     0x3D7
  175. #if(WINVER >= 0x0400)
  176. #define MM_MOM_POSITIONCB   0x3CA           /* Callback for MEVT_POSITIONCB */
  177. #ifndef MM_MCISIGNAL
  178.  #define MM_MCISIGNAL        0x3CB
  179. #endif
  180. #define MM_MIM_MOREDATA      0x3CC          /* MIM_DONE w/ pending events */
  181. #endif /* WINVER >= 0x0400 */
  182. #define MM_MIXM_LINE_CHANGE     0x3D0       /* mixer line change notify */
  183. #define MM_MIXM_CONTROL_CHANGE  0x3D1       /* mixer control change notify */
  184. /****************************************************************************
  185.                 String resource number bases (internal use)
  186. ****************************************************************************/
  187. #define MMSYSERR_BASE          0
  188. #define WAVERR_BASE            32
  189. #define MIDIERR_BASE           64
  190. #define TIMERR_BASE            96
  191. #define JOYERR_BASE            160
  192. #define MCIERR_BASE            256
  193. #define MIXERR_BASE            1024
  194. #define MCI_STRING_OFFSET      512
  195. #define MCI_VD_OFFSET          1024
  196. #define MCI_CD_OFFSET          1088
  197. #define MCI_WAVE_OFFSET        1152
  198. #define MCI_SEQ_OFFSET         1216
  199. /****************************************************************************
  200.                         General error return values
  201. ****************************************************************************/
  202. /* general error return values */
  203. #define MMSYSERR_NOERROR      0                    /* no error */
  204. #define MMSYSERR_ERROR        (MMSYSERR_BASE + 1)  /* unspecified error */
  205. #define MMSYSERR_BADDEVICEID  (MMSYSERR_BASE + 2)  /* device ID out of range */
  206. #define MMSYSERR_NOTENABLED   (MMSYSERR_BASE + 3)  /* driver failed enable */
  207. #define MMSYSERR_ALLOCATED    (MMSYSERR_BASE + 4)  /* device already allocated */
  208. #define MMSYSERR_INVALHANDLE  (MMSYSERR_BASE + 5)  /* device handle is invalid */
  209. #define MMSYSERR_NODRIVER     (MMSYSERR_BASE + 6)  /* no device driver present */
  210. #define MMSYSERR_NOMEM        (MMSYSERR_BASE + 7)  /* memory allocation error */
  211. #define MMSYSERR_NOTSUPPORTED (MMSYSERR_BASE + 8)  /* function isn't supported */
  212. #define MMSYSERR_BADERRNUM    (MMSYSERR_BASE + 9)  /* error value out of range */
  213. #define MMSYSERR_INVALFLAG    (MMSYSERR_BASE + 10) /* invalid flag passed */
  214. #define MMSYSERR_INVALPARAM   (MMSYSERR_BASE + 11) /* invalid parameter passed */
  215. #define MMSYSERR_HANDLEBUSY   (MMSYSERR_BASE + 12) /* handle being used */
  216.                                                    /* simultaneously on another */
  217.                                                    /* thread (eg callback) */
  218. #define MMSYSERR_INVALIDALIAS (MMSYSERR_BASE + 13) /* specified alias not found */
  219. #define MMSYSERR_BADDB        (MMSYSERR_BASE + 14) /* bad registry database */
  220. #define MMSYSERR_KEYNOTFOUND  (MMSYSERR_BASE + 15) /* registry key not found */
  221. #define MMSYSERR_READERROR    (MMSYSERR_BASE + 16) /* registry read error */
  222. #define MMSYSERR_WRITEERROR   (MMSYSERR_BASE + 17) /* registry write error */
  223. #define MMSYSERR_DELETEERROR  (MMSYSERR_BASE + 18) /* registry delete error */
  224. #define MMSYSERR_VALNOTFOUND  (MMSYSERR_BASE + 19) /* registry value not found */
  225. #define MMSYSERR_NODRIVERCB   (MMSYSERR_BASE + 20) /* driver does not call DriverCallback */
  226. #define MMSYSERR_MOREDATA     (MMSYSERR_BASE + 21) /* more data to be returned */
  227. #define MMSYSERR_LASTERROR    (MMSYSERR_BASE + 21) /* last error in range */
  228. #if (WINVER < 0x030a) || defined(_WIN32)
  229. DECLARE_HANDLE(HDRVR);
  230. #endif /* ifdef WINVER < 0x030a */
  231. #ifndef MMNODRV
  232. /****************************************************************************
  233.                         Installable driver support
  234. ****************************************************************************/
  235. #ifdef _WIN32
  236. typedef struct DRVCONFIGINFOEX {
  237.     DWORD   dwDCISize;
  238.     LPCWSTR  lpszDCISectionName;
  239.     LPCWSTR  lpszDCIAliasName;
  240.     DWORD    dnDevNode;
  241. } DRVCONFIGINFOEX, *PDRVCONFIGINFOEX, NEAR *NPDRVCONFIGINFOEX, FAR *LPDRVCONFIGINFOEX;
  242. #else
  243. typedef struct DRVCONFIGINFOEX {
  244.     DWORD   dwDCISize;
  245.     LPCSTR  lpszDCISectionName;
  246.     LPCSTR  lpszDCIAliasName;
  247.     DWORD    dnDevNode;
  248. } DRVCONFIGINFOEX, *PDRVCONFIGINFOEX, NEAR *NPDRVCONFIGINFOEX, FAR *LPDRVCONFIGINFOEX;
  249. #endif
  250. #if (WINVER < 0x030a) || defined(_WIN32)
  251. #ifndef DRV_LOAD
  252. /* Driver messages */
  253. #define DRV_LOAD                0x0001
  254. #define DRV_ENABLE              0x0002
  255. #define DRV_OPEN                0x0003
  256. #define DRV_CLOSE               0x0004
  257. #define DRV_DISABLE             0x0005
  258. #define DRV_FREE                0x0006
  259. #define DRV_CONFIGURE           0x0007
  260. #define DRV_QUERYCONFIGURE      0x0008
  261. #define DRV_INSTALL             0x0009
  262. #define DRV_REMOVE              0x000A
  263. #define DRV_EXITSESSION         0x000B
  264. #define DRV_POWER               0x000F
  265. #define DRV_RESERVED            0x0800
  266. #define DRV_USER                0x4000
  267. /* LPARAM of DRV_CONFIGURE message */
  268. #ifdef _WIN32
  269. typedef struct tagDRVCONFIGINFO {
  270.     DWORD   dwDCISize;
  271.     LPCWSTR  lpszDCISectionName;
  272.     LPCWSTR  lpszDCIAliasName;
  273. } DRVCONFIGINFO, *PDRVCONFIGINFO, NEAR *NPDRVCONFIGINFO, FAR *LPDRVCONFIGINFO;
  274. #else
  275. typedef struct tagDRVCONFIGINFO {
  276.     DWORD   dwDCISize;
  277.     LPCSTR  lpszDCISectionName;
  278.     LPCSTR  lpszDCIAliasName;
  279. } DRVCONFIGINFO, *PDRVCONFIGINFO, NEAR *NPDRVCONFIGINFO, FAR *LPDRVCONFIGINFO;
  280. #endif
  281. /* Supported return values for DRV_CONFIGURE message */
  282. #define DRVCNF_CANCEL           0x0000
  283. #define DRVCNF_OK               0x0001
  284. #define DRVCNF_RESTART          0x0002
  285. /* installable driver function prototypes */
  286. #ifdef _WIN32
  287. typedef LRESULT (CALLBACK* DRIVERPROC)(DWORD_PTR, HDRVR, UINT, LPARAM, LPARAM);
  288. WINMMAPI LRESULT   WINAPI CloseDriver( IN HDRVR hDriver, IN LPARAM lParam1, IN LPARAM lParam2);
  289. WINMMAPI HDRVR     WINAPI OpenDriver( IN LPCWSTR szDriverName, IN LPCWSTR szSectionName, IN LPARAM lParam2);
  290. WINMMAPI LRESULT   WINAPI SendDriverMessage( IN HDRVR hDriver, IN UINT message, IN LPARAM lParam1, IN LPARAM lParam2);
  291. WINMMAPI HMODULE   WINAPI DrvGetModuleHandle( IN HDRVR hDriver);
  292. WINMMAPI HMODULE   WINAPI GetDriverModuleHandle( IN HDRVR hDriver);
  293. WINMMAPI LRESULT   WINAPI DefDriverProc( IN DWORD_PTR dwDriverIdentifier, IN HDRVR hdrvr, IN UINT uMsg, IN LPARAM lParam1, IN LPARAM lParam2);
  294. #else
  295. LRESULT   WINAPI DrvClose(HDRVR hdrvr, LPARAM lParam1, LPARAM lParam2);
  296. HDRVR     WINAPI DrvOpen(LPCSTR szDriverName, LPCSTR szSectionName, LPARAM lParam2);
  297. LRESULT   WINAPI DrvSendMessage(HDRVR hdrvr, UINT uMsg, LPARAM lParam1, LPARAM lParam2);
  298. HINSTANCE WINAPI DrvGetModuleHandle(HDRVR hdrvr);
  299. LRESULT   WINAPI DrvDefDriverProc(DWORD dwDriverIdentifier, HDRVR hdrvr, UINT uMsg, LPARAM lParam1, LPARAM lParam2);
  300. #define DefDriverProc DrvDefDriverProc
  301. #endif /* ifdef _WIN32 */
  302. #endif /* DRV_LOAD */
  303. #endif /* ifdef (WINVER < 0x030a) || defined(_WIN32) */
  304. #if (WINVER >= 0x030a)
  305. /* return values from DriverProc() function */
  306. #define DRV_CANCEL             DRVCNF_CANCEL
  307. #define DRV_OK                 DRVCNF_OK
  308. #define DRV_RESTART            DRVCNF_RESTART
  309. #endif /* ifdef WINVER >= 0x030a */
  310. #define DRV_MCI_FIRST          DRV_RESERVED
  311. #define DRV_MCI_LAST           (DRV_RESERVED + 0xFFF)
  312. #endif  /* ifndef MMNODRV */
  313. /****************************************************************************
  314.                           Driver callback support
  315. ****************************************************************************/
  316. /* flags used with waveOutOpen(), waveInOpen(), midiInOpen(), and */
  317. /* midiOutOpen() to specify the type of the dwCallback parameter. */
  318. #define CALLBACK_TYPEMASK   0x00070000l    /* callback type mask */
  319. #define CALLBACK_NULL       0x00000000l    /* no callback */
  320. #define CALLBACK_WINDOW     0x00010000l    /* dwCallback is a HWND */
  321. #define CALLBACK_TASK       0x00020000l    /* dwCallback is a HTASK */
  322. #define CALLBACK_FUNCTION   0x00030000l    /* dwCallback is a FARPROC */
  323. #ifdef _WIN32
  324. #define CALLBACK_THREAD     (CALLBACK_TASK)/* thread ID replaces 16 bit task */
  325. #define CALLBACK_EVENT      0x00050000l    /* dwCallback is an EVENT Handle */
  326. #endif
  327. typedef void (CALLBACK DRVCALLBACK)(HDRVR hdrvr, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2);
  328. typedef DRVCALLBACK FAR *LPDRVCALLBACK;
  329. #ifdef _WIN32
  330. typedef DRVCALLBACK     *PDRVCALLBACK;
  331. #endif
  332. #ifndef MMNOMMSYSTEM
  333. /****************************************************************************
  334.                     General MMSYSTEM support
  335. ****************************************************************************/
  336. #if (WINVER <= 0x030A)
  337. WINMMAPI UINT WINAPI mmsystemGetVersion(void);
  338. #endif
  339. #ifdef _WIN32
  340. #define OutputDebugStr  OutputDebugString
  341. #else
  342. void WINAPI OutputDebugStr(LPCSTR);
  343. #endif
  344. #endif  /* ifndef MMNOMMSYSTEM */
  345. #ifndef MMNOSOUND
  346. /****************************************************************************
  347.                             Sound support
  348. ****************************************************************************/
  349. #ifdef _WIN32
  350. WINMMAPI BOOL WINAPI sndPlaySoundA( IN LPCSTR pszSound, IN UINT fuSound);
  351. WINMMAPI BOOL WINAPI sndPlaySoundW( IN LPCWSTR pszSound, IN UINT fuSound);
  352. #ifdef UNICODE
  353. #define sndPlaySound  sndPlaySoundW
  354. #else
  355. #define sndPlaySound  sndPlaySoundA
  356. #endif // !UNICODE
  357. #else
  358. BOOL WINAPI sndPlaySound(LPCSTR pszSound, UINT fuSound);
  359. #endif
  360. /*
  361.  *  flag values for fuSound and fdwSound arguments on [snd]PlaySound
  362.  */
  363. #define SND_SYNC            0x0000  /* play synchronously (default) */
  364. #define SND_ASYNC           0x0001  /* play asynchronously */
  365. #define SND_NODEFAULT       0x0002  /* silence (!default) if sound not found */
  366. #define SND_MEMORY          0x0004  /* pszSound points to a memory file */
  367. #define SND_LOOP            0x0008  /* loop the sound until next sndPlaySound */
  368. #define SND_NOSTOP          0x0010  /* don't stop any currently playing sound */
  369. #define SND_NOWAIT      0x00002000L /* don't wait if the driver is busy */
  370. #define SND_ALIAS       0x00010000L /* name is a registry alias */
  371. #define SND_ALIAS_ID    0x00110000L /* alias is a predefined ID */
  372. #define SND_FILENAME    0x00020000L /* name is file name */
  373. #define SND_RESOURCE    0x00040004L /* name is resource name or atom */
  374. #if(WINVER >= 0x0400)
  375. #define SND_PURGE           0x0040  /* purge non-static events for task */
  376. #define SND_APPLICATION     0x0080  /* look for application specific association */
  377. #endif /* WINVER >= 0x0400 */
  378. #define SND_ALIAS_START 0           /* alias base */
  379. #ifdef _WIN32
  380. #define sndAlias(ch0, ch1)      (SND_ALIAS_START + (DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8))
  381. #define SND_ALIAS_SYSTEMASTERISK        sndAlias('S', '*')
  382. #define SND_ALIAS_SYSTEMQUESTION        sndAlias('S', '?')
  383. #define SND_ALIAS_SYSTEMHAND            sndAlias('S', 'H')
  384. #define SND_ALIAS_SYSTEMEXIT            sndAlias('S', 'E')
  385. #define SND_ALIAS_SYSTEMSTART           sndAlias('S', 'S')
  386. #define SND_ALIAS_SYSTEMWELCOME         sndAlias('S', 'W')
  387. #define SND_ALIAS_SYSTEMEXCLAMATION     sndAlias('S', '!')
  388. #define SND_ALIAS_SYSTEMDEFAULT         sndAlias('S', 'D')
  389. WINMMAPI BOOL WINAPI PlaySoundA( IN LPCSTR pszSound, IN HMODULE hmod, IN DWORD fdwSound);
  390. WINMMAPI BOOL WINAPI PlaySoundW( IN LPCWSTR pszSound, IN HMODULE hmod, IN DWORD fdwSound);
  391. #ifdef UNICODE
  392. #define PlaySound  PlaySoundW
  393. #else
  394. #define PlaySound  PlaySoundA
  395. #endif // !UNICODE
  396. #else
  397. BOOL WINAPI PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound);
  398. #endif
  399. #endif  /* ifndef MMNOSOUND */
  400. #ifndef MMNOWAVE
  401. /****************************************************************************
  402.                         Waveform audio support
  403. ****************************************************************************/
  404. /* waveform audio error return values */
  405. #define WAVERR_BADFORMAT      (WAVERR_BASE + 0)    /* unsupported wave format */
  406. #define WAVERR_STILLPLAYING   (WAVERR_BASE + 1)    /* still something playing */
  407. #define WAVERR_UNPREPARED     (WAVERR_BASE + 2)    /* header not prepared */
  408. #define WAVERR_SYNC           (WAVERR_BASE + 3)    /* device is synchronous */
  409. #define WAVERR_LASTERROR      (WAVERR_BASE + 3)    /* last error in range */
  410. /* waveform audio data types */
  411. DECLARE_HANDLE(HWAVE);
  412. DECLARE_HANDLE(HWAVEIN);
  413. DECLARE_HANDLE(HWAVEOUT);
  414. typedef HWAVEIN FAR *LPHWAVEIN;
  415. typedef HWAVEOUT FAR *LPHWAVEOUT;
  416. typedef DRVCALLBACK WAVECALLBACK;
  417. typedef WAVECALLBACK FAR *LPWAVECALLBACK;
  418. /* wave callback messages */
  419. #define WOM_OPEN        MM_WOM_OPEN
  420. #define WOM_CLOSE       MM_WOM_CLOSE
  421. #define WOM_DONE        MM_WOM_DONE
  422. #define WIM_OPEN        MM_WIM_OPEN
  423. #define WIM_CLOSE       MM_WIM_CLOSE
  424. #define WIM_DATA        MM_WIM_DATA
  425. /* device ID for wave device mapper */
  426. #define WAVE_MAPPER     ((UINT)-1)
  427. /* flags for dwFlags parameter in waveOutOpen() and waveInOpen() */
  428. #define  WAVE_FORMAT_QUERY         0x0001
  429. #define  WAVE_ALLOWSYNC            0x0002
  430. #if(WINVER >= 0x0400)
  431. #define  WAVE_MAPPED               0x0004
  432. #define  WAVE_FORMAT_DIRECT        0x0008
  433. #define  WAVE_FORMAT_DIRECT_QUERY  (WAVE_FORMAT_QUERY | WAVE_FORMAT_DIRECT)
  434. #endif /* WINVER >= 0x0400 */
  435. /* wave data block header */
  436. typedef struct wavehdr_tag {
  437.     LPSTR       lpData;                 /* pointer to locked data buffer */
  438.     DWORD       dwBufferLength;         /* length of data buffer */
  439.     DWORD       dwBytesRecorded;        /* used for input only */
  440.     DWORD_PTR   dwUser;                 /* for client's use */
  441.     DWORD       dwFlags;                /* assorted flags (see defines) */
  442.     DWORD       dwLoops;                /* loop control counter */
  443.     struct wavehdr_tag FAR *lpNext;     /* reserved for driver */
  444.     DWORD_PTR   reserved;               /* reserved for driver */
  445. } WAVEHDR, *PWAVEHDR, NEAR *NPWAVEHDR, FAR *LPWAVEHDR;
  446. /* flags for dwFlags field of WAVEHDR */
  447. #define WHDR_DONE       0x00000001  /* done bit */
  448. #define WHDR_PREPARED   0x00000002  /* set if this header has been prepared */
  449. #define WHDR_BEGINLOOP  0x00000004  /* loop start block */
  450. #define WHDR_ENDLOOP    0x00000008  /* loop end block */
  451. #define WHDR_INQUEUE    0x00000010  /* reserved for driver */
  452. /* waveform output device capabilities structure */
  453. #ifdef _WIN32
  454. typedef struct tagWAVEOUTCAPSA {
  455.     WORD    wMid;                  /* manufacturer ID */
  456.     WORD    wPid;                  /* product ID */
  457.     MMVERSION vDriverVersion;      /* version of the driver */
  458.     CHAR    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  459.     DWORD   dwFormats;             /* formats supported */
  460.     WORD    wChannels;             /* number of sources supported */
  461.     WORD    wReserved1;            /* packing */
  462.     DWORD   dwSupport;             /* functionality supported by driver */
  463. } WAVEOUTCAPSA, *PWAVEOUTCAPSA, *NPWAVEOUTCAPSA, *LPWAVEOUTCAPSA;
  464. typedef struct tagWAVEOUTCAPSW {
  465.     WORD    wMid;                  /* manufacturer ID */
  466.     WORD    wPid;                  /* product ID */
  467.     MMVERSION vDriverVersion;      /* version of the driver */
  468.     WCHAR   szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  469.     DWORD   dwFormats;             /* formats supported */
  470.     WORD    wChannels;             /* number of sources supported */
  471.     WORD    wReserved1;            /* packing */
  472.     DWORD   dwSupport;             /* functionality supported by driver */
  473. } WAVEOUTCAPSW, *PWAVEOUTCAPSW, *NPWAVEOUTCAPSW, *LPWAVEOUTCAPSW;
  474. #ifdef UNICODE
  475. typedef WAVEOUTCAPSW WAVEOUTCAPS;
  476. typedef PWAVEOUTCAPSW PWAVEOUTCAPS;
  477. typedef NPWAVEOUTCAPSW NPWAVEOUTCAPS;
  478. typedef LPWAVEOUTCAPSW LPWAVEOUTCAPS;
  479. #else
  480. typedef WAVEOUTCAPSA WAVEOUTCAPS;
  481. typedef PWAVEOUTCAPSA PWAVEOUTCAPS;
  482. typedef NPWAVEOUTCAPSA NPWAVEOUTCAPS;
  483. typedef LPWAVEOUTCAPSA LPWAVEOUTCAPS;
  484. #endif // UNICODE
  485. typedef struct tagWAVEOUTCAPS2A {
  486.     WORD    wMid;                  /* manufacturer ID */
  487.     WORD    wPid;                  /* product ID */
  488.     MMVERSION vDriverVersion;      /* version of the driver */
  489.     CHAR    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  490.     DWORD   dwFormats;             /* formats supported */
  491.     WORD    wChannels;             /* number of sources supported */
  492.     WORD    wReserved1;            /* packing */
  493.     DWORD   dwSupport;             /* functionality supported by driver */
  494.     GUID    ManufacturerGuid;      /* for extensible MID mapping */
  495.     GUID    ProductGuid;           /* for extensible PID mapping */
  496.     GUID    NameGuid;              /* for name lookup in registry */
  497. } WAVEOUTCAPS2A, *PWAVEOUTCAPS2A, *NPWAVEOUTCAPS2A, *LPWAVEOUTCAPS2A;
  498. typedef struct tagWAVEOUTCAPS2W {
  499.     WORD    wMid;                  /* manufacturer ID */
  500.     WORD    wPid;                  /* product ID */
  501.     MMVERSION vDriverVersion;      /* version of the driver */
  502.     WCHAR   szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  503.     DWORD   dwFormats;             /* formats supported */
  504.     WORD    wChannels;             /* number of sources supported */
  505.     WORD    wReserved1;            /* packing */
  506.     DWORD   dwSupport;             /* functionality supported by driver */
  507.     GUID    ManufacturerGuid;      /* for extensible MID mapping */
  508.     GUID    ProductGuid;           /* for extensible PID mapping */
  509.     GUID    NameGuid;              /* for name lookup in registry */
  510. } WAVEOUTCAPS2W, *PWAVEOUTCAPS2W, *NPWAVEOUTCAPS2W, *LPWAVEOUTCAPS2W;
  511. #ifdef UNICODE
  512. typedef WAVEOUTCAPS2W WAVEOUTCAPS2;
  513. typedef PWAVEOUTCAPS2W PWAVEOUTCAPS2;
  514. typedef NPWAVEOUTCAPS2W NPWAVEOUTCAPS2;
  515. typedef LPWAVEOUTCAPS2W LPWAVEOUTCAPS2;
  516. #else
  517. typedef WAVEOUTCAPS2A WAVEOUTCAPS2;
  518. typedef PWAVEOUTCAPS2A PWAVEOUTCAPS2;
  519. typedef NPWAVEOUTCAPS2A NPWAVEOUTCAPS2;
  520. typedef LPWAVEOUTCAPS2A LPWAVEOUTCAPS2;
  521. #endif // UNICODE
  522. #else
  523. typedef struct waveoutcaps_tag {
  524.     WORD    wMid;                  /* manufacturer ID */
  525.     WORD    wPid;                  /* product ID */
  526.     VERSION vDriverVersion;        /* version of the driver */
  527.     char    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  528.     DWORD   dwFormats;             /* formats supported */
  529.     WORD    wChannels;             /* number of sources supported */
  530.     DWORD   dwSupport;             /* functionality supported by driver */
  531. } WAVEOUTCAPS, *PWAVEOUTCAPS, NEAR *NPWAVEOUTCAPS, FAR *LPWAVEOUTCAPS;
  532. #endif
  533. /* flags for dwSupport field of WAVEOUTCAPS */
  534. #define WAVECAPS_PITCH          0x0001   /* supports pitch control */
  535. #define WAVECAPS_PLAYBACKRATE   0x0002   /* supports playback rate control */
  536. #define WAVECAPS_VOLUME         0x0004   /* supports volume control */
  537. #define WAVECAPS_LRVOLUME       0x0008   /* separate left-right volume control */
  538. #define WAVECAPS_SYNC           0x0010
  539. #define WAVECAPS_SAMPLEACCURATE 0x0020
  540. /* waveform input device capabilities structure */
  541. #ifdef _WIN32
  542. typedef struct tagWAVEINCAPSA {
  543.     WORD    wMid;                    /* manufacturer ID */
  544.     WORD    wPid;                    /* product ID */
  545.     MMVERSION vDriverVersion;        /* version of the driver */
  546.     CHAR    szPname[MAXPNAMELEN];    /* product name (NULL terminated string) */
  547.     DWORD   dwFormats;               /* formats supported */
  548.     WORD    wChannels;               /* number of channels supported */
  549.     WORD    wReserved1;              /* structure packing */
  550. } WAVEINCAPSA, *PWAVEINCAPSA, *NPWAVEINCAPSA, *LPWAVEINCAPSA;
  551. typedef struct tagWAVEINCAPSW {
  552.     WORD    wMid;                    /* manufacturer ID */
  553.     WORD    wPid;                    /* product ID */
  554.     MMVERSION vDriverVersion;        /* version of the driver */
  555.     WCHAR   szPname[MAXPNAMELEN];    /* product name (NULL terminated string) */
  556.     DWORD   dwFormats;               /* formats supported */
  557.     WORD    wChannels;               /* number of channels supported */
  558.     WORD    wReserved1;              /* structure packing */
  559. } WAVEINCAPSW, *PWAVEINCAPSW, *NPWAVEINCAPSW, *LPWAVEINCAPSW;
  560. #ifdef UNICODE
  561. typedef WAVEINCAPSW WAVEINCAPS;
  562. typedef PWAVEINCAPSW PWAVEINCAPS;
  563. typedef NPWAVEINCAPSW NPWAVEINCAPS;
  564. typedef LPWAVEINCAPSW LPWAVEINCAPS;
  565. #else
  566. typedef WAVEINCAPSA WAVEINCAPS;
  567. typedef PWAVEINCAPSA PWAVEINCAPS;
  568. typedef NPWAVEINCAPSA NPWAVEINCAPS;
  569. typedef LPWAVEINCAPSA LPWAVEINCAPS;
  570. #endif // UNICODE
  571. typedef struct tagWAVEINCAPS2A {
  572.     WORD    wMid;                    /* manufacturer ID */
  573.     WORD    wPid;                    /* product ID */
  574.     MMVERSION vDriverVersion;        /* version of the driver */
  575.     CHAR    szPname[MAXPNAMELEN];    /* product name (NULL terminated string) */
  576.     DWORD   dwFormats;               /* formats supported */
  577.     WORD    wChannels;               /* number of channels supported */
  578.     WORD    wReserved1;              /* structure packing */
  579.     GUID    ManufacturerGuid;        /* for extensible MID mapping */
  580.     GUID    ProductGuid;             /* for extensible PID mapping */
  581.     GUID    NameGuid;                /* for name lookup in registry */
  582. } WAVEINCAPS2A, *PWAVEINCAPS2A, *NPWAVEINCAPS2A, *LPWAVEINCAPS2A;
  583. typedef struct tagWAVEINCAPS2W {
  584.     WORD    wMid;                    /* manufacturer ID */
  585.     WORD    wPid;                    /* product ID */
  586.     MMVERSION vDriverVersion;        /* version of the driver */
  587.     WCHAR   szPname[MAXPNAMELEN];    /* product name (NULL terminated string) */
  588.     DWORD   dwFormats;               /* formats supported */
  589.     WORD    wChannels;               /* number of channels supported */
  590.     WORD    wReserved1;              /* structure packing */
  591.     GUID    ManufacturerGuid;        /* for extensible MID mapping */
  592.     GUID    ProductGuid;             /* for extensible PID mapping */
  593.     GUID    NameGuid;                /* for name lookup in registry */
  594. } WAVEINCAPS2W, *PWAVEINCAPS2W, *NPWAVEINCAPS2W, *LPWAVEINCAPS2W;
  595. #ifdef UNICODE
  596. typedef WAVEINCAPS2W WAVEINCAPS2;
  597. typedef PWAVEINCAPS2W PWAVEINCAPS2;
  598. typedef NPWAVEINCAPS2W NPWAVEINCAPS2;
  599. typedef LPWAVEINCAPS2W LPWAVEINCAPS2;
  600. #else
  601. typedef WAVEINCAPS2A WAVEINCAPS2;
  602. typedef PWAVEINCAPS2A PWAVEINCAPS2;
  603. typedef NPWAVEINCAPS2A NPWAVEINCAPS2;
  604. typedef LPWAVEINCAPS2A LPWAVEINCAPS2;
  605. #endif // UNICODE
  606. #else
  607. typedef struct waveincaps_tag {
  608.     WORD    wMid;                    /* manufacturer ID */
  609.     WORD    wPid;                    /* product ID */
  610.     VERSION vDriverVersion;          /* version of the driver */
  611.     char    szPname[MAXPNAMELEN];    /* product name (NULL terminated string) */
  612.     DWORD   dwFormats;               /* formats supported */
  613.     WORD    wChannels;               /* number of channels supported */
  614. } WAVEINCAPS, *PWAVEINCAPS, NEAR *NPWAVEINCAPS, FAR *LPWAVEINCAPS;
  615. #endif
  616. /* defines for dwFormat field of WAVEINCAPS and WAVEOUTCAPS */
  617. #define WAVE_INVALIDFORMAT     0x00000000       /* invalid format */
  618. #define WAVE_FORMAT_1M08       0x00000001       /* 11.025 kHz, Mono,   8-bit  */
  619. #define WAVE_FORMAT_1S08       0x00000002       /* 11.025 kHz, Stereo, 8-bit  */
  620. #define WAVE_FORMAT_1M16       0x00000004       /* 11.025 kHz, Mono,   16-bit */
  621. #define WAVE_FORMAT_1S16       0x00000008       /* 11.025 kHz, Stereo, 16-bit */
  622. #define WAVE_FORMAT_2M08       0x00000010       /* 22.05  kHz, Mono,   8-bit  */
  623. #define WAVE_FORMAT_2S08       0x00000020       /* 22.05  kHz, Stereo, 8-bit  */
  624. #define WAVE_FORMAT_2M16       0x00000040       /* 22.05  kHz, Mono,   16-bit */
  625. #define WAVE_FORMAT_2S16       0x00000080       /* 22.05  kHz, Stereo, 16-bit */
  626. #define WAVE_FORMAT_4M08       0x00000100       /* 44.1   kHz, Mono,   8-bit  */
  627. #define WAVE_FORMAT_4S08       0x00000200       /* 44.1   kHz, Stereo, 8-bit  */
  628. #define WAVE_FORMAT_4M16       0x00000400       /* 44.1   kHz, Mono,   16-bit */
  629. #define WAVE_FORMAT_4S16       0x00000800       /* 44.1   kHz, Stereo, 16-bit */
  630. #define WAVE_FORMAT_44M08      0x00000100       /* 44.1   kHz, Mono,   8-bit  */
  631. #define WAVE_FORMAT_44S08      0x00000200       /* 44.1   kHz, Stereo, 8-bit  */
  632. #define WAVE_FORMAT_44M16      0x00000400       /* 44.1   kHz, Mono,   16-bit */
  633. #define WAVE_FORMAT_44S16      0x00000800       /* 44.1   kHz, Stereo, 16-bit */
  634. #define WAVE_FORMAT_48M08      0x00001000       /* 48     kHz, Mono,   8-bit  */
  635. #define WAVE_FORMAT_48S08      0x00002000       /* 48     kHz, Stereo, 8-bit  */
  636. #define WAVE_FORMAT_48M16      0x00004000       /* 48     kHz, Mono,   16-bit */
  637. #define WAVE_FORMAT_48S16      0x00008000       /* 48     kHz, Stereo, 16-bit */
  638. #define WAVE_FORMAT_96M08      0x00010000       /* 96     kHz, Mono,   8-bit  */
  639. #define WAVE_FORMAT_96S08      0x00020000       /* 96     kHz, Stereo, 8-bit  */
  640. #define WAVE_FORMAT_96M16      0x00040000       /* 96     kHz, Mono,   16-bit */
  641. #define WAVE_FORMAT_96S16      0x00080000       /* 96     kHz, Stereo, 16-bit */
  642. #ifndef WAVE_FORMAT_PCM
  643. /* OLD general waveform format structure (information common to all formats) */
  644. typedef struct waveformat_tag {
  645.     WORD    wFormatTag;        /* format type */
  646.     WORD    nChannels;         /* number of channels (i.e. mono, stereo, etc.) */
  647.     DWORD   nSamplesPerSec;    /* sample rate */
  648.     DWORD   nAvgBytesPerSec;   /* for buffer estimation */
  649.     WORD    nBlockAlign;       /* block size of data */
  650. } WAVEFORMAT, *PWAVEFORMAT, NEAR *NPWAVEFORMAT, FAR *LPWAVEFORMAT;
  651. /* flags for wFormatTag field of WAVEFORMAT */
  652. #define WAVE_FORMAT_PCM     1
  653. /* specific waveform format structure for PCM data */
  654. typedef struct pcmwaveformat_tag {
  655.     WAVEFORMAT  wf;
  656.     WORD        wBitsPerSample;
  657. } PCMWAVEFORMAT, *PPCMWAVEFORMAT, NEAR *NPPCMWAVEFORMAT, FAR *LPPCMWAVEFORMAT;
  658. #endif /* WAVE_FORMAT_PCM */
  659. #ifndef _WAVEFORMATEX_
  660. #define _WAVEFORMATEX_
  661. /*
  662.  *  extended waveform format structure used for all non-PCM formats. this
  663.  *  structure is common to all non-PCM formats.
  664.  */
  665. typedef struct tWAVEFORMATEX
  666. {
  667.     WORD        wFormatTag;         /* format type */
  668.     WORD        nChannels;          /* number of channels (i.e. mono, stereo...) */
  669.     DWORD       nSamplesPerSec;     /* sample rate */
  670.     DWORD       nAvgBytesPerSec;    /* for buffer estimation */
  671.     WORD        nBlockAlign;        /* block size of data */
  672.     WORD        wBitsPerSample;     /* number of bits per sample of mono data */
  673.     WORD        cbSize;             /* the count in bytes of the size of */
  674.                                     /* extra information (after cbSize) */
  675. } WAVEFORMATEX, *PWAVEFORMATEX, NEAR *NPWAVEFORMATEX, FAR *LPWAVEFORMATEX;
  676. #endif /* _WAVEFORMATEX_ */
  677. typedef const WAVEFORMATEX FAR *LPCWAVEFORMATEX;
  678. /* waveform audio function prototypes */
  679. WINMMAPI UINT WINAPI waveOutGetNumDevs(void);
  680. #ifdef _WIN32
  681. WINMMAPI MMRESULT WINAPI waveOutGetDevCapsA( IN UINT_PTR uDeviceID, OUT LPWAVEOUTCAPSA pwoc, IN UINT cbwoc);
  682. WINMMAPI MMRESULT WINAPI waveOutGetDevCapsW( IN UINT_PTR uDeviceID, OUT LPWAVEOUTCAPSW pwoc, IN UINT cbwoc);
  683. #ifdef UNICODE
  684. #define waveOutGetDevCaps  waveOutGetDevCapsW
  685. #else
  686. #define waveOutGetDevCaps  waveOutGetDevCapsA
  687. #endif // !UNICODE
  688. #else
  689. WINMMAPI MMRESULT WINAPI waveOutGetDevCaps( UINT uDeviceID, LPWAVEOUTCAPS pwoc, UINT cbwoc);
  690. #endif
  691. #if (WINVER >= 0x0400)
  692. WINMMAPI MMRESULT WINAPI waveOutGetVolume( IN HWAVEOUT hwo, OUT LPDWORD pdwVolume);
  693. WINMMAPI MMRESULT WINAPI waveOutSetVolume( IN HWAVEOUT hwo, IN DWORD dwVolume);
  694. #else
  695. WINMMAPI MMRESULT WINAPI waveOutGetVolume(UINT uId, LPDWORD pdwVolume);
  696. WINMMAPI MMRESULT WINAPI waveOutSetVolume(UINT uId, DWORD dwVolume);
  697. #endif
  698. #ifdef _WIN32
  699. WINMMAPI MMRESULT WINAPI waveOutGetErrorTextA( IN MMRESULT mmrError, OUT LPSTR pszText, IN UINT cchText);
  700. WINMMAPI MMRESULT WINAPI waveOutGetErrorTextW( IN MMRESULT mmrError, OUT LPWSTR pszText, IN UINT cchText);
  701. #ifdef UNICODE
  702. #define waveOutGetErrorText  waveOutGetErrorTextW
  703. #else
  704. #define waveOutGetErrorText  waveOutGetErrorTextA
  705. #endif // !UNICODE
  706. #else
  707. MMRESULT WINAPI waveOutGetErrorText(MMRESULT mmrError, LPSTR pszText, UINT cchText);
  708. #endif
  709. WINMMAPI MMRESULT WINAPI waveOutOpen( OUT LPHWAVEOUT phwo, IN UINT uDeviceID,
  710.     IN LPCWAVEFORMATEX pwfx, IN DWORD_PTR dwCallback, IN DWORD_PTR dwInstance, IN DWORD fdwOpen);
  711. WINMMAPI MMRESULT WINAPI waveOutClose( IN OUT HWAVEOUT hwo);
  712. WINMMAPI MMRESULT WINAPI waveOutPrepareHeader( IN HWAVEOUT hwo, IN OUT LPWAVEHDR pwh, IN UINT cbwh);
  713. WINMMAPI MMRESULT WINAPI waveOutUnprepareHeader( IN HWAVEOUT hwo, IN OUT LPWAVEHDR pwh, IN UINT cbwh);
  714. WINMMAPI MMRESULT WINAPI waveOutWrite( IN HWAVEOUT hwo, IN OUT LPWAVEHDR pwh, IN UINT cbwh);
  715. WINMMAPI MMRESULT WINAPI waveOutPause( IN HWAVEOUT hwo);
  716. WINMMAPI MMRESULT WINAPI waveOutRestart( IN HWAVEOUT hwo);
  717. WINMMAPI MMRESULT WINAPI waveOutReset( IN HWAVEOUT hwo);
  718. WINMMAPI MMRESULT WINAPI waveOutBreakLoop( IN HWAVEOUT hwo);
  719. WINMMAPI MMRESULT WINAPI waveOutGetPosition( IN HWAVEOUT hwo, IN OUT LPMMTIME pmmt, IN UINT cbmmt);
  720. WINMMAPI MMRESULT WINAPI waveOutGetPitch( IN HWAVEOUT hwo, OUT LPDWORD pdwPitch);
  721. WINMMAPI MMRESULT WINAPI waveOutSetPitch( IN HWAVEOUT hwo, IN DWORD dwPitch);
  722. WINMMAPI MMRESULT WINAPI waveOutGetPlaybackRate( IN HWAVEOUT hwo, OUT LPDWORD pdwRate);
  723. WINMMAPI MMRESULT WINAPI waveOutSetPlaybackRate( IN HWAVEOUT hwo, IN DWORD dwRate);
  724. WINMMAPI MMRESULT WINAPI waveOutGetID( IN HWAVEOUT hwo, OUT LPUINT puDeviceID);
  725. #if (WINVER >= 0x030a)
  726. #ifdef _WIN32
  727. WINMMAPI MMRESULT WINAPI waveOutMessage( IN HWAVEOUT hwo, IN UINT uMsg, IN DWORD_PTR dw1, IN DWORD_PTR dw2);
  728. #else
  729. DWORD WINAPI waveOutMessage(HWAVEOUT hwo, UINT uMsg, DWORD dw1, DWORD dw2);
  730. #endif
  731. #endif /* ifdef WINVER >= 0x030a */
  732. WINMMAPI UINT WINAPI waveInGetNumDevs(void);
  733. #ifdef _WIN32
  734. WINMMAPI MMRESULT WINAPI waveInGetDevCapsA( IN UINT_PTR uDeviceID, OUT LPWAVEINCAPSA pwic, IN UINT cbwic);
  735. WINMMAPI MMRESULT WINAPI waveInGetDevCapsW( IN UINT_PTR uDeviceID, OUT LPWAVEINCAPSW pwic, IN UINT cbwic);
  736. #ifdef UNICODE
  737. #define waveInGetDevCaps  waveInGetDevCapsW
  738. #else
  739. #define waveInGetDevCaps  waveInGetDevCapsA
  740. #endif // !UNICODE
  741. #else
  742. MMRESULT WINAPI waveInGetDevCaps(UINT uDeviceID, LPWAVEINCAPS pwic, UINT cbwic);
  743. #endif
  744. #ifdef _WIN32
  745. WINMMAPI MMRESULT WINAPI waveInGetErrorTextA(IN MMRESULT mmrError, OUT LPSTR pszText, IN UINT cchText);
  746. WINMMAPI MMRESULT WINAPI waveInGetErrorTextW(IN MMRESULT mmrError, OUT LPWSTR pszText, IN UINT cchText);
  747. #ifdef UNICODE
  748. #define waveInGetErrorText  waveInGetErrorTextW
  749. #else
  750. #define waveInGetErrorText  waveInGetErrorTextA
  751. #endif // !UNICODE
  752. #else
  753. MMRESULT WINAPI waveInGetErrorText(MMRESULT mmrError, LPSTR pszText, UINT cchText);
  754. #endif
  755. WINMMAPI MMRESULT WINAPI waveInOpen( OUT LPHWAVEIN phwi, IN UINT uDeviceID,
  756.     IN LPCWAVEFORMATEX pwfx, IN DWORD_PTR dwCallback, IN DWORD_PTR dwInstance, IN DWORD fdwOpen);
  757. WINMMAPI MMRESULT WINAPI waveInClose( IN OUT HWAVEIN hwi);
  758. WINMMAPI MMRESULT WINAPI waveInPrepareHeader( IN HWAVEIN hwi, IN OUT LPWAVEHDR pwh, IN UINT cbwh);
  759. WINMMAPI MMRESULT WINAPI waveInUnprepareHeader( IN HWAVEIN hwi, IN OUT LPWAVEHDR pwh, UINT cbwh);
  760. WINMMAPI MMRESULT WINAPI waveInAddBuffer( IN HWAVEIN hwi, IN OUT LPWAVEHDR pwh, IN UINT cbwh);
  761. WINMMAPI MMRESULT WINAPI waveInStart( IN HWAVEIN hwi);
  762. WINMMAPI MMRESULT WINAPI waveInStop( IN HWAVEIN hwi);
  763. WINMMAPI MMRESULT WINAPI waveInReset( IN HWAVEIN hwi);
  764. WINMMAPI MMRESULT WINAPI waveInGetPosition( IN HWAVEIN hwi, IN OUT LPMMTIME pmmt, IN UINT cbmmt);
  765. WINMMAPI MMRESULT WINAPI waveInGetID( IN HWAVEIN hwi, OUT LPUINT puDeviceID);
  766. #if (WINVER >= 0x030a)
  767. #ifdef _WIN32
  768. WINMMAPI MMRESULT WINAPI waveInMessage( IN HWAVEIN hwi, IN UINT uMsg, IN DWORD_PTR dw1, IN DWORD_PTR dw2);
  769. #else
  770. DWORD WINAPI waveInMessage(HWAVEIN hwi, UINT uMsg, DWORD dw1, DWORD dw2);
  771. #endif
  772. #endif /* ifdef WINVER >= 0x030a */
  773. #endif  /* ifndef MMNOWAVE */
  774. #ifndef MMNOMIDI
  775. /****************************************************************************
  776.                             MIDI audio support
  777. ****************************************************************************/
  778. /* MIDI error return values */
  779. #define MIDIERR_UNPREPARED    (MIDIERR_BASE + 0)   /* header not prepared */
  780. #define MIDIERR_STILLPLAYING  (MIDIERR_BASE + 1)   /* still something playing */
  781. #define MIDIERR_NOMAP         (MIDIERR_BASE + 2)   /* no configured instruments */
  782. #define MIDIERR_NOTREADY      (MIDIERR_BASE + 3)   /* hardware is still busy */
  783. #define MIDIERR_NODEVICE      (MIDIERR_BASE + 4)   /* port no longer connected */
  784. #define MIDIERR_INVALIDSETUP  (MIDIERR_BASE + 5)   /* invalid MIF */
  785. #define MIDIERR_BADOPENMODE   (MIDIERR_BASE + 6)   /* operation unsupported w/ open mode */
  786. #define MIDIERR_DONT_CONTINUE (MIDIERR_BASE + 7)   /* thru device 'eating' a message */
  787. #define MIDIERR_LASTERROR     (MIDIERR_BASE + 7)   /* last error in range */
  788. /* MIDI audio data types */
  789. DECLARE_HANDLE(HMIDI);
  790. DECLARE_HANDLE(HMIDIIN);
  791. DECLARE_HANDLE(HMIDIOUT);
  792. DECLARE_HANDLE(HMIDISTRM);
  793. typedef HMIDI FAR *LPHMIDI;
  794. typedef HMIDIIN FAR *LPHMIDIIN;
  795. typedef HMIDIOUT FAR *LPHMIDIOUT;
  796. typedef HMIDISTRM FAR *LPHMIDISTRM;
  797. typedef DRVCALLBACK MIDICALLBACK;
  798. typedef MIDICALLBACK FAR *LPMIDICALLBACK;
  799. #define MIDIPATCHSIZE   128
  800. typedef WORD PATCHARRAY[MIDIPATCHSIZE];
  801. typedef WORD FAR *LPPATCHARRAY;
  802. typedef WORD KEYARRAY[MIDIPATCHSIZE];
  803. typedef WORD FAR *LPKEYARRAY;
  804. /* MIDI callback messages */
  805. #define MIM_OPEN        MM_MIM_OPEN
  806. #define MIM_CLOSE       MM_MIM_CLOSE
  807. #define MIM_DATA        MM_MIM_DATA
  808. #define MIM_LONGDATA    MM_MIM_LONGDATA
  809. #define MIM_ERROR       MM_MIM_ERROR
  810. #define MIM_LONGERROR   MM_MIM_LONGERROR
  811. #define MOM_OPEN        MM_MOM_OPEN
  812. #define MOM_CLOSE       MM_MOM_CLOSE
  813. #define MOM_DONE        MM_MOM_DONE
  814. #if(WINVER >= 0x0400)
  815. #define MIM_MOREDATA      MM_MIM_MOREDATA
  816. #define MOM_POSITIONCB    MM_MOM_POSITIONCB
  817. #endif /* WINVER >= 0x0400 */
  818. /* device ID for MIDI mapper */
  819. #define MIDIMAPPER     ((UINT)-1)
  820. #define MIDI_MAPPER    ((UINT)-1)
  821. #if(WINVER >= 0x0400)
  822. /* flags for dwFlags parm of midiInOpen() */
  823. #define MIDI_IO_STATUS      0x00000020L
  824. #endif /* WINVER >= 0x0400 */
  825. /* flags for wFlags parm of midiOutCachePatches(), midiOutCacheDrumPatches() */
  826. #define MIDI_CACHE_ALL      1
  827. #define MIDI_CACHE_BESTFIT  2
  828. #define MIDI_CACHE_QUERY    3
  829. #define MIDI_UNCACHE        4
  830. /* MIDI output device capabilities structure */
  831. #ifdef _WIN32
  832. typedef struct tagMIDIOUTCAPSA {
  833.     WORD    wMid;                  /* manufacturer ID */
  834.     WORD    wPid;                  /* product ID */
  835.     MMVERSION vDriverVersion;      /* version of the driver */
  836.     CHAR    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  837.     WORD    wTechnology;           /* type of device */
  838.     WORD    wVoices;               /* # of voices (internal synth only) */
  839.     WORD    wNotes;                /* max # of notes (internal synth only) */
  840.     WORD    wChannelMask;          /* channels used (internal synth only) */
  841.     DWORD   dwSupport;             /* functionality supported by driver */
  842. } MIDIOUTCAPSA, *PMIDIOUTCAPSA, *NPMIDIOUTCAPSA, *LPMIDIOUTCAPSA;
  843. typedef struct tagMIDIOUTCAPSW {
  844.     WORD    wMid;                  /* manufacturer ID */
  845.     WORD    wPid;                  /* product ID */
  846.     MMVERSION vDriverVersion;      /* version of the driver */
  847.     WCHAR   szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  848.     WORD    wTechnology;           /* type of device */
  849.     WORD    wVoices;               /* # of voices (internal synth only) */
  850.     WORD    wNotes;                /* max # of notes (internal synth only) */
  851.     WORD    wChannelMask;          /* channels used (internal synth only) */
  852.     DWORD   dwSupport;             /* functionality supported by driver */
  853. } MIDIOUTCAPSW, *PMIDIOUTCAPSW, *NPMIDIOUTCAPSW, *LPMIDIOUTCAPSW;
  854. #ifdef UNICODE
  855. typedef MIDIOUTCAPSW MIDIOUTCAPS;
  856. typedef PMIDIOUTCAPSW PMIDIOUTCAPS;
  857. typedef NPMIDIOUTCAPSW NPMIDIOUTCAPS;
  858. typedef LPMIDIOUTCAPSW LPMIDIOUTCAPS;
  859. #else
  860. typedef MIDIOUTCAPSA MIDIOUTCAPS;
  861. typedef PMIDIOUTCAPSA PMIDIOUTCAPS;
  862. typedef NPMIDIOUTCAPSA NPMIDIOUTCAPS;
  863. typedef LPMIDIOUTCAPSA LPMIDIOUTCAPS;
  864. #endif // UNICODE
  865. typedef struct tagMIDIOUTCAPS2A {
  866.     WORD    wMid;                  /* manufacturer ID */
  867.     WORD    wPid;                  /* product ID */
  868.     MMVERSION vDriverVersion;      /* version of the driver */
  869.     CHAR    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  870.     WORD    wTechnology;           /* type of device */
  871.     WORD    wVoices;               /* # of voices (internal synth only) */
  872.     WORD    wNotes;                /* max # of notes (internal synth only) */
  873.     WORD    wChannelMask;          /* channels used (internal synth only) */
  874.     DWORD   dwSupport;             /* functionality supported by driver */
  875.     GUID    ManufacturerGuid;      /* for extensible MID mapping */
  876.     GUID    ProductGuid;           /* for extensible PID mapping */
  877.     GUID    NameGuid;              /* for name lookup in registry */
  878. } MIDIOUTCAPS2A, *PMIDIOUTCAPS2A, *NPMIDIOUTCAPS2A, *LPMIDIOUTCAPS2A;
  879. typedef struct tagMIDIOUTCAPS2W {
  880.     WORD    wMid;                  /* manufacturer ID */
  881.     WORD    wPid;                  /* product ID */
  882.     MMVERSION vDriverVersion;      /* version of the driver */
  883.     WCHAR   szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  884.     WORD    wTechnology;           /* type of device */
  885.     WORD    wVoices;               /* # of voices (internal synth only) */
  886.     WORD    wNotes;                /* max # of notes (internal synth only) */
  887.     WORD    wChannelMask;          /* channels used (internal synth only) */
  888.     DWORD   dwSupport;             /* functionality supported by driver */
  889.     GUID    ManufacturerGuid;      /* for extensible MID mapping */
  890.     GUID    ProductGuid;           /* for extensible PID mapping */
  891.     GUID    NameGuid;              /* for name lookup in registry */
  892. } MIDIOUTCAPS2W, *PMIDIOUTCAPS2W, *NPMIDIOUTCAPS2W, *LPMIDIOUTCAPS2W;
  893. #ifdef UNICODE
  894. typedef MIDIOUTCAPS2W MIDIOUTCAPS2;
  895. typedef PMIDIOUTCAPS2W PMIDIOUTCAPS2;
  896. typedef NPMIDIOUTCAPS2W NPMIDIOUTCAPS2;
  897. typedef LPMIDIOUTCAPS2W LPMIDIOUTCAPS2;
  898. #else
  899. typedef MIDIOUTCAPS2A MIDIOUTCAPS2;
  900. typedef PMIDIOUTCAPS2A PMIDIOUTCAPS2;
  901. typedef NPMIDIOUTCAPS2A NPMIDIOUTCAPS2;
  902. typedef LPMIDIOUTCAPS2A LPMIDIOUTCAPS2;
  903. #endif // UNICODE
  904. #else
  905. typedef struct midioutcaps_tag {
  906.     WORD    wMid;                  /* manufacturer ID */
  907.     WORD    wPid;                  /* product ID */
  908.     VERSION vDriverVersion;        /* version of the driver */
  909.     char    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  910.     WORD    wTechnology;           /* type of device */
  911.     WORD    wVoices;               /* # of voices (internal synth only) */
  912.     WORD    wNotes;                /* max # of notes (internal synth only) */
  913.     WORD    wChannelMask;          /* channels used (internal synth only) */
  914.     DWORD   dwSupport;             /* functionality supported by driver */
  915. } MIDIOUTCAPS, *PMIDIOUTCAPS, NEAR *NPMIDIOUTCAPS, FAR *LPMIDIOUTCAPS;
  916. #endif
  917. /* flags for wTechnology field of MIDIOUTCAPS structure */
  918. #define MOD_MIDIPORT    1  /* output port */
  919. #define MOD_SYNTH       2  /* generic internal synth */
  920. #define MOD_SQSYNTH     3  /* square wave internal synth */
  921. #define MOD_FMSYNTH     4  /* FM internal synth */
  922. #define MOD_MAPPER      5  /* MIDI mapper */
  923. #define MOD_WAVETABLE   6  /* hardware wavetable synth */
  924. #define MOD_SWSYNTH     7  /* software synth */
  925. /* flags for dwSupport field of MIDIOUTCAPS structure */
  926. #define MIDICAPS_VOLUME          0x0001  /* supports volume control */
  927. #define MIDICAPS_LRVOLUME        0x0002  /* separate left-right volume control */
  928. #define MIDICAPS_CACHE           0x0004
  929. #if(WINVER >= 0x0400)
  930. #define MIDICAPS_STREAM          0x0008  /* driver supports midiStreamOut directly */
  931. #endif /* WINVER >= 0x0400 */
  932. /* MIDI input device capabilities structure */
  933. #ifdef _WIN32
  934. typedef struct tagMIDIINCAPSA {
  935.     WORD        wMid;                   /* manufacturer ID */
  936.     WORD        wPid;                   /* product ID */
  937.     MMVERSION   vDriverVersion;         /* version of the driver */
  938.     CHAR        szPname[MAXPNAMELEN];   /* product name (NULL terminated string) */
  939. #if (WINVER >= 0x0400)
  940.     DWORD   dwSupport;             /* functionality supported by driver */
  941. #endif
  942. } MIDIINCAPSA, *PMIDIINCAPSA, *NPMIDIINCAPSA, *LPMIDIINCAPSA;
  943. typedef struct tagMIDIINCAPSW {
  944.     WORD        wMid;                   /* manufacturer ID */
  945.     WORD        wPid;                   /* product ID */
  946.     MMVERSION   vDriverVersion;         /* version of the driver */
  947.     WCHAR       szPname[MAXPNAMELEN];   /* product name (NULL terminated string) */
  948. #if (WINVER >= 0x0400)
  949.     DWORD   dwSupport;             /* functionality supported by driver */
  950. #endif
  951. } MIDIINCAPSW, *PMIDIINCAPSW, *NPMIDIINCAPSW, *LPMIDIINCAPSW;
  952. #ifdef UNICODE
  953. typedef MIDIINCAPSW MIDIINCAPS;
  954. typedef PMIDIINCAPSW PMIDIINCAPS;
  955. typedef NPMIDIINCAPSW NPMIDIINCAPS;
  956. typedef LPMIDIINCAPSW LPMIDIINCAPS;
  957. #else
  958. typedef MIDIINCAPSA MIDIINCAPS;
  959. typedef PMIDIINCAPSA PMIDIINCAPS;
  960. typedef NPMIDIINCAPSA NPMIDIINCAPS;
  961. typedef LPMIDIINCAPSA LPMIDIINCAPS;
  962. #endif // UNICODE
  963. typedef struct tagMIDIINCAPS2A {
  964.     WORD        wMid;                   /* manufacturer ID */
  965.     WORD        wPid;                   /* product ID */
  966.     MMVERSION   vDriverVersion;         /* version of the driver */
  967.     CHAR        szPname[MAXPNAMELEN];   /* product name (NULL terminated string) */
  968. #if (WINVER >= 0x0400)
  969.     DWORD       dwSupport;              /* functionality supported by driver */
  970. #endif
  971.     GUID        ManufacturerGuid;       /* for extensible MID mapping */
  972.     GUID        ProductGuid;            /* for extensible PID mapping */
  973.     GUID        NameGuid;               /* for name lookup in registry */
  974. } MIDIINCAPS2A, *PMIDIINCAPS2A, *NPMIDIINCAPS2A, *LPMIDIINCAPS2A;
  975. typedef struct tagMIDIINCAPS2W {
  976.     WORD        wMid;                   /* manufacturer ID */
  977.     WORD        wPid;                   /* product ID */
  978.     MMVERSION   vDriverVersion;         /* version of the driver */
  979.     WCHAR       szPname[MAXPNAMELEN];   /* product name (NULL terminated string) */
  980. #if (WINVER >= 0x0400)
  981.     DWORD       dwSupport;              /* functionality supported by driver */
  982. #endif
  983.     GUID        ManufacturerGuid;       /* for extensible MID mapping */
  984.     GUID        ProductGuid;            /* for extensible PID mapping */
  985.     GUID        NameGuid;               /* for name lookup in registry */
  986. } MIDIINCAPS2W, *PMIDIINCAPS2W, *NPMIDIINCAPS2W, *LPMIDIINCAPS2W;
  987. #ifdef UNICODE
  988. typedef MIDIINCAPS2W MIDIINCAPS2;
  989. typedef PMIDIINCAPS2W PMIDIINCAPS2;
  990. typedef NPMIDIINCAPS2W NPMIDIINCAPS2;
  991. typedef LPMIDIINCAPS2W LPMIDIINCAPS2;
  992. #else
  993. typedef MIDIINCAPS2A MIDIINCAPS2;
  994. typedef PMIDIINCAPS2A PMIDIINCAPS2;
  995. typedef NPMIDIINCAPS2A NPMIDIINCAPS2;
  996. typedef LPMIDIINCAPS2A LPMIDIINCAPS2;
  997. #endif // UNICODE
  998. #else
  999. typedef struct midiincaps_tag {
  1000.     WORD    wMid;                  /* manufacturer ID */
  1001.     WORD    wPid;                  /* product ID */
  1002.     VERSION vDriverVersion;        /* version of the driver */
  1003.     char    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  1004. #if (WINVER >= 0x0400)
  1005.     DWORD   dwSupport;             /* functionality supported by driver */
  1006. #endif
  1007. } MIDIINCAPS, *PMIDIINCAPS, NEAR *NPMIDIINCAPS, FAR *LPMIDIINCAPS;
  1008. #endif
  1009. /* MIDI data block header */
  1010. typedef struct midihdr_tag {
  1011.     LPSTR       lpData;               /* pointer to locked data block */
  1012.     DWORD       dwBufferLength;       /* length of data in data block */
  1013.     DWORD       dwBytesRecorded;      /* used for input only */
  1014.     DWORD_PTR   dwUser;               /* for client's use */
  1015.     DWORD       dwFlags;              /* assorted flags (see defines) */
  1016.     struct midihdr_tag far *lpNext;   /* reserved for driver */
  1017.     DWORD_PTR   reserved;             /* reserved for driver */
  1018. #if (WINVER >= 0x0400)
  1019.     DWORD       dwOffset;             /* Callback offset into buffer */
  1020.     DWORD_PTR   dwReserved[8];        /* Reserved for MMSYSTEM */
  1021. #endif
  1022. } MIDIHDR, *PMIDIHDR, NEAR *NPMIDIHDR, FAR *LPMIDIHDR;
  1023. #if(WINVER >= 0x0400)
  1024. typedef struct midievent_tag
  1025. {
  1026.     DWORD       dwDeltaTime;          /* Ticks since last event */
  1027.     DWORD       dwStreamID;           /* Reserved; must be zero */
  1028.     DWORD       dwEvent;              /* Event type and parameters */
  1029.     DWORD       dwParms[1];           /* Parameters if this is a long event */
  1030. } MIDIEVENT;
  1031. typedef struct midistrmbuffver_tag
  1032. {
  1033.     DWORD       dwVersion;                  /* Stream buffer format version */
  1034.     DWORD       dwMid;                      /* Manufacturer ID as defined in MMREG.H */
  1035.     DWORD       dwOEMVersion;               /* Manufacturer version for custom ext */
  1036. } MIDISTRMBUFFVER;
  1037. #endif /* WINVER >= 0x0400 */
  1038. /* flags for dwFlags field of MIDIHDR structure */
  1039. #define MHDR_DONE       0x00000001       /* done bit */
  1040. #define MHDR_PREPARED   0x00000002       /* set if header prepared */
  1041. #define MHDR_INQUEUE    0x00000004       /* reserved for driver */
  1042. #define MHDR_ISSTRM     0x00000008       /* Buffer is stream buffer */
  1043. #if(WINVER >= 0x0400)
  1044. /* */
  1045. /* Type codes which go in the high byte of the event DWORD of a stream buffer */
  1046. /* */
  1047. /* Type codes 00-7F contain parameters within the low 24 bits */
  1048. /* Type codes 80-FF contain a length of their parameter in the low 24 */
  1049. /* bits, followed by their parameter data in the buffer. The event */
  1050. /* DWORD contains the exact byte length; the parm data itself must be */
  1051. /* padded to be an even multiple of 4 bytes long. */
  1052. /* */
  1053. #define MEVT_F_SHORT        0x00000000L
  1054. #define MEVT_F_LONG         0x80000000L
  1055. #define MEVT_F_CALLBACK     0x40000000L
  1056. #define MEVT_EVENTTYPE(x)   ((BYTE)(((x)>>24)&0xFF))
  1057. #define MEVT_EVENTPARM(x)   ((DWORD)((x)&0x00FFFFFFL))
  1058. #define MEVT_SHORTMSG       ((BYTE)0x00)    /* parm = shortmsg for midiOutShortMsg */
  1059. #define MEVT_TEMPO          ((BYTE)0x01)    /* parm = new tempo in microsec/qn     */
  1060. #define MEVT_NOP            ((BYTE)0x02)    /* parm = unused; does nothing         */
  1061. /* 0x04-0x7F reserved */
  1062. #define MEVT_LONGMSG        ((BYTE)0x80)    /* parm = bytes to send verbatim       */
  1063. #define MEVT_COMMENT        ((BYTE)0x82)    /* parm = comment data                 */
  1064. #define MEVT_VERSION        ((BYTE)0x84)    /* parm = MIDISTRMBUFFVER struct       */
  1065. /* 0x81-0xFF reserved */
  1066. #define MIDISTRM_ERROR      (-2)
  1067. /* */
  1068. /* Structures and defines for midiStreamProperty */
  1069. /* */
  1070. #define MIDIPROP_SET        0x80000000L
  1071. #define MIDIPROP_GET        0x40000000L
  1072. /* These are intentionally both non-zero so the app cannot accidentally */
  1073. /* leave the operation off and happen to appear to work due to default */
  1074. /* action. */
  1075. #define MIDIPROP_TIMEDIV    0x00000001L
  1076. #define MIDIPROP_TEMPO      0x00000002L
  1077. typedef struct midiproptimediv_tag
  1078. {
  1079.     DWORD       cbStruct;
  1080.     DWORD       dwTimeDiv;
  1081. } MIDIPROPTIMEDIV, FAR *LPMIDIPROPTIMEDIV;
  1082. typedef struct midiproptempo_tag
  1083. {
  1084.     DWORD       cbStruct;
  1085.     DWORD       dwTempo;
  1086. } MIDIPROPTEMPO, FAR *LPMIDIPROPTEMPO;
  1087. #endif /* WINVER >= 0x0400 */
  1088. /* MIDI function prototypes */
  1089. WINMMAPI UINT WINAPI midiOutGetNumDevs(void);
  1090. #if(WINVER >= 0x0400)
  1091. WINMMAPI MMRESULT WINAPI midiStreamOpen( OUT LPHMIDISTRM phms, IN LPUINT puDeviceID, IN DWORD cMidi, IN DWORD_PTR dwCallback, IN DWORD_PTR dwInstance, IN DWORD fdwOpen);
  1092. WINMMAPI MMRESULT WINAPI midiStreamClose( IN HMIDISTRM hms);
  1093. WINMMAPI MMRESULT WINAPI midiStreamProperty( IN HMIDISTRM hms, OUT LPBYTE lppropdata, IN DWORD dwProperty);
  1094. WINMMAPI MMRESULT WINAPI midiStreamPosition( IN HMIDISTRM hms, OUT LPMMTIME lpmmt, IN UINT cbmmt);
  1095. WINMMAPI MMRESULT WINAPI midiStreamOut( IN HMIDISTRM hms, IN LPMIDIHDR pmh, IN UINT cbmh);
  1096. WINMMAPI MMRESULT WINAPI midiStreamPause( IN HMIDISTRM hms);
  1097. WINMMAPI MMRESULT WINAPI midiStreamRestart( IN HMIDISTRM hms);
  1098. WINMMAPI MMRESULT WINAPI midiStreamStop( IN HMIDISTRM hms);
  1099. #ifdef _WIN32
  1100. WINMMAPI MMRESULT WINAPI midiConnect( IN HMIDI hmi, IN HMIDIOUT hmo, IN LPVOID pReserved);
  1101. WINMMAPI MMRESULT WINAPI midiDisconnect( IN HMIDI hmi, IN HMIDIOUT hmo, IN LPVOID pReserved);
  1102. #endif
  1103. #endif /* WINVER >= 0x0400 */
  1104. #ifdef _WIN32
  1105. WINMMAPI MMRESULT WINAPI midiOutGetDevCapsA( IN UINT_PTR uDeviceID, OUT LPMIDIOUTCAPSA pmoc, IN UINT cbmoc);
  1106. WINMMAPI MMRESULT WINAPI midiOutGetDevCapsW( IN UINT_PTR uDeviceID, OUT LPMIDIOUTCAPSW pmoc, IN UINT cbmoc);
  1107. #ifdef UNICODE
  1108. #define midiOutGetDevCaps  midiOutGetDevCapsW
  1109. #else
  1110. #define midiOutGetDevCaps  midiOutGetDevCapsA
  1111. #endif // !UNICODE
  1112. #else
  1113. MMRESULT WINAPI midiOutGetDevCaps(UINT uDeviceID, LPMIDIOUTCAPS pmoc, UINT cbmoc);
  1114. #endif
  1115. #if (WINVER >= 0x0400)
  1116. WINMMAPI MMRESULT WINAPI midiOutGetVolume( IN HMIDIOUT hmo, OUT LPDWORD pdwVolume);
  1117. WINMMAPI MMRESULT WINAPI midiOutSetVolume( IN HMIDIOUT hmo, IN DWORD dwVolume);
  1118. #else
  1119. WINMMAPI MMRESULT WINAPI midiOutGetVolume(UINT uId, LPDWORD pdwVolume);
  1120. WINMMAPI MMRESULT WINAPI midiOutSetVolume(UINT uId, DWORD dwVolume);
  1121. #endif
  1122. #ifdef _WIN32
  1123. WINMMAPI MMRESULT WINAPI midiOutGetErrorTextA( IN MMRESULT mmrError, OUT LPSTR pszText, IN UINT cchText);
  1124. WINMMAPI MMRESULT WINAPI midiOutGetErrorTextW( IN MMRESULT mmrError, OUT LPWSTR pszText, IN UINT cchText);
  1125. #ifdef UNICODE
  1126. #define midiOutGetErrorText  midiOutGetErrorTextW
  1127. #else
  1128. #define midiOutGetErrorText  midiOutGetErrorTextA
  1129. #endif // !UNICODE
  1130. #else
  1131. WINMMAPI MMRESULT WINAPI midiOutGetErrorText(MMRESULT mmrError, LPSTR pszText, UINT cchText);
  1132. #endif
  1133. WINMMAPI MMRESULT WINAPI midiOutOpen( OUT LPHMIDIOUT phmo, IN UINT uDeviceID,
  1134.     IN DWORD_PTR dwCallback, IN DWORD_PTR dwInstance, IN DWORD fdwOpen);
  1135. WINMMAPI MMRESULT WINAPI midiOutClose( IN OUT HMIDIOUT hmo);
  1136. WINMMAPI MMRESULT WINAPI midiOutPrepareHeader( IN HMIDIOUT hmo, IN OUT LPMIDIHDR pmh, IN UINT cbmh);
  1137. WINMMAPI MMRESULT WINAPI midiOutUnprepareHeader(IN HMIDIOUT hmo, IN OUT LPMIDIHDR pmh, IN UINT cbmh);
  1138. WINMMAPI MMRESULT WINAPI midiOutShortMsg( IN HMIDIOUT hmo, IN DWORD dwMsg);
  1139. WINMMAPI MMRESULT WINAPI midiOutLongMsg(IN HMIDIOUT hmo, IN LPMIDIHDR pmh, IN UINT cbmh);
  1140. WINMMAPI MMRESULT WINAPI midiOutReset( IN HMIDIOUT hmo);
  1141. WINMMAPI MMRESULT WINAPI midiOutCachePatches( IN HMIDIOUT hmo, IN UINT uBank, OUT LPWORD pwpa, IN UINT fuCache);
  1142. WINMMAPI MMRESULT WINAPI midiOutCacheDrumPatches( IN HMIDIOUT hmo, IN UINT uPatch, OUT LPWORD pwkya, IN UINT fuCache);
  1143. WINMMAPI MMRESULT WINAPI midiOutGetID( IN HMIDIOUT hmo, OUT LPUINT puDeviceID);
  1144. #if (WINVER >= 0x030a)
  1145. #ifdef _WIN32
  1146. WINMMAPI MMRESULT WINAPI midiOutMessage( IN HMIDIOUT hmo, IN UINT uMsg, IN DWORD_PTR dw1, IN DWORD_PTR dw2);
  1147. #else
  1148. DWORD WINAPI midiOutMessage(HMIDIOUT hmo, UINT uMsg, DWORD dw1, DWORD dw2);
  1149. #endif
  1150. #endif /* ifdef WINVER >= 0x030a */
  1151. WINMMAPI UINT WINAPI midiInGetNumDevs(void);
  1152. #ifdef _WIN32
  1153. WINMMAPI MMRESULT WINAPI midiInGetDevCapsA( IN UINT_PTR uDeviceID, OUT LPMIDIINCAPSA pmic, IN UINT cbmic);
  1154. WINMMAPI MMRESULT WINAPI midiInGetDevCapsW( IN UINT_PTR uDeviceID, OUT LPMIDIINCAPSW pmic, IN UINT cbmic);
  1155. #ifdef UNICODE
  1156. #define midiInGetDevCaps  midiInGetDevCapsW
  1157. #else
  1158. #define midiInGetDevCaps  midiInGetDevCapsA
  1159. #endif // !UNICODE
  1160. WINMMAPI MMRESULT WINAPI midiInGetErrorTextA( IN MMRESULT mmrError, OUT LPSTR pszText, IN UINT cchText);
  1161. WINMMAPI MMRESULT WINAPI midiInGetErrorTextW( IN MMRESULT mmrError, OUT LPWSTR pszText, IN UINT cchText);
  1162. #ifdef UNICODE
  1163. #define midiInGetErrorText  midiInGetErrorTextW
  1164. #else
  1165. #define midiInGetErrorText  midiInGetErrorTextA
  1166. #endif // !UNICODE
  1167. #else
  1168. MMRESULT WINAPI midiInGetDevCaps(UINT uDeviceID, LPMIDIINCAPS pmic, UINT cbmic);
  1169. WINMMAPI MMRESULT WINAPI midiInGetErrorText(MMRESULT mmrError, LPSTR pszText, UINT cchText);
  1170. #endif
  1171. WINMMAPI MMRESULT WINAPI midiInOpen( OUT LPHMIDIIN phmi, IN UINT uDeviceID,
  1172.         IN DWORD_PTR dwCallback, IN DWORD_PTR dwInstance, IN DWORD fdwOpen);
  1173. WINMMAPI MMRESULT WINAPI midiInClose( IN OUT HMIDIIN hmi);
  1174. WINMMAPI MMRESULT WINAPI midiInPrepareHeader( IN HMIDIIN hmi, IN OUT LPMIDIHDR pmh, IN UINT cbmh);
  1175. WINMMAPI MMRESULT WINAPI midiInUnprepareHeader( IN HMIDIIN hmi, IN OUT LPMIDIHDR pmh, IN UINT cbmh);
  1176. WINMMAPI MMRESULT WINAPI midiInAddBuffer( IN HMIDIIN hmi, IN LPMIDIHDR pmh, IN UINT cbmh);
  1177. WINMMAPI MMRESULT WINAPI midiInStart( IN HMIDIIN hmi);
  1178. WINMMAPI MMRESULT WINAPI midiInStop( IN HMIDIIN hmi);
  1179. WINMMAPI MMRESULT WINAPI midiInReset( IN HMIDIIN hmi);
  1180. WINMMAPI MMRESULT WINAPI midiInGetID( IN HMIDIIN hmi, OUT LPUINT puDeviceID);
  1181. #if (WINVER >= 0x030a)
  1182. #ifdef _WIN32
  1183. WINMMAPI MMRESULT WINAPI midiInMessage( IN HMIDIIN hmi, IN UINT uMsg, IN DWORD_PTR dw1, IN DWORD_PTR dw2);
  1184. #else
  1185. DWORD WINAPI midiInMessage(HMIDIIN hmi, UINT uMsg, DWORD dw1, DWORD dw2);
  1186. #endif
  1187. #endif /* ifdef WINVER >= 0x030a */
  1188. #endif  /* ifndef MMNOMIDI */
  1189. #ifndef MMNOAUX
  1190. /****************************************************************************
  1191.                         Auxiliary audio support
  1192. ****************************************************************************/
  1193. /* device ID for aux device mapper */
  1194. #define AUX_MAPPER     ((UINT)-1)
  1195. /* Auxiliary audio device capabilities structure */
  1196. #ifdef _WIN32
  1197. typedef struct tagAUXCAPSA {
  1198.     WORD        wMid;                /* manufacturer ID */
  1199.     WORD        wPid;                /* product ID */
  1200.     MMVERSION   vDriverVersion;      /* version of the driver */
  1201.     CHAR        szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
  1202.     WORD        wTechnology;         /* type of device */
  1203.     WORD        wReserved1;          /* padding */
  1204.     DWORD       dwSupport;           /* functionality supported by driver */
  1205. } AUXCAPSA, *PAUXCAPSA, *NPAUXCAPSA, *LPAUXCAPSA;
  1206. typedef struct tagAUXCAPSW {
  1207.     WORD        wMid;                /* manufacturer ID */
  1208.     WORD        wPid;                /* product ID */
  1209.     MMVERSION   vDriverVersion;      /* version of the driver */
  1210.     WCHAR       szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
  1211.     WORD        wTechnology;         /* type of device */
  1212.     WORD        wReserved1;          /* padding */
  1213.     DWORD       dwSupport;           /* functionality supported by driver */
  1214. } AUXCAPSW, *PAUXCAPSW, *NPAUXCAPSW, *LPAUXCAPSW;
  1215. #ifdef UNICODE
  1216. typedef AUXCAPSW AUXCAPS;
  1217. typedef PAUXCAPSW PAUXCAPS;
  1218. typedef NPAUXCAPSW NPAUXCAPS;
  1219. typedef LPAUXCAPSW LPAUXCAPS;
  1220. #else
  1221. typedef AUXCAPSA AUXCAPS;
  1222. typedef PAUXCAPSA PAUXCAPS;
  1223. typedef NPAUXCAPSA NPAUXCAPS;
  1224. typedef LPAUXCAPSA LPAUXCAPS;
  1225. #endif // UNICODE
  1226. typedef struct tagAUXCAPS2A {
  1227.     WORD        wMid;                /* manufacturer ID */
  1228.     WORD        wPid;                /* product ID */
  1229.     MMVERSION   vDriverVersion;      /* version of the driver */
  1230.     CHAR        szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
  1231.     WORD        wTechnology;         /* type of device */
  1232.     WORD        wReserved1;          /* padding */
  1233.     DWORD       dwSupport;           /* functionality supported by driver */
  1234.     GUID        ManufacturerGuid;    /* for extensible MID mapping */
  1235.     GUID        ProductGuid;         /* for extensible PID mapping */
  1236.     GUID        NameGuid;            /* for name lookup in registry */
  1237. } AUXCAPS2A, *PAUXCAPS2A, *NPAUXCAPS2A, *LPAUXCAPS2A;
  1238. typedef struct tagAUXCAPS2W {
  1239.     WORD        wMid;                /* manufacturer ID */
  1240.     WORD        wPid;                /* product ID */
  1241.     MMVERSION   vDriverVersion;      /* version of the driver */
  1242.     WCHAR       szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
  1243.     WORD        wTechnology;         /* type of device */
  1244.     WORD        wReserved1;          /* padding */
  1245.     DWORD       dwSupport;           /* functionality supported by driver */
  1246.     GUID        ManufacturerGuid;    /* for extensible MID mapping */
  1247.     GUID        ProductGuid;         /* for extensible PID mapping */
  1248.     GUID        NameGuid;            /* for name lookup in registry */
  1249. } AUXCAPS2W, *PAUXCAPS2W, *NPAUXCAPS2W, *LPAUXCAPS2W;
  1250. #ifdef UNICODE
  1251. typedef AUXCAPS2W AUXCAPS2;
  1252. typedef PAUXCAPS2W PAUXCAPS2;
  1253. typedef NPAUXCAPS2W NPAUXCAPS2;
  1254. typedef LPAUXCAPS2W LPAUXCAPS2;
  1255. #else
  1256. typedef AUXCAPS2A AUXCAPS2;
  1257. typedef PAUXCAPS2A PAUXCAPS2;
  1258. typedef NPAUXCAPS2A NPAUXCAPS2;
  1259. typedef LPAUXCAPS2A LPAUXCAPS2;
  1260. #endif // UNICODE
  1261. #else
  1262. typedef struct auxcaps_tag {
  1263.     WORD    wMid;                  /* manufacturer ID */
  1264.     WORD    wPid;                  /* product ID */
  1265.     VERSION vDriverVersion;        /* version of the driver */
  1266.     char    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  1267.     WORD    wTechnology;           /* type of device */
  1268.     DWORD   dwSupport;             /* functionality supported by driver */
  1269. } AUXCAPS, *PAUXCAPS, NEAR *NPAUXCAPS, FAR *LPAUXCAPS;
  1270. #endif
  1271. /* flags for wTechnology field in AUXCAPS structure */
  1272. #define AUXCAPS_CDAUDIO    1       /* audio from internal CD-ROM drive */
  1273. #define AUXCAPS_AUXIN      2       /* audio from auxiliary input jacks */
  1274. /* flags for dwSupport field in AUXCAPS structure */
  1275. #define AUXCAPS_VOLUME          0x0001  /* supports volume control */
  1276. #define AUXCAPS_LRVOLUME        0x0002  /* separate left-right volume control */
  1277. /* auxiliary audio function prototypes */
  1278. WINMMAPI UINT WINAPI auxGetNumDevs(void);
  1279. #ifdef _WIN32
  1280. WINMMAPI MMRESULT WINAPI auxGetDevCapsA( IN UINT_PTR uDeviceID, OUT LPAUXCAPSA pac, IN UINT cbac);
  1281. WINMMAPI MMRESULT WINAPI auxGetDevCapsW( IN UINT_PTR uDeviceID, OUT LPAUXCAPSW pac, IN UINT cbac);
  1282. #ifdef UNICODE
  1283. #define auxGetDevCaps  auxGetDevCapsW
  1284. #else
  1285. #define auxGetDevCaps  auxGetDevCapsA
  1286. #endif // !UNICODE
  1287. #else
  1288. MMRESULT WINAPI auxGetDevCaps(UINT uDeviceID, LPAUXCAPS pac, UINT cbac);
  1289. #endif
  1290. WINMMAPI MMRESULT WINAPI auxSetVolume( IN UINT uDeviceID, IN DWORD dwVolume);
  1291. WINMMAPI MMRESULT WINAPI auxGetVolume( IN UINT uDeviceID, OUT LPDWORD pdwVolume);
  1292. #if (WINVER >= 0x030a)
  1293. #ifdef _WIN32
  1294. WINMMAPI MMRESULT WINAPI auxOutMessage( IN UINT uDeviceID, IN UINT uMsg, IN DWORD_PTR dw1, IN DWORD_PTR dw2);
  1295. #else
  1296. DWORD WINAPI auxOutMessage(UINT uDeviceID, UINT uMsg, DWORD dw1, DWORD dw2);
  1297. #endif
  1298. #endif /* ifdef WINVER >= 0x030a */
  1299. #endif  /* ifndef MMNOAUX */
  1300. #ifndef MMNOMIXER
  1301. /****************************************************************************
  1302.                             Mixer Support
  1303. ****************************************************************************/
  1304. DECLARE_HANDLE(HMIXEROBJ);
  1305. typedef HMIXEROBJ FAR *LPHMIXEROBJ;
  1306. DECLARE_HANDLE(HMIXER);
  1307. typedef HMIXER     FAR *LPHMIXER;
  1308. #define MIXER_SHORT_NAME_CHARS   16
  1309. #define MIXER_LONG_NAME_CHARS    64
  1310. /* */
  1311. /*  MMRESULT error return values specific to the mixer API */
  1312. /* */
  1313. /* */
  1314. #define MIXERR_INVALLINE            (MIXERR_BASE + 0)
  1315. #define MIXERR_INVALCONTROL         (MIXERR_BASE + 1)
  1316. #define MIXERR_INVALVALUE           (MIXERR_BASE + 2)
  1317. #define MIXERR_LASTERROR            (MIXERR_BASE + 2)
  1318. #define MIXER_OBJECTF_HANDLE    0x80000000L
  1319. #define MIXER_OBJECTF_MIXER     0x00000000L
  1320. #define MIXER_OBJECTF_HMIXER    (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIXER)
  1321. #define MIXER_OBJECTF_WAVEOUT   0x10000000L
  1322. #define MIXER_OBJECTF_HWAVEOUT  (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEOUT)
  1323. #define MIXER_OBJECTF_WAVEIN    0x20000000L
  1324. #define MIXER_OBJECTF_HWAVEIN   (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEIN)
  1325. #define MIXER_OBJECTF_MIDIOUT   0x30000000L
  1326. #define MIXER_OBJECTF_HMIDIOUT  (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIOUT)
  1327. #define MIXER_OBJECTF_MIDIIN    0x40000000L
  1328. #define MIXER_OBJECTF_HMIDIIN   (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIIN)
  1329. #define MIXER_OBJECTF_AUX       0x50000000L
  1330. WINMMAPI UINT WINAPI mixerGetNumDevs(void);
  1331. #ifdef _WIN32
  1332. typedef struct tagMIXERCAPSA {
  1333.     WORD            wMid;                   /* manufacturer id */
  1334.     WORD            wPid;                   /* product id */
  1335.     MMVERSION       vDriverVersion;         /* version of the driver */
  1336.     CHAR            szPname[MAXPNAMELEN];   /* product name */
  1337.     DWORD           fdwSupport;             /* misc. support bits */
  1338.     DWORD           cDestinations;          /* count of destinations */
  1339. } MIXERCAPSA, *PMIXERCAPSA, *LPMIXERCAPSA;
  1340. typedef struct tagMIXERCAPSW {
  1341.     WORD            wMid;                   /* manufacturer id */
  1342.     WORD            wPid;                   /* product id */
  1343.     MMVERSION       vDriverVersion;         /* version of the driver */
  1344.     WCHAR           szPname[MAXPNAMELEN];   /* product name */
  1345.     DWORD           fdwSupport;             /* misc. support bits */
  1346.     DWORD           cDestinations;          /* count of destinations */
  1347. } MIXERCAPSW, *PMIXERCAPSW, *LPMIXERCAPSW;
  1348. #ifdef UNICODE
  1349. typedef MIXERCAPSW MIXERCAPS;
  1350. typedef PMIXERCAPSW PMIXERCAPS;
  1351. typedef LPMIXERCAPSW LPMIXERCAPS;
  1352. #else
  1353. typedef MIXERCAPSA MIXERCAPS;
  1354. typedef PMIXERCAPSA PMIXERCAPS;
  1355. typedef LPMIXERCAPSA LPMIXERCAPS;
  1356. #endif // UNICODE
  1357. typedef struct tagMIXERCAPS2A {
  1358.     WORD            wMid;                   /* manufacturer id */
  1359.     WORD            wPid;                   /* product id */
  1360.     MMVERSION       vDriverVersion;         /* version of the driver */
  1361.     CHAR            szPname[MAXPNAMELEN];   /* product name */
  1362.     DWORD           fdwSupport;             /* misc. support bits */
  1363.     DWORD           cDestinations;          /* count of destinations */
  1364.     GUID            ManufacturerGuid;       /* for extensible MID mapping */
  1365.     GUID            ProductGuid;            /* for extensible PID mapping */
  1366.     GUID            NameGuid;               /* for name lookup in registry */
  1367. } MIXERCAPS2A, *PMIXERCAPS2A, *LPMIXERCAPS2A;
  1368. typedef struct tagMIXERCAPS2W {
  1369.     WORD            wMid;                   /* manufacturer id */
  1370.     WORD            wPid;                   /* product id */
  1371.     MMVERSION       vDriverVersion;         /* version of the driver */
  1372.     WCHAR           szPname[MAXPNAMELEN];   /* product name */
  1373.     DWORD           fdwSupport;             /* misc. support bits */
  1374.     DWORD           cDestinations;          /* count of destinations */
  1375.     GUID            ManufacturerGuid;       /* for extensible MID mapping */
  1376.     GUID            ProductGuid;            /* for extensible PID mapping */
  1377.     GUID            NameGuid;               /* for name lookup in registry */
  1378. } MIXERCAPS2W, *PMIXERCAPS2W, *LPMIXERCAPS2W;
  1379. #ifdef UNICODE
  1380. typedef MIXERCAPS2W MIXERCAPS2;
  1381. typedef PMIXERCAPS2W PMIXERCAPS2;
  1382. typedef LPMIXERCAPS2W LPMIXERCAPS2;
  1383. #else
  1384. typedef MIXERCAPS2A MIXERCAPS2;
  1385. typedef PMIXERCAPS2A PMIXERCAPS2;
  1386. typedef LPMIXERCAPS2A LPMIXERCAPS2;
  1387. #endif // UNICODE
  1388. #else
  1389. typedef struct tMIXERCAPS {
  1390.     WORD            wMid;                   /* manufacturer id */
  1391.     WORD            wPid;                   /* product id */
  1392.     VERSION         vDriverVersion;         /* version of the driver */
  1393.     char            szPname[MAXPNAMELEN];   /* product name */
  1394.     DWORD           fdwSupport;             /* misc. support bits */
  1395.     DWORD           cDestinations;          /* count of destinations */
  1396. } MIXERCAPS, *PMIXERCAPS, FAR *LPMIXERCAPS;
  1397. #endif
  1398. #ifdef _WIN32
  1399. WINMMAPI MMRESULT WINAPI mixerGetDevCapsA( IN UINT_PTR uMxId, OUT LPMIXERCAPSA pmxcaps, IN UINT cbmxcaps);
  1400. WINMMAPI MMRESULT WINAPI mixerGetDevCapsW( IN UINT_PTR uMxId, OUT LPMIXERCAPSW pmxcaps, IN UINT cbmxcaps);
  1401. #ifdef UNICODE
  1402. #define mixerGetDevCaps  mixerGetDevCapsW
  1403. #else
  1404. #define mixerGetDevCaps  mixerGetDevCapsA
  1405. #endif // !UNICODE
  1406. #else
  1407. MMRESULT WINAPI mixerGetDevCaps(UINT uMxId, LPMIXERCAPS pmxcaps, UINT cbmxcaps);
  1408. #endif
  1409. WINMMAPI MMRESULT WINAPI mixerOpen( OUT LPHMIXER phmx, IN UINT uMxId, IN DWORD_PTR dwCallback, IN DWORD_PTR dwInstance, IN DWORD fdwOpen);
  1410. WINMMAPI MMRESULT WINAPI mixerClose( IN OUT HMIXER hmx);
  1411. WINMMAPI DWORD WINAPI mixerMessage( IN HMIXER hmx, IN UINT uMsg, IN DWORD_PTR dwParam1, IN DWORD_PTR dwParam2);
  1412. #ifdef _WIN32
  1413. typedef struct tagMIXERLINEA {
  1414.     DWORD       cbStruct;               /* size of MIXERLINE structure */
  1415.     DWORD       dwDestination;          /* zero based destination index */
  1416.     DWORD       dwSource;               /* zero based source index (if source) */
  1417.     DWORD       dwLineID;               /* unique line id for mixer device */
  1418.     DWORD       fdwLine;                /* state/information about line */
  1419.     DWORD_PTR   dwUser;                 /* driver specific information */
  1420.     DWORD       dwComponentType;        /* component type line connects to */
  1421.     DWORD       cChannels;              /* number of channels line supports */
  1422.     DWORD       cConnections;           /* number of connections [possible] */
  1423.     DWORD       cControls;              /* number of controls at this line */
  1424.     CHAR        szShortName[MIXER_SHORT_NAME_CHARS];
  1425.     CHAR        szName[MIXER_LONG_NAME_CHARS];
  1426.     struct {
  1427.         DWORD       dwType;                 /* MIXERLINE_TARGETTYPE_xxxx */
  1428.         DWORD       dwDeviceID;             /* target device ID of device type */
  1429.         WORD        wMid;                   /* of target device */
  1430.         WORD        wPid;                   /*      " */
  1431.         MMVERSION   vDriverVersion;         /*      " */
  1432.         CHAR        szPname[MAXPNAMELEN];   /*      " */
  1433.     } Target;
  1434. } MIXERLINEA, *PMIXERLINEA, *LPMIXERLINEA;
  1435. typedef struct tagMIXERLINEW {
  1436.     DWORD       cbStruct;               /* size of MIXERLINE structure */
  1437.     DWORD       dwDestination;          /* zero based destination index */
  1438.     DWORD       dwSource;               /* zero based source index (if source) */
  1439.     DWORD       dwLineID;               /* unique line id for mixer device */
  1440.     DWORD       fdwLine;                /* state/information about line */
  1441.     DWORD_PTR   dwUser;                 /* driver specific information */
  1442.     DWORD       dwComponentType;        /* component type line connects to */
  1443.     DWORD       cChannels;              /* number of channels line supports */
  1444.     DWORD       cConnections;           /* number of connections [possible] */
  1445.     DWORD       cControls;              /* number of controls at this line */
  1446.     WCHAR       szShortName[MIXER_SHORT_NAME_CHARS];
  1447.     WCHAR       szName[MIXER_LONG_NAME_CHARS];
  1448.     struct {
  1449.         DWORD       dwType;                 /* MIXERLINE_TARGETTYPE_xxxx */
  1450.         DWORD       dwDeviceID;             /* target device ID of device type */
  1451.         WORD        wMid;                   /* of target device */
  1452.         WORD        wPid;                   /*      " */
  1453.         MMVERSION   vDriverVersion;         /*      " */
  1454.         WCHAR       szPname[MAXPNAMELEN];   /*      " */
  1455.     } Target;
  1456. } MIXERLINEW, *PMIXERLINEW, *LPMIXERLINEW;
  1457. #ifdef UNICODE
  1458. typedef MIXERLINEW MIXERLINE;
  1459. typedef PMIXERLINEW PMIXERLINE;
  1460. typedef LPMIXERLINEW LPMIXERLINE;
  1461. #else
  1462. typedef MIXERLINEA MIXERLINE;
  1463. typedef PMIXERLINEA PMIXERLINE;
  1464. typedef LPMIXERLINEA LPMIXERLINE;
  1465. #endif // UNICODE
  1466. #else
  1467. typedef struct tMIXERLINE {
  1468.     DWORD       cbStruct;               /* size of MIXERLINE structure */
  1469.     DWORD       dwDestination;          /* zero based destination index */
  1470.     DWORD       dwSource;               /* zero based source index (if source) */
  1471.     DWORD       dwLineID;               /* unique line id for mixer device */
  1472.     DWORD       fdwLine;                /* state/information about line */
  1473.     DWORD       dwUser;                 /* driver specific information */
  1474.     DWORD       dwComponentType;        /* component type line connects to */
  1475.     DWORD       cChannels;              /* number of channels line supports */
  1476.     DWORD       cConnections;           /* number of connections [possible] */
  1477.     DWORD       cControls;              /* number of controls at this line */
  1478.     char        szShortName[MIXER_SHORT_NAME_CHARS];
  1479.     char        szName[MIXER_LONG_NAME_CHARS];
  1480.     struct {
  1481.         DWORD   dwType;                 /* MIXERLINE_TARGETTYPE_xxxx */
  1482.         DWORD   dwDeviceID;             /* target device ID of device type */
  1483.         WORD    wMid;                   /* of target device */
  1484.         WORD    wPid;                   /*      " */
  1485.         VERSION vDriverVersion;         /*      " */
  1486.         char    szPname[MAXPNAMELEN];   /*      " */
  1487.     } Target;
  1488. } MIXERLINE, *PMIXERLINE, FAR *LPMIXERLINE;
  1489. #endif
  1490. /* */
  1491. /*  MIXERLINE.fdwLine */
  1492. /* */
  1493. /* */
  1494. #define MIXERLINE_LINEF_ACTIVE              0x00000001L
  1495. #define MIXERLINE_LINEF_DISCONNECTED        0x00008000L
  1496. #define MIXERLINE_LINEF_SOURCE              0x80000000L
  1497. /* */
  1498. /*  MIXERLINE.dwComponentType */
  1499. /* */
  1500. /*  component types for destinations and sources */
  1501. /* */
  1502. /* */
  1503. #define MIXERLINE_COMPONENTTYPE_DST_FIRST       0x00000000L
  1504. #define MIXERLINE_COMPONENTTYPE_DST_UNDEFINED   (MIXERLINE_COMPONENTTYPE_DST_FIRST + 0)
  1505. #define MIXERLINE_COMPONENTTYPE_DST_DIGITAL     (MIXERLINE_COMPONENTTYPE_DST_FIRST + 1)
  1506. #define MIXERLINE_COMPONENTTYPE_DST_LINE        (MIXERLINE_COMPONENTTYPE_DST_FIRST + 2)
  1507. #define MIXERLINE_COMPONENTTYPE_DST_MONITOR     (MIXERLINE_COMPONENTTYPE_DST_FIRST + 3)
  1508. #define MIXERLINE_COMPONENTTYPE_DST_SPEAKERS    (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4)
  1509. #define MIXERLINE_COMPONENTTYPE_DST_HEADPHONES  (MIXERLINE_COMPONENTTYPE_DST_FIRST + 5)
  1510. #define MIXERLINE_COMPONENTTYPE_DST_TELEPHONE   (MIXERLINE_COMPONENTTYPE_DST_FIRST + 6)
  1511. #define MIXERLINE_COMPONENTTYPE_DST_WAVEIN      (MIXERLINE_COMPONENTTYPE_DST_FIRST + 7)
  1512. #define MIXERLINE_COMPONENTTYPE_DST_VOICEIN     (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
  1513. #define MIXERLINE_COMPONENTTYPE_DST_LAST        (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
  1514. #define MIXERLINE_COMPONENTTYPE_SRC_FIRST       0x00001000L
  1515. #define MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED   (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0)
  1516. #define MIXERLINE_COMPONENTTYPE_SRC_DIGITAL     (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1)
  1517. #define MIXERLINE_COMPONENTTYPE_SRC_LINE        (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)
  1518. #define MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE  (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3)
  1519. #define MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4)
  1520. #define MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5)
  1521. #define MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE   (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6)
  1522. #define MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER   (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7)
  1523. #define MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT     (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8)
  1524. #define MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY   (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 9)
  1525. #define MIXERLINE_COMPONENTTYPE_SRC_ANALOG      (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
  1526. #define MIXERLINE_COMPONENTTYPE_SRC_LAST        (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
  1527. /* */
  1528. /*  MIXERLINE.Target.dwType */
  1529. /* */
  1530. /* */
  1531. #define MIXERLINE_TARGETTYPE_UNDEFINED      0
  1532. #define MIXERLINE_TARGETTYPE_WAVEOUT        1
  1533. #define MIXERLINE_TARGETTYPE_WAVEIN         2
  1534. #define MIXERLINE_TARGETTYPE_MIDIOUT        3
  1535. #define MIXERLINE_TARGETTYPE_MIDIIN         4
  1536. #define MIXERLINE_TARGETTYPE_AUX            5
  1537. #ifdef _WIN32
  1538. WINMMAPI MMRESULT WINAPI mixerGetLineInfoA( IN HMIXEROBJ hmxobj, OUT LPMIXERLINEA pmxl, IN DWORD fdwInfo);
  1539. WINMMAPI MMRESULT WINAPI mixerGetLineInfoW( IN HMIXEROBJ hmxobj, OUT LPMIXERLINEW pmxl, IN DWORD fdwInfo);
  1540. #ifdef UNICODE
  1541. #define mixerGetLineInfo  mixerGetLineInfoW
  1542. #else
  1543. #define mixerGetLineInfo  mixerGetLineInfoA
  1544. #endif // !UNICODE
  1545. #else
  1546. MMRESULT WINAPI mixerGetLineInfo(HMIXEROBJ hmxobj, LPMIXERLINE pmxl, DWORD fdwInfo);
  1547. #endif
  1548. #define MIXER_GETLINEINFOF_DESTINATION      0x00000000L
  1549. #define MIXER_GETLINEINFOF_SOURCE           0x00000001L
  1550. #define MIXER_GETLINEINFOF_LINEID           0x00000002L
  1551. #define MIXER_GETLINEINFOF_COMPONENTTYPE    0x00000003L
  1552. #define MIXER_GETLINEINFOF_TARGETTYPE       0x00000004L
  1553. #define MIXER_GETLINEINFOF_QUERYMASK        0x0000000FL
  1554. WINMMAPI MMRESULT WINAPI mixerGetID( IN HMIXEROBJ hmxobj, OUT UINT FAR *puMxId, IN DWORD fdwId);
  1555. /* */
  1556. /*  MIXERCONTROL */
  1557. /* */
  1558. /* */
  1559. #ifdef _WIN32
  1560. typedef struct tagMIXERCONTROLA {
  1561.     DWORD           cbStruct;           /* size in bytes of MIXERCONTROL */
  1562.     DWORD           dwControlID;        /* unique control id for mixer device */
  1563.     DWORD           dwControlType;      /* MIXERCONTROL_CONTROLTYPE_xxx */
  1564.     DWORD           fdwControl;         /* MIXERCONTROL_CONTROLF_xxx */
  1565.     DWORD           cMultipleItems;     /* if MIXERCONTROL_CONTROLF_MULTIPLE set */
  1566.     CHAR            szShortName[MIXER_SHORT_NAME_CHARS];
  1567.     CHAR            szName[MIXER_LONG_NAME_CHARS];
  1568.     union {
  1569.         struct {
  1570.             LONG    lMinimum;           /* signed minimum for this control */
  1571.             LONG    lMaximum;           /* signed maximum for this control */
  1572.         };
  1573.         struct {
  1574.             DWORD   dwMinimum;          /* unsigned minimum for this control */
  1575.             DWORD   dwMaximum;          /* unsigned maximum for this control */
  1576.         };
  1577.         DWORD       dwReserved[6];
  1578.     } Bounds;
  1579.     union {
  1580.         DWORD       cSteps;             /* # of steps between min & max */
  1581.         DWORD       cbCustomData;       /* size in bytes of custom data */
  1582.         DWORD       dwReserved[6];      /* !!! needed? we have cbStruct.... */
  1583.     } Metrics;
  1584. } MIXERCONTROLA, *PMIXERCONTROLA, *LPMIXERCONTROLA;
  1585. typedef struct tagMIXERCONTROLW {
  1586.     DWORD           cbStruct;           /* size in bytes of MIXERCONTROL */
  1587.     DWORD           dwControlID;        /* unique control id for mixer device */
  1588.     DWORD           dwControlType;      /* MIXERCONTROL_CONTROLTYPE_xxx */
  1589.     DWORD           fdwControl;         /* MIXERCONTROL_CONTROLF_xxx */
  1590.     DWORD           cMultipleItems;     /* if MIXERCONTROL_CONTROLF_MULTIPLE set */
  1591.     WCHAR           szShortName[MIXER_SHORT_NAME_CHARS];
  1592.     WCHAR           szName[MIXER_LONG_NAME_CHARS];
  1593.     union {
  1594.         struct {
  1595.             LONG    lMinimum;           /* signed minimum for this control */
  1596.             LONG    lMaximum;           /* signed maximum for this control */
  1597.         };
  1598.         struct {
  1599.             DWORD   dwMinimum;          /* unsigned minimum for this control */
  1600.             DWORD   dwMaximum;          /* unsigned maximum for this control */
  1601.         };
  1602.         DWORD       dwReserved[6];
  1603.     } Bounds;
  1604.     union {
  1605.         DWORD       cSteps;             /* # of steps between min & max */
  1606.         DWORD       cbCustomData;       /* size in bytes of custom data */
  1607.         DWORD       dwReserved[6];      /* !!! needed? we have cbStruct.... */
  1608.     } Metrics;
  1609. } MIXERCONTROLW, *PMIXERCONTROLW, *LPMIXERCONTROLW;
  1610. #ifdef UNICODE
  1611. typedef MIXERCONTROLW MIXERCONTROL;
  1612. typedef PMIXERCONTROLW PMIXERCONTROL;
  1613. typedef LPMIXERCONTROLW LPMIXERCONTROL;
  1614. #else
  1615. typedef MIXERCONTROLA MIXERCONTROL;
  1616. typedef PMIXERCONTROLA PMIXERCONTROL;
  1617. typedef LPMIXERCONTROLA LPMIXERCONTROL;
  1618. #endif // UNICODE
  1619. #else
  1620. typedef struct tMIXERCONTROL {
  1621.     DWORD           cbStruct;           /* size in bytes of MIXERCONTROL */
  1622.     DWORD           dwControlID;        /* unique control id for mixer device */
  1623.     DWORD           dwControlType;      /* MIXERCONTROL_CONTROLTYPE_xxx */
  1624.     DWORD           fdwControl;         /* MIXERCONTROL_CONTROLF_xxx */
  1625.     DWORD           cMultipleItems;     /* if MIXERCONTROL_CONTROLF_MULTIPLE set */
  1626.     char            szShortName[MIXER_SHORT_NAME_CHARS];
  1627.     char            szName[MIXER_LONG_NAME_CHARS];
  1628.     union {
  1629.         struct {
  1630.             LONG    lMinimum;           /* signed minimum for this control */
  1631.             LONG    lMaximum;           /* signed maximum for this control */
  1632.         };
  1633.         struct {
  1634.             DWORD   dwMinimum;          /* unsigned minimum for this control */
  1635.             DWORD   dwMaximum;          /* unsigned maximum for this control */
  1636.         };
  1637.         DWORD       dwReserved[6];
  1638.     } Bounds;
  1639.     union {
  1640.         DWORD       cSteps;             /* # of steps between min & max */
  1641.         DWORD       cbCustomData;       /* size in bytes of custom data */
  1642.         DWORD       dwReserved[6];      /* !!! needed? we have cbStruct.... */
  1643.     } Metrics;
  1644. } MIXERCONTROL, *PMIXERCONTROL, FAR *LPMIXERCONTROL;
  1645. #endif
  1646. /* */
  1647. /*  MIXERCONTROL.fdwControl */
  1648. /* */
  1649. /* */
  1650. #define MIXERCONTROL_CONTROLF_UNIFORM   0x00000001L
  1651. #define MIXERCONTROL_CONTROLF_MULTIPLE  0x00000002L
  1652. #define MIXERCONTROL_CONTROLF_DISABLED  0x80000000L
  1653. /* */
  1654. /*  MIXERCONTROL_CONTROLTYPE_xxx building block defines */
  1655. /* */
  1656. /* */
  1657. #define MIXERCONTROL_CT_CLASS_MASK          0xF0000000L
  1658. #define MIXERCONTROL_CT_CLASS_CUSTOM        0x00000000L
  1659. #define MIXERCONTROL_CT_CLASS_METER         0x10000000L
  1660. #define MIXERCONTROL_CT_CLASS_SWITCH        0x20000000L
  1661. #define MIXERCONTROL_CT_CLASS_NUMBER        0x30000000L
  1662. #define MIXERCONTROL_CT_CLASS_SLIDER        0x40000000L
  1663. #define MIXERCONTROL_CT_CLASS_FADER         0x50000000L
  1664. #define MIXERCONTROL_CT_CLASS_TIME          0x60000000L
  1665. #define MIXERCONTROL_CT_CLASS_LIST          0x70000000L
  1666. #define MIXERCONTROL_CT_SUBCLASS_MASK       0x0F000000L
  1667. #define MIXERCONTROL_CT_SC_SWITCH_BOOLEAN   0x00000000L
  1668. #define MIXERCONTROL_CT_SC_SWITCH_BUTTON    0x01000000L
  1669. #define MIXERCONTROL_CT_SC_METER_POLLED     0x00000000L
  1670. #define MIXERCONTROL_CT_SC_TIME_MICROSECS   0x00000000L
  1671. #define MIXERCONTROL_CT_SC_TIME_MILLISECS   0x01000000L
  1672. #define MIXERCONTROL_CT_SC_LIST_SINGLE      0x00000000L
  1673. #define MIXERCONTROL_CT_SC_LIST_MULTIPLE    0x01000000L
  1674. #define MIXERCONTROL_CT_UNITS_MASK          0x00FF0000L
  1675. #define MIXERCONTROL_CT_UNITS_CUSTOM        0x00000000L
  1676. #define MIXERCONTROL_CT_UNITS_BOOLEAN       0x00010000L
  1677. #define MIXERCONTROL_CT_UNITS_SIGNED        0x00020000L
  1678. #define MIXERCONTROL_CT_UNITS_UNSIGNED      0x00030000L
  1679. #define MIXERCONTROL_CT_UNITS_DECIBELS      0x00040000L /* in 10ths */
  1680. #define MIXERCONTROL_CT_UNITS_PERCENT       0x00050000L /* in 10ths */
  1681. /* */
  1682. /*  Commonly used control types for specifying MIXERCONTROL.dwControlType */
  1683. /* */
  1684. #define MIXERCONTROL_CONTROLTYPE_CUSTOM         (MIXERCONTROL_CT_CLASS_CUSTOM | MIXERCONTROL_CT_UNITS_CUSTOM)
  1685. #define MIXERCONTROL_CONTROLTYPE_BOOLEANMETER   (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_BOOLEAN)
  1686. #define MIXERCONTROL_CONTROLTYPE_SIGNEDMETER    (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_SIGNED)
  1687. #define MIXERCONTROL_CONTROLTYPE_PEAKMETER      (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1)
  1688. #define MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER  (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_UNSIGNED)
  1689. #define MIXERCONTROL_CONTROLTYPE_BOOLEAN        (MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BOOLEAN | MIXERCONTROL_CT_UNITS_BOOLEAN)
  1690. #define MIXERCONTROL_CONTROLTYPE_ONOFF          (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 1)
  1691. #define MIXERCONTROL_CONTROLTYPE_MUTE           (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 2)
  1692. #define MIXERCONTROL_CONTROLTYPE_MONO           (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 3)
  1693. #define MIXERCONTROL_CONTROLTYPE_LOUDNESS       (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 4)
  1694. #define MIXERCONTROL_CONTROLTYPE_STEREOENH      (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 5)
  1695. #define MIXERCONTROL_CONTROLTYPE_BASS_BOOST     (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 0x00002277)
  1696. #define MIXERCONTROL_CONTROLTYPE_BUTTON         (MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BUTTON | MIXERCONTROL_CT_UNITS_BOOLEAN)
  1697. #define MIXERCONTROL_CONTROLTYPE_DECIBELS       (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_DECIBELS)
  1698. #define MIXERCONTROL_CONTROLTYPE_SIGNED         (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_SIGNED)
  1699. #define MIXERCONTROL_CONTROLTYPE_UNSIGNED       (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_UNSIGNED)
  1700. #define MIXERCONTROL_CONTROLTYPE_PERCENT        (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_PERCENT)
  1701. #define MIXERCONTROL_CONTROLTYPE_SLIDER         (MIXERCONTROL_CT_CLASS_SLIDER | MIXERCONTROL_CT_UNITS_SIGNED)
  1702. #define MIXERCONTROL_CONTROLTYPE_PAN            (MIXERCONTROL_CONTROLTYPE_SLIDER + 1)
  1703. #define MIXERCONTROL_CONTROLTYPE_QSOUNDPAN      (MIXERCONTROL_CONTROLTYPE_SLIDER + 2)
  1704. #define MIXERCONTROL_CONTROLTYPE_FADER          (MIXERCONTROL_CT_CLASS_FADER | MIXERCONTROL_CT_UNITS_UNSIGNED)
  1705. #define MIXERCONTROL_CONTROLTYPE_VOLUME         (MIXERCONTROL_CONTROLTYPE_FADER + 1)
  1706. #define MIXERCONTROL_CONTROLTYPE_BASS           (MIXERCONTROL_CONTROLTYPE_FADER + 2)
  1707. #define MIXERCONTROL_CONTROLTYPE_TREBLE         (MIXERCONTROL_CONTROLTYPE_FADER + 3)
  1708. #define MIXERCONTROL_CONTROLTYPE_EQUALIZER      (MIXERCONTROL_CONTROLTYPE_FADER + 4)
  1709. #define MIXERCONTROL_CONTROLTYPE_SINGLESELECT   (MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_SINGLE | MIXERCONTROL_CT_UNITS_BOOLEAN)
  1710. #define MIXERCONTROL_CONTROLTYPE_MUX            (MIXERCONTROL_CONTROLTYPE_SINGLESELECT + 1)
  1711. #define MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT (MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_MULTIPLE | MIXERCONTROL_CT_UNITS_BOOLEAN)
  1712. #define MIXERCONTROL_CONTROLTYPE_MIXER          (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT + 1)
  1713. #define MIXERCONTROL_CONTROLTYPE_MICROTIME      (MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MICROSECS | MIXERCONTROL_CT_UNITS_UNSIGNED)
  1714. #define MIXERCONTROL_CONTROLTYPE_MILLITIME      (MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MILLISECS | MIXERCONTROL_CT_UNITS_UNSIGNED)
  1715. /* */
  1716. /*  MIXERLINECONTROLS */
  1717. /* */
  1718. #ifdef _WIN32
  1719. typedef struct tagMIXERLINECONTROLSA {
  1720.     DWORD           cbStruct;       /* size in bytes of MIXERLINECONTROLS */
  1721.     DWORD           dwLineID;       /* line id (from MIXERLINE.dwLineID) */
  1722.     union {
  1723.         DWORD       dwControlID;    /* MIXER_GETLINECONTROLSF_ONEBYID */
  1724.         DWORD       dwControlType;  /* MIXER_GETLINECONTROLSF_ONEBYTYPE */
  1725.     };
  1726.     DWORD           cControls;      /* count of controls pmxctrl points to */
  1727.     DWORD           cbmxctrl;       /* size in bytes of _one_ MIXERCONTROL */
  1728.     LPMIXERCONTROLA pamxctrl;       /* pointer to first MIXERCONTROL array */
  1729. } MIXERLINECONTROLSA, *PMIXERLINECONTROLSA, *LPMIXERLINECONTROLSA;
  1730. typedef struct tagMIXERLINECONTROLSW {
  1731.     DWORD           cbStruct;       /* size in bytes of MIXERLINECONTROLS */
  1732.     DWORD           dwLineID;       /* line id (from MIXERLINE.dwLineID) */
  1733.     union {
  1734.         DWORD       dwControlID;    /* MIXER_GETLINECONTROLSF_ONEBYID */
  1735.         DWORD       dwControlType;  /* MIXER_GETLINECONTROLSF_ONEBYTYPE */
  1736.     };
  1737.     DWORD           cControls;      /* count of controls pmxctrl points to */
  1738.     DWORD           cbmxctrl;       /* size in bytes of _one_ MIXERCONTROL */
  1739.     LPMIXERCONTROLW pamxctrl;       /* pointer to first MIXERCONTROL array */
  1740. } MIXERLINECONTROLSW, *PMIXERLINECONTROLSW, *LPMIXERLINECONTROLSW;
  1741. #ifdef UNICODE
  1742. typedef MIXERLINECONTROLSW MIXERLINECONTROLS;
  1743. typedef PMIXERLINECONTROLSW PMIXERLINECONTROLS;
  1744. typedef LPMIXERLINECONTROLSW LPMIXERLINECONTROLS;
  1745. #else
  1746. typedef MIXERLINECONTROLSA MIXERLINECONTROLS;
  1747. typedef PMIXERLINECONTROLSA PMIXERLINECONTROLS;
  1748. typedef LPMIXERLINECONTROLSA LPMIXERLINECONTROLS;
  1749. #endif // UNICODE
  1750. #else
  1751. typedef struct tMIXERLINECONTROLS {
  1752.     DWORD           cbStruct;       /* size in bytes of MIXERLINECONTROLS */
  1753.     DWORD           dwLineID;       /* line id (from MIXERLINE.dwLineID) */
  1754.     union {
  1755.         DWORD       dwControlID;    /* MIXER_GETLINECONTROLSF_ONEBYID */
  1756.         DWORD       dwControlType;  /* MIXER_GETLINECONTROLSF_ONEBYTYPE */
  1757.     };
  1758.     DWORD           cControls;      /* count of controls pmxctrl points to */
  1759.     DWORD           cbmxctrl;       /* size in bytes of _one_ MIXERCONTROL */
  1760.     LPMIXERCONTROL  pamxctrl;       /* pointer to first MIXERCONTROL array */