1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
7  * Source: $(DRUNTIMESRC core/sys/windows/_mmsystem.d)
8  */
9 /// Automatically imported and edited from the druntime module
10 /// core.sys.windows.mmsystem for the auto-generated win32 package.
11 module win32.mmsystem;
12 //version (Windows):
13 @system:
14 
15 version (ANSI) {} else version = Unicode;
16 version (Win32_UseLib) pragma(lib, "winmm");
17 
18 /*  The #defines MAKEFOURCC, mmioFOURCC, sndAlias are used to define
19  *  compile-time constants, so they are implemented as templates.
20  */
21 
22 import win32.w32api, win32.windef, win32.winver;
23 
24 align(1):
25 
26 enum MAXPNAMELEN = 32;
27 enum MAXERRORLENGTH = 256;
28 enum MAX_JOYSTICKOEMVXDNAME = 260;
29 
30 enum TIME_MS      = 1;
31 enum TIME_SAMPLES = 2;
32 enum TIME_BYTES   = 4;
33 enum TIME_SMPTE   = 8;
34 enum TIME_MIDI    = 16;
35 enum TIME_TICKS   = 32;
36 
37 template MAKEFOURCC(char c0, char c1, char c2, char c3)
38 {
39 enum DWORD MAKEFOURCC = c0 | (c1<<8) | (c2<<16) | (cast(DWORD)c3 <<24);
40 }
41 
42 template mmioFOURCC(char c0, char c1, char c2, char c3)
43 {
44 enum DWORD mmioFOURCC = c0 | (c1<<8) | (c2<<16) | (cast(DWORD)c3 <<24);
45 }
46 
47 enum {
48     MM_JOY1MOVE            = 0x3A0,
49     MM_JOY2MOVE,
50     MM_JOY1ZMOVE,
51     MM_JOY2ZMOVE,       // = 0x3A3
52     MM_JOY1BUTTONDOWN      = 0x3B5,
53     MM_JOY2BUTTONDOWN,
54     MM_JOY1BUTTONUP,
55     MM_JOY2BUTTONUP,
56     MM_MCINOTIFY,       // = 0x3B9
57     MM_WOM_OPEN            = 0x3BB,
58     MM_WOM_CLOSE,
59     MM_WOM_DONE,
60     MM_WIM_OPEN,
61     MM_WIM_CLOSE,
62     MM_WIM_DATA,
63     MM_MIM_OPEN,
64     MM_MIM_CLOSE,
65     MM_MIM_DATA,
66     MM_MIM_LONGDATA,
67     MM_MIM_ERROR,
68     MM_MIM_LONGERROR,
69     MM_MOM_OPEN,
70     MM_MOM_CLOSE,
71     MM_MOM_DONE,        // = 0x3C9
72     MM_DRVM_OPEN           = 0x3D0,
73     MM_DRVM_CLOSE,
74     MM_DRVM_DATA,
75     MM_DRVM_ERROR,
76     MM_STREAM_OPEN,
77     MM_STREAM_CLOSE,
78     MM_STREAM_DONE,
79     MM_STREAM_ERROR,    // = 0x3D7
80     MM_MOM_POSITIONCB      = 0x3CA,
81     MM_MCISIGNAL,
82     MM_MIM_MOREDATA,    // = 0x3CC
83     MM_MIXM_LINE_CHANGE    = 0x3D0,
84     MM_MIXM_CONTROL_CHANGE = 0x3D1
85 }
86 
87 enum MMSYSERR_BASE     =    0;
88 enum WAVERR_BASE       =   32;
89 enum MIDIERR_BASE      =   64;
90 enum TIMERR_BASE       =   96;
91 enum JOYERR_BASE       =  160;
92 enum MCIERR_BASE       =  256;
93 enum MIXERR_BASE       = 1024;
94 enum MCI_STRING_OFFSET =  512;
95 enum MCI_VD_OFFSET     = 1024;
96 enum MCI_CD_OFFSET     = 1088;
97 enum MCI_WAVE_OFFSET   = 1152;
98 enum MCI_SEQ_OFFSET    = 1216;
99 
100 enum {
101     MMSYSERR_NOERROR        = 0,
102     MMSYSERR_ERROR          = MMSYSERR_BASE+1,
103     MMSYSERR_BADDEVICEID,
104     MMSYSERR_NOTENABLED,
105     MMSYSERR_ALLOCATED,
106     MMSYSERR_INVALHANDLE,
107     MMSYSERR_NODRIVER,
108     MMSYSERR_NOMEM,
109     MMSYSERR_NOTSUPPORTED,
110     MMSYSERR_BADERRNUM,
111     MMSYSERR_INVALFLAG,
112     MMSYSERR_INVALPARAM,
113     MMSYSERR_HANDLEBUSY,
114     MMSYSERR_INVALIDALIAS,
115     MMSYSERR_BADDB,
116     MMSYSERR_KEYNOTFOUND,
117     MMSYSERR_READERROR,
118     MMSYSERR_WRITEERROR,
119     MMSYSERR_DELETEERROR,
120     MMSYSERR_VALNOTFOUND,
121     MMSYSERR_NODRIVERCB, // = MMSYSERR_BASE+20
122     MMSYSERR_LASTERROR      = MMSYSERR_NODRIVERCB
123 }
124 
125 enum {
126     DRV_LOAD = 1,
127     DRV_ENABLE,
128     DRV_OPEN,
129     DRV_CLOSE,
130     DRV_DISABLE,
131     DRV_FREE,
132     DRV_CONFIGURE,
133     DRV_QUERYCONFIGURE,
134     DRV_INSTALL,
135     DRV_REMOVE,
136     DRV_EXITSESSION,
137     DRV_POWER
138 }
139 
140 enum DRV_RESERVED = 0x800;
141 enum DRV_USER = 0x4000;
142 
143 enum DRVCNF_CANCEL = 0;
144 enum DRVCNF_OK = 1;
145 enum DRVCNF_RESTART = 2;
146 enum DRV_CANCEL = DRVCNF_CANCEL;
147 enum DRV_OK = DRVCNF_OK;
148 enum DRV_RESTART = DRVCNF_RESTART;
149 enum DRV_MCI_FIRST = DRV_RESERVED;
150 enum DRV_MCI_LAST  = DRV_RESERVED + 0xFFF;
151 
152 enum CALLBACK_TYPEMASK = 0x70000;
153 enum CALLBACK_NULL     = 0;
154 enum CALLBACK_WINDOW   = 0x10000;
155 enum CALLBACK_TASK     = 0x20000;
156 enum CALLBACK_FUNCTION = 0x30000;
157 enum CALLBACK_THREAD   = CALLBACK_TASK;
158 enum CALLBACK_EVENT    = 0x50000;
159 
160 enum SND_SYNC=0;
161 enum SND_ASYNC=1;
162 enum SND_NODEFAULT=2;
163 enum SND_MEMORY=4;
164 enum SND_LOOP=8;
165 enum SND_NOSTOP=16;
166 enum SND_NOWAIT=0x2000;
167 enum SND_ALIAS=0x10000;
168 enum SND_ALIAS_ID=0x110000;
169 enum SND_FILENAME=0x20000;
170 enum SND_RESOURCE=0x40004;
171 enum SND_PURGE=0x40;
172 enum SND_APPLICATION=0x80;
173 enum SND_ALIAS_START=0;
174 
175 template sndAlias(char c0, char c1)
176 {
177 enum DWORD sndAlias = SND_ALIAS_START + c0 | (c1<<8);
178 }
179 
180 enum SND_ALIAS_SYSTEMASTERISK    = sndAlias!('S', '*');
181 enum SND_ALIAS_SYSTEMQUESTION    = sndAlias!('S', '?');
182 enum SND_ALIAS_SYSTEMHAND        = sndAlias!('S', 'H');
183 enum SND_ALIAS_SYSTEMEXIT        = sndAlias!('S', 'E');
184 enum SND_ALIAS_SYSTEMSTART       = sndAlias!('S', 'S');
185 enum SND_ALIAS_SYSTEMWELCOME     = sndAlias!('S', 'W');
186 enum SND_ALIAS_SYSTEMEXCLAMATION = sndAlias!('S', '!');
187 enum SND_ALIAS_SYSTEMDEFAULT     = sndAlias!('S', 'D');
188 
189 enum {
190     WAVERR_BADFORMAT  = (WAVERR_BASE + 0),
191     WAVERR_STILLPLAYING,
192     WAVERR_UNPREPARED,
193     WAVERR_SYNC,  // = WAVERR_BASE + 3;
194     WAVERR_LASTERROR = WAVERR_SYNC
195 }
196 
197 enum WOM_OPEN  = MM_WOM_OPEN;
198 enum WOM_CLOSE = MM_WOM_CLOSE;
199 enum WOM_DONE  = MM_WOM_DONE;
200 enum WIM_OPEN  = MM_WIM_OPEN;
201 enum WIM_CLOSE = MM_WIM_CLOSE;
202 enum WIM_DATA  = MM_WIM_DATA;
203 
204 enum UINT WAVE_MAPPER= -1;  // FIXME: This doesn't make sense!
205 enum WAVE_FORMAT_QUERY=1;
206 enum WAVE_ALLOWSYNC=2;
207 enum WAVE_MAPPED=4;
208 enum WAVE_FORMAT_DIRECT=8;
209 enum WAVE_FORMAT_DIRECT_QUERY=(WAVE_FORMAT_QUERY|WAVE_FORMAT_DIRECT);
210 enum WHDR_DONE=1;
211 enum WHDR_PREPARED=2;
212 enum WHDR_BEGINLOOP=4;
213 enum WHDR_ENDLOOP=8;
214 enum WHDR_INQUEUE=16;
215 
216 enum WAVECAPS_PITCH=1;
217 enum WAVECAPS_PLAYBACKRATE=2;
218 enum WAVECAPS_VOLUME=4;
219 enum WAVECAPS_LRVOLUME=8;
220 enum WAVECAPS_SYNC=16;
221 enum WAVECAPS_SAMPLEACCURATE=32;
222 enum WAVECAPS_DIRECTSOUND=64;
223 
224 enum WAVE_INVALIDFORMAT=0;
225 enum WAVE_FORMAT_1M08=1;
226 enum WAVE_FORMAT_1S08=2;
227 enum WAVE_FORMAT_1M16=4;
228 enum WAVE_FORMAT_1S16=8;
229 enum WAVE_FORMAT_2M08=16;
230 enum WAVE_FORMAT_2S08=32;
231 enum WAVE_FORMAT_2M16=64;
232 enum WAVE_FORMAT_2S16=128;
233 enum WAVE_FORMAT_4M08=256;
234 enum WAVE_FORMAT_4S08=512;
235 enum WAVE_FORMAT_4M16=1024;
236 enum WAVE_FORMAT_4S16=2048;
237 enum WAVE_FORMAT_PCM=1;
238 
239 enum {
240     MIDIERR_UNPREPARED = MIDIERR_BASE,
241     MIDIERR_STILLPLAYING,
242     MIDIERR_NOMAP,
243     MIDIERR_NOTREADY,
244     MIDIERR_NODEVICE,
245     MIDIERR_INVALIDSETUP,
246     MIDIERR_BADOPENMODE,
247     MIDIERR_DONT_CONTINUE, // = MIDIERR_BASE+7
248     MIDIERR_LASTERROR = MIDIERR_DONT_CONTINUE
249 }
250 
251 enum MIDIPATCHSIZE=128;
252 
253 enum MIM_OPEN=MM_MIM_OPEN;
254 enum MIM_CLOSE=MM_MIM_CLOSE;
255 enum MIM_DATA=MM_MIM_DATA;
256 enum MIM_LONGDATA=MM_MIM_LONGDATA;
257 enum MIM_ERROR=MM_MIM_ERROR;
258 enum MIM_LONGERROR=MM_MIM_LONGERROR;
259 enum MOM_OPEN=MM_MOM_OPEN;
260 enum MOM_CLOSE=MM_MOM_CLOSE;
261 enum MOM_DONE=MM_MOM_DONE;
262 enum MIM_MOREDATA=MM_MIM_MOREDATA;
263 enum MOM_POSITIONCB=MM_MOM_POSITIONCB;
264 
265 enum UINT MIDIMAPPER= -1; // FIXME: uint is nonsense for this!
266 enum UINT MIDI_MAPPER= -1; // FIXME: uint is nonsense for this!
267 enum MIDI_IO_STATUS=32;
268 enum MIDI_CACHE_ALL=1;
269 enum MIDI_CACHE_BESTFIT=2;
270 enum MIDI_CACHE_QUERY=3;
271 enum MIDI_UNCACHE=4;
272 enum MOD_MIDIPORT=1;
273 enum MOD_SYNTH=2;
274 enum MOD_SQSYNTH=3;
275 enum MOD_FMSYNTH=4;
276 enum MOD_MAPPER=5;
277 enum MIDICAPS_VOLUME=1;
278 enum MIDICAPS_LRVOLUME=2;
279 enum MIDICAPS_CACHE=4;
280 enum MIDICAPS_STREAM=8;
281 enum MHDR_DONE=1;
282 enum MHDR_PREPARED=2;
283 enum MHDR_INQUEUE=4;
284 enum MHDR_ISSTRM=8;
285 enum MEVT_F_SHORT=0;
286 enum MEVT_F_LONG=0x80000000;
287 enum MEVT_F_CALLBACK=0x40000000;
288 
289 BYTE MEVT_EVENTTYPE()(DWORD x) { return cast(BYTE)((x>>24) &0xFF); }
290 DWORD MEVT_EVENTPARM()(DWORD x) { return x & 0xFFFFFF; }
291 
292 enum MEVT_SHORTMSG=0;
293 enum MEVT_TEMPO=1;
294 enum MEVT_NOP=2;
295 
296 enum BYTE MEVT_LONGMSG = 0x80;
297 enum BYTE MEVT_COMMENT = 0x82;
298 enum BYTE MEVT_VERSION = 0x84;
299 
300 enum MIDISTRM_ERROR = -2;
301 
302 enum MIDIPROP_SET = 0x80000000;
303 enum MIDIPROP_GET = 0x40000000;
304 enum MIDIPROP_TIMEDIV = 1;
305 enum MIDIPROP_TEMPO = 2;
306 
307 enum UINT AUX_MAPPER = -1;
308 
309 enum AUXCAPS_CDAUDIO=1;
310 enum AUXCAPS_AUXIN=2;
311 enum AUXCAPS_VOLUME=1;
312 enum AUXCAPS_LRVOLUME=2;
313 enum MIXER_SHORT_NAME_CHARS=16;
314 enum MIXER_LONG_NAME_CHARS=64;
315 enum MIXERR_INVALLINE=MIXERR_BASE;
316 enum MIXERR_INVALCONTROL=(MIXERR_BASE+1);
317 enum MIXERR_INVALVALUE=(MIXERR_BASE+2);
318 enum MIXERR_LASTERROR=(MIXERR_BASE+2);
319 
320 enum MIXER_OBJECTF_HANDLE=0x80000000;
321 enum MIXER_OBJECTF_MIXER=0;
322 enum MIXER_OBJECTF_HMIXER=(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIXER);
323 enum MIXER_OBJECTF_WAVEOUT=0x10000000;
324 enum MIXER_OBJECTF_HWAVEOUT=(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEOUT);
325 enum MIXER_OBJECTF_WAVEIN=0x20000000;
326 enum MIXER_OBJECTF_HWAVEIN=(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEIN);
327 enum MIXER_OBJECTF_MIDIOUT=0x30000000;
328 enum MIXER_OBJECTF_HMIDIOUT=(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIOUT);
329 enum MIXER_OBJECTF_MIDIIN=0x40000000;
330 enum MIXER_OBJECTF_HMIDIIN=(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIIN);
331 enum MIXER_OBJECTF_AUX=0x50000000;
332 
333 enum MIXERLINE_LINEF_ACTIVE=1;
334 enum MIXERLINE_LINEF_DISCONNECTED=0x8000;
335 enum MIXERLINE_LINEF_SOURCE=0x80000000;
336 
337 enum MIXERLINE_COMPONENTTYPE_DST_FIRST=0;
338 enum MIXERLINE_COMPONENTTYPE_DST_UNDEFINED=MIXERLINE_COMPONENTTYPE_DST_FIRST;
339 enum MIXERLINE_COMPONENTTYPE_DST_DIGITAL=(MIXERLINE_COMPONENTTYPE_DST_FIRST+1);
340 enum MIXERLINE_COMPONENTTYPE_DST_LINE=(MIXERLINE_COMPONENTTYPE_DST_FIRST+2);
341 enum MIXERLINE_COMPONENTTYPE_DST_MONITOR=(MIXERLINE_COMPONENTTYPE_DST_FIRST+3);
342 enum MIXERLINE_COMPONENTTYPE_DST_SPEAKERS=(MIXERLINE_COMPONENTTYPE_DST_FIRST+4);
343 enum MIXERLINE_COMPONENTTYPE_DST_HEADPHONES=(MIXERLINE_COMPONENTTYPE_DST_FIRST+5);
344 enum MIXERLINE_COMPONENTTYPE_DST_TELEPHONE=(MIXERLINE_COMPONENTTYPE_DST_FIRST+6);
345 enum MIXERLINE_COMPONENTTYPE_DST_WAVEIN=(MIXERLINE_COMPONENTTYPE_DST_FIRST+7);
346 enum MIXERLINE_COMPONENTTYPE_DST_VOICEIN=(MIXERLINE_COMPONENTTYPE_DST_FIRST+8);
347 enum MIXERLINE_COMPONENTTYPE_DST_LAST=(MIXERLINE_COMPONENTTYPE_DST_FIRST+8);
348 enum MIXERLINE_COMPONENTTYPE_SRC_FIRST=0x1000;
349 enum MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED=MIXERLINE_COMPONENTTYPE_SRC_FIRST;
350 enum MIXERLINE_COMPONENTTYPE_SRC_DIGITAL=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+1);
351 enum MIXERLINE_COMPONENTTYPE_SRC_LINE=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+2);
352 enum MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+3);
353 enum MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+4);
354 enum MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+5);
355 enum MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+6);
356 enum MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+7);
357 enum MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+8);
358 enum MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+9);
359 enum MIXERLINE_COMPONENTTYPE_SRC_ANALOG=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+10);
360 enum MIXERLINE_COMPONENTTYPE_SRC_LAST=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+10);
361 
362 enum {
363     MIXERLINE_TARGETTYPE_UNDEFINED = 0,
364     MIXERLINE_TARGETTYPE_WAVEOUT,
365     MIXERLINE_TARGETTYPE_WAVEIN,
366     MIXERLINE_TARGETTYPE_MIDIOUT,
367     MIXERLINE_TARGETTYPE_MIDIIN,
368     MIXERLINE_TARGETTYPE_AUX // =5
369 }
370 
371 enum MIXER_GETLINEINFOF_DESTINATION=0;
372 enum MIXER_GETLINEINFOF_SOURCE=1;
373 enum MIXER_GETLINEINFOF_LINEID=2;
374 enum MIXER_GETLINEINFOF_COMPONENTTYPE=3;
375 enum MIXER_GETLINEINFOF_TARGETTYPE=4;
376 enum MIXER_GETLINEINFOF_QUERYMASK=15;
377 
378 enum MIXERCONTROL_CONTROLF_UNIFORM=1;
379 enum MIXERCONTROL_CONTROLF_MULTIPLE=2;
380 enum MIXERCONTROL_CONTROLF_DISABLED=0x80000000;
381 enum MIXERCONTROL_CT_CLASS_MASK=0xF0000000;
382 enum MIXERCONTROL_CT_CLASS_CUSTOM=0;
383 enum MIXERCONTROL_CT_CLASS_METER=0x10000000;
384 enum MIXERCONTROL_CT_CLASS_SWITCH=0x20000000;
385 enum MIXERCONTROL_CT_CLASS_NUMBER=0x30000000;
386 enum MIXERCONTROL_CT_CLASS_SLIDER=0x40000000;
387 enum MIXERCONTROL_CT_CLASS_FADER=0x50000000;
388 enum MIXERCONTROL_CT_CLASS_TIME=0x60000000;
389 enum MIXERCONTROL_CT_CLASS_LIST=0x70000000;
390 enum MIXERCONTROL_CT_SUBCLASS_MASK=0xF000000;
391 enum MIXERCONTROL_CT_SC_SWITCH_BOOLEAN=0;
392 enum MIXERCONTROL_CT_SC_SWITCH_BUTTON=0x1000000;
393 enum MIXERCONTROL_CT_SC_METER_POLLED=0;
394 enum MIXERCONTROL_CT_SC_TIME_MICROSECS=0;
395 enum MIXERCONTROL_CT_SC_TIME_MILLISECS=0x1000000;
396 enum MIXERCONTROL_CT_SC_LIST_SINGLE=0;
397 enum MIXERCONTROL_CT_SC_LIST_MULTIPLE=0x1000000;
398 enum MIXERCONTROL_CT_UNITS_MASK=0xFF0000;
399 enum MIXERCONTROL_CT_UNITS_CUSTOM=0;
400 enum MIXERCONTROL_CT_UNITS_BOOLEAN=0x10000;
401 enum MIXERCONTROL_CT_UNITS_SIGNED=0x20000;
402 enum MIXERCONTROL_CT_UNITS_UNSIGNED=0x30000;
403 enum MIXERCONTROL_CT_UNITS_DECIBELS=0x40000;
404 enum MIXERCONTROL_CT_UNITS_PERCENT=0x50000;
405 
406 enum MIXERCONTROL_CONTROLTYPE_CUSTOM=(MIXERCONTROL_CT_CLASS_CUSTOM|MIXERCONTROL_CT_UNITS_CUSTOM);
407 enum MIXERCONTROL_CONTROLTYPE_BOOLEANMETER=(MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_BOOLEAN);
408 enum MIXERCONTROL_CONTROLTYPE_SIGNEDMETER=(MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_SIGNED);
409 enum MIXERCONTROL_CONTROLTYPE_PEAKMETER=(MIXERCONTROL_CONTROLTYPE_SIGNEDMETER+1);
410 enum MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER=(MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_UNSIGNED);
411 enum MIXERCONTROL_CONTROLTYPE_BOOLEAN=(MIXERCONTROL_CT_CLASS_SWITCH|MIXERCONTROL_CT_SC_SWITCH_BOOLEAN|MIXERCONTROL_CT_UNITS_BOOLEAN);
412 enum MIXERCONTROL_CONTROLTYPE_ONOFF=(MIXERCONTROL_CONTROLTYPE_BOOLEAN+1);
413 enum MIXERCONTROL_CONTROLTYPE_MUTE=(MIXERCONTROL_CONTROLTYPE_BOOLEAN+2);
414 enum MIXERCONTROL_CONTROLTYPE_MONO=(MIXERCONTROL_CONTROLTYPE_BOOLEAN+3);
415 enum MIXERCONTROL_CONTROLTYPE_LOUDNESS=(MIXERCONTROL_CONTROLTYPE_BOOLEAN+4);
416 enum MIXERCONTROL_CONTROLTYPE_STEREOENH=(MIXERCONTROL_CONTROLTYPE_BOOLEAN+5);
417 enum MIXERCONTROL_CONTROLTYPE_BUTTON=(MIXERCONTROL_CT_CLASS_SWITCH|MIXERCONTROL_CT_SC_SWITCH_BUTTON|MIXERCONTROL_CT_UNITS_BOOLEAN);
418 enum MIXERCONTROL_CONTROLTYPE_DECIBELS=(MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_DECIBELS);
419 enum MIXERCONTROL_CONTROLTYPE_SIGNED=(MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_SIGNED);
420 enum MIXERCONTROL_CONTROLTYPE_UNSIGNED=(MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_UNSIGNED);
421 enum MIXERCONTROL_CONTROLTYPE_PERCENT=(MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_PERCENT);
422 enum MIXERCONTROL_CONTROLTYPE_SLIDER=(MIXERCONTROL_CT_CLASS_SLIDER|MIXERCONTROL_CT_UNITS_SIGNED);
423 enum MIXERCONTROL_CONTROLTYPE_PAN=(MIXERCONTROL_CONTROLTYPE_SLIDER+1);
424 enum MIXERCONTROL_CONTROLTYPE_QSOUNDPAN=(MIXERCONTROL_CONTROLTYPE_SLIDER+2);
425 enum MIXERCONTROL_CONTROLTYPE_FADER=(MIXERCONTROL_CT_CLASS_FADER|MIXERCONTROL_CT_UNITS_UNSIGNED);
426 enum MIXERCONTROL_CONTROLTYPE_VOLUME=(MIXERCONTROL_CONTROLTYPE_FADER+1);
427 enum MIXERCONTROL_CONTROLTYPE_BASS=(MIXERCONTROL_CONTROLTYPE_FADER+2);
428 enum MIXERCONTROL_CONTROLTYPE_TREBLE=(MIXERCONTROL_CONTROLTYPE_FADER+3);
429 enum MIXERCONTROL_CONTROLTYPE_EQUALIZER=(MIXERCONTROL_CONTROLTYPE_FADER+4);
430 enum MIXERCONTROL_CONTROLTYPE_SINGLESELECT=(MIXERCONTROL_CT_CLASS_LIST|MIXERCONTROL_CT_SC_LIST_SINGLE|MIXERCONTROL_CT_UNITS_BOOLEAN);
431 enum MIXERCONTROL_CONTROLTYPE_MUX=(MIXERCONTROL_CONTROLTYPE_SINGLESELECT+1);
432 enum MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT=(MIXERCONTROL_CT_CLASS_LIST|MIXERCONTROL_CT_SC_LIST_MULTIPLE|MIXERCONTROL_CT_UNITS_BOOLEAN);
433 enum MIXERCONTROL_CONTROLTYPE_MIXER=(MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT+1);
434 enum MIXERCONTROL_CONTROLTYPE_MICROTIME=(MIXERCONTROL_CT_CLASS_TIME|MIXERCONTROL_CT_SC_TIME_MICROSECS|MIXERCONTROL_CT_UNITS_UNSIGNED);
435 enum MIXERCONTROL_CONTROLTYPE_MILLITIME=(MIXERCONTROL_CT_CLASS_TIME|MIXERCONTROL_CT_SC_TIME_MILLISECS|MIXERCONTROL_CT_UNITS_UNSIGNED);
436 
437 enum MIXER_GETLINECONTROLSF_ALL=0;
438 enum MIXER_GETLINECONTROLSF_ONEBYID=1;
439 enum MIXER_GETLINECONTROLSF_ONEBYTYPE=2;
440 enum MIXER_GETLINECONTROLSF_QUERYMASK=15;
441 enum MIXER_GETCONTROLDETAILSF_VALUE=0;
442 enum MIXER_GETCONTROLDETAILSF_LISTTEXT=1;
443 enum MIXER_GETCONTROLDETAILSF_QUERYMASK=15;
444 enum MIXER_SETCONTROLDETAILSF_VALUE=0;
445 enum MIXER_SETCONTROLDETAILSF_CUSTOM=1;
446 enum MIXER_SETCONTROLDETAILSF_QUERYMASK=15;
447 
448 enum TIMERR_NOERROR=0;
449 enum TIMERR_NOCANDO=(TIMERR_BASE+1);
450 enum TIMERR_STRUCT=(TIMERR_BASE+33);
451 enum TIME_ONESHOT=0;
452 enum TIME_PERIODIC=1;
453 enum TIME_CALLBACK_FUNCTION=0;
454 enum TIME_CALLBACK_EVENT_SET=16;
455 enum TIME_CALLBACK_EVENT_PULSE=32;
456 
457 static if (_WIN32_WINNT >= 0x501) {
458 
459 enum TIME_KILL_SYNCHRONOUS=0x0100;
460 
461 }
462 
463 enum JOYERR_NOERROR = 0;
464 enum JOYERR_PARMS=(JOYERR_BASE+5);
465 enum JOYERR_NOCANDO=(JOYERR_BASE+6);
466 enum JOYERR_UNPLUGGED=(JOYERR_BASE+7);
467 
468 enum JOY_BUTTON1=1;
469 enum JOY_BUTTON2=2;
470 enum JOY_BUTTON3=4;
471 enum JOY_BUTTON4=8;
472 enum JOY_BUTTON1CHG=256;
473 enum JOY_BUTTON2CHG=512;
474 enum JOY_BUTTON3CHG=1024;
475 enum JOY_BUTTON4CHG=2048;
476 enum JOY_BUTTON5=257;
477 enum JOY_BUTTON6=513;
478 enum JOY_BUTTON7=1025;
479 enum JOY_BUTTON8=2049;
480 enum JOY_BUTTON9=256;
481 enum JOY_BUTTON10=512;
482 enum JOY_BUTTON11=1024;
483 enum JOY_BUTTON12=2048;
484 enum JOY_BUTTON13=4096;
485 enum JOY_BUTTON14=8192;
486 enum JOY_BUTTON15=16384;
487 enum JOY_BUTTON16=32768;
488 enum JOY_BUTTON17=65536;
489 enum JOY_BUTTON18=0x20000;
490 enum JOY_BUTTON19=0x40000;
491 enum JOY_BUTTON20=0x80000;
492 enum JOY_BUTTON21=0x100000;
493 enum JOY_BUTTON22=0x200000;
494 enum JOY_BUTTON23=0x400000;
495 enum JOY_BUTTON24=0x800000;
496 enum JOY_BUTTON25=0x1000000;
497 enum JOY_BUTTON26=0x2000000;
498 enum JOY_BUTTON27=0x4000000;
499 enum JOY_BUTTON28=0x8000000;
500 enum JOY_BUTTON29=0x10000000;
501 enum JOY_BUTTON30=0x20000000;
502 enum JOY_BUTTON31=0x40000000;
503 enum JOY_BUTTON32=0x80000000;
504 
505 enum  : DWORD {
506     JOY_POVCENTERED = -1,
507     JOY_POVFORWARD  = 0,
508     JOY_POVBACKWARD = 18000,
509     JOY_POVLEFT     = 27000,
510     JOY_POVRIGHT    = 9000
511 }
512 
513 enum DWORD
514     JOY_RETURNX        = 0x00000001,
515     JOY_RETURNY        = 0x00000002,
516     JOY_RETURNZ        = 0x00000004,
517     JOY_RETURNR        = 0x00000008,
518     JOY_RETURNU        = 0x00000010,
519     JOY_RETURNV        = 0x00000020,
520     JOY_RETURNPOV      = 0x00000040,
521     JOY_RETURNBUTTONS  = 0x00000080,
522     JOY_RETURNRAWDATA  = 0x00000100,
523     JOY_RETURNPOVCTS   = 0x00000200,
524     JOY_RETURNCENTERED = 0x00000400,
525     JOY_USEDEADZONE    = 0x00000800,
526     JOY_RETURNALL      = JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | JOY_RETURNR
527                          | JOY_RETURNU | JOY_RETURNV | JOY_RETURNPOV
528                          | JOY_RETURNBUTTONS,
529     JOY_CAL_READALWAYS = 0x00010000,
530     JOY_CAL_READXYONLY = 0x00020000,
531     JOY_CAL_READ3      = 0x00040000,
532     JOY_CAL_READ4      = 0x00080000,
533     JOY_CAL_READXONLY  = 0x00100000,
534     JOY_CAL_READYONLY  = 0x00200000,
535     JOY_CAL_READ5      = 0x00400000,
536     JOY_CAL_READ6      = 0x00800000,
537     JOY_CAL_READZONLY  = 0x01000000,
538     JOY_CAL_READRONLY  = 0x02000000,
539     JOY_CAL_READUONLY  = 0x04000000,
540     JOY_CAL_READVONLY  = 0x08000000;
541 
542 enum JOYSTICKID1=0;
543 enum JOYSTICKID2=1;
544 
545 enum JOYCAPS_HASZ=1;
546 enum JOYCAPS_HASR=2;
547 enum JOYCAPS_HASU=4;
548 enum JOYCAPS_HASV=8;
549 enum JOYCAPS_HASPOV=16;
550 enum JOYCAPS_POV4DIR=32;
551 enum JOYCAPS_POVCTS=64;
552 
553 enum MMIOERR_BASE=256;
554 enum MMIOERR_FILENOTFOUND=(MMIOERR_BASE+1);
555 enum MMIOERR_OUTOFMEMORY=(MMIOERR_BASE+2);
556 enum MMIOERR_CANNOTOPEN=(MMIOERR_BASE+3);
557 enum MMIOERR_CANNOTCLOSE=(MMIOERR_BASE+4);
558 enum MMIOERR_CANNOTREAD=(MMIOERR_BASE+5);
559 enum MMIOERR_CANNOTWRITE=(MMIOERR_BASE+6);
560 enum MMIOERR_CANNOTSEEK=(MMIOERR_BASE+7);
561 enum MMIOERR_CANNOTEXPAND=(MMIOERR_BASE+8);
562 enum MMIOERR_CHUNKNOTFOUND=(MMIOERR_BASE+9);
563 enum MMIOERR_UNBUFFERED=(MMIOERR_BASE+10);
564 enum MMIOERR_PATHNOTFOUND=(MMIOERR_BASE+11);
565 enum MMIOERR_ACCESSDENIED=(MMIOERR_BASE+12);
566 enum MMIOERR_SHARINGVIOLATION=(MMIOERR_BASE+13);
567 enum MMIOERR_NETWORKERROR=(MMIOERR_BASE+14);
568 enum MMIOERR_TOOMANYOPENFILES=(MMIOERR_BASE+15);
569 enum MMIOERR_INVALIDFILE=(MMIOERR_BASE+16);
570 
571 enum CFSEPCHAR='+';
572 
573 enum MMIO_RWMODE=3;
574 enum MMIO_SHAREMODE=0x70;
575 enum MMIO_CREATE=0x1000;
576 enum MMIO_PARSE=256;
577 enum MMIO_DELETE=512;
578 enum MMIO_EXIST=0x4000;
579 enum MMIO_ALLOCBUF=0x10000;
580 enum MMIO_GETTEMP=0x20000;
581 enum MMIO_DIRTY=0x10000000;
582 enum MMIO_READ=0;
583 enum MMIO_WRITE=1;
584 enum MMIO_READWRITE=2;
585 enum MMIO_COMPAT=0;
586 enum MMIO_EXCLUSIVE=16;
587 enum MMIO_DENYWRITE=32;
588 enum MMIO_DENYREAD=0x30;
589 enum MMIO_DENYNONE=64;
590 enum MMIO_FHOPEN=16;
591 enum MMIO_EMPTYBUF=16;
592 enum MMIO_TOUPPER=16;
593 enum MMIO_INSTALLPROC=0x10000;
594 enum MMIO_GLOBALPROC=0x10000000;
595 enum MMIO_REMOVEPROC=0x20000;
596 enum MMIO_UNICODEPROC=0x1000000;
597 enum MMIO_FINDPROC=0x40000;
598 enum MMIO_FINDCHUNK=16;
599 enum MMIO_FINDRIFF=32;
600 enum MMIO_FINDLIST=64;
601 enum MMIO_CREATERIFF=32;
602 enum MMIO_CREATELIST=64;
603 enum MMIOM_READ=MMIO_READ;
604 enum MMIOM_WRITE=MMIO_WRITE;
605 enum MMIOM_SEEK=2;
606 enum MMIOM_OPEN=3;
607 enum MMIOM_CLOSE=4;
608 enum MMIOM_WRITEFLUSH=5;
609 enum MMIOM_RENAME=6;
610 enum MMIOM_USER=0x8000;
611 
612 enum FOURCC_RIFF = mmioFOURCC!('R', 'I', 'F', 'F');
613 enum FOURCC_LIST = mmioFOURCC!('L', 'I', 'S', 'T');
614 enum FOURCC_DOS  = mmioFOURCC!('D', 'O', 'S', ' ');
615 enum FOURCC_MEM  = mmioFOURCC!('M', 'E', 'M', ' ');
616 
617 enum MMIO_DEFAULTBUFFER=8192;
618 
619 enum {
620     MCIERR_INVALID_DEVICE_ID = MCIERR_BASE + 1,
621     MCIERR_UNRECOGNIZED_KEYWORD = MCIERR_BASE + 3,
622     MCIERR_UNRECOGNIZED_COMMAND = MCIERR_BASE + 5,
623     MCIERR_HARDWARE,
624     MCIERR_INVALID_DEVICE_NAME,
625     MCIERR_OUT_OF_MEMORY,
626     MCIERR_DEVICE_OPEN,
627     MCIERR_CANNOT_LOAD_DRIVER,
628     MCIERR_MISSING_COMMAND_STRING,
629     MCIERR_PARAM_OVERFLOW,
630     MCIERR_MISSING_STRING_ARGUMENT,
631     MCIERR_BAD_INTEGER,
632     MCIERR_PARSER_INTERNAL,
633     MCIERR_DRIVER_INTERNAL,
634     MCIERR_MISSING_PARAMETER,
635     MCIERR_UNSUPPORTED_FUNCTION,
636     MCIERR_FILE_NOT_FOUND,
637     MCIERR_DEVICE_NOT_READY,
638     MCIERR_INTERNAL,
639     MCIERR_DRIVER,
640     MCIERR_CANNOT_USE_ALL,
641     MCIERR_MULTIPLE,
642     MCIERR_EXTENSION_NOT_FOUND,
643     MCIERR_OUTOFRANGE, // = MCIERR_BASE+26
644     MCIERR_FLAGS_NOT_COMPATIBLE = MCIERR_BASE + 28,
645     MCIERR_FILE_NOT_SAVED = MCIERR_BASE + 30,
646     MCIERR_DEVICE_TYPE_REQUIRED,
647     MCIERR_DEVICE_LOCKED,
648     MCIERR_DUPLICATE_ALIAS,
649     MCIERR_BAD_CONSTANT,
650     MCIERR_MUST_USE_SHAREABLE,
651     MCIERR_MISSING_DEVICE_NAME,
652     MCIERR_BAD_TIME_FORMAT,
653     MCIERR_NO_CLOSING_QUOTE,
654     MCIERR_DUPLICATE_FLAGS,
655     MCIERR_INVALID_FILE,
656     MCIERR_NULL_PARAMETER_BLOCK,
657     MCIERR_UNNAMED_RESOURCE,
658     MCIERR_NEW_REQUIRES_ALIAS,
659     MCIERR_NOTIFY_ON_AUTO_OPEN,
660     MCIERR_NO_ELEMENT_ALLOWED,
661     MCIERR_NONAPPLICABLE_FUNCTION,
662     MCIERR_ILLEGAL_FOR_AUTO_OPEN,
663     MCIERR_FILENAME_REQUIRED,
664     MCIERR_EXTRA_CHARACTERS,
665     MCIERR_DEVICE_NOT_INSTALLED,
666     MCIERR_GET_CD,
667     MCIERR_SET_CD,
668     MCIERR_SET_DRIVE,
669     MCIERR_DEVICE_LENGTH,
670     MCIERR_DEVICE_ORD_LENGTH,
671     MCIERR_NO_INTEGER, // = MCIERR_BASE + 56
672     MCIERR_WAVE_OUTPUTSINUSE = MCIERR_BASE + 64,
673     MCIERR_WAVE_SETOUTPUTINUSE,
674     MCIERR_WAVE_INPUTSINUSE,
675     MCIERR_WAVE_SETINPUTINUSE,
676     MCIERR_WAVE_OUTPUTUNSPECIFIED,
677     MCIERR_WAVE_INPUTUNSPECIFIED,
678     MCIERR_WAVE_OUTPUTSUNSUITABLE,
679     MCIERR_WAVE_SETOUTPUTUNSUITABLE,
680     MCIERR_WAVE_INPUTSUNSUITABLE,
681     MCIERR_WAVE_SETINPUTUNSUITABLE, // = MCIERR_BASE + 73
682     MCIERR_SEQ_DIV_INCOMPATIBLE = MCIERR_BASE + 80,
683     MCIERR_SEQ_PORT_INUSE,
684     MCIERR_SEQ_PORT_NONEXISTENT,
685     MCIERR_SEQ_PORT_MAPNODEVICE,
686     MCIERR_SEQ_PORT_MISCERROR,
687     MCIERR_SEQ_TIMER,
688     MCIERR_SEQ_PORTUNSPECIFIED,
689     MCIERR_SEQ_NOMIDIPRESENT, // = MCIERR_BASE + 87
690     MCIERR_NO_WINDOW = MCIERR_BASE + 90,
691     MCIERR_CREATEWINDOW,
692     MCIERR_FILE_READ,
693     MCIERR_FILE_WRITE,
694     MCIERR_NO_IDENTITY // = MCIERR_BASE + 94
695 }
696 enum MCIERR_CUSTOM_DRIVER_BASE = MCIERR_BASE + 256;
697 
698 enum MCI_FIRST=DRV_MCI_FIRST;
699 enum MCI_OPEN=0x803;
700 enum MCI_CLOSE=0x804;
701 enum MCI_ESCAPE=0x805;
702 enum MCI_PLAY=0x806;
703 enum MCI_SEEK=0x807;
704 enum MCI_STOP=0x808;
705 enum MCI_PAUSE=0x809;
706 enum MCI_INFO=0x80A;
707 enum MCI_GETDEVCAPS=0x80B;
708 enum MCI_SPIN=0x80C;
709 enum MCI_SET=0x80D;
710 enum MCI_STEP=0x80E;
711 enum MCI_RECORD=0x80F;
712 enum MCI_SYSINFO=0x810;
713 enum MCI_BREAK=0x811;
714 enum MCI_SAVE=0x813;
715 enum MCI_STATUS=0x814;
716 enum MCI_CUE=0x830;
717 enum MCI_REALIZE=0x840;
718 enum MCI_WINDOW=0x841;
719 enum MCI_PUT=0x842;
720 enum MCI_WHERE=0x843;
721 enum MCI_FREEZE=0x844;
722 enum MCI_UNFREEZE=0x845;
723 enum MCI_LOAD=0x850;
724 enum MCI_CUT=0x851;
725 enum MCI_COPY=0x852;
726 enum MCI_PASTE=0x853;
727 enum MCI_UPDATE=0x854;
728 enum MCI_RESUME=0x855;
729 enum MCI_DELETE=0x856;
730 enum MCI_USER_MESSAGES=(DRV_MCI_FIRST+0x400);
731 enum MCI_LAST=0xFFF;
732 
733 enum MCIDEVICEID MCI_ALL_DEVICE_ID = -1;
734 
735 enum MCI_DEVTYPE_VCR=513;
736 enum MCI_DEVTYPE_VIDEODISC=514;
737 enum MCI_DEVTYPE_OVERLAY=515;
738 enum MCI_DEVTYPE_CD_AUDIO=516;
739 enum MCI_DEVTYPE_DAT=517;
740 enum MCI_DEVTYPE_SCANNER=518;
741 enum MCI_DEVTYPE_ANIMATION=519;
742 enum MCI_DEVTYPE_DIGITAL_VIDEO=520;
743 enum MCI_DEVTYPE_OTHER=521;
744 enum MCI_DEVTYPE_WAVEFORM_AUDIO=522;
745 enum MCI_DEVTYPE_SEQUENCER=523;
746 enum MCI_DEVTYPE_FIRST=MCI_DEVTYPE_VCR;
747 enum MCI_DEVTYPE_LAST=MCI_DEVTYPE_SEQUENCER;
748 enum MCI_DEVTYPE_FIRST_USER=0x1000;
749 enum MCI_MODE_NOT_READY=(MCI_STRING_OFFSET+12);
750 enum MCI_MODE_STOP=(MCI_STRING_OFFSET+13);
751 enum MCI_MODE_PLAY=(MCI_STRING_OFFSET+14);
752 enum MCI_MODE_RECORD=(MCI_STRING_OFFSET+15);
753 enum MCI_MODE_SEEK=(MCI_STRING_OFFSET+16);
754 enum MCI_MODE_PAUSE=(MCI_STRING_OFFSET+17);
755 enum MCI_MODE_OPEN=(MCI_STRING_OFFSET+18);
756 enum MCI_FORMAT_MILLISECONDS=0;
757 enum MCI_FORMAT_HMS=1;
758 enum MCI_FORMAT_MSF=2;
759 enum MCI_FORMAT_FRAMES=3;
760 enum MCI_FORMAT_SMPTE_24=4;
761 enum MCI_FORMAT_SMPTE_25=5;
762 enum MCI_FORMAT_SMPTE_30=6;
763 enum MCI_FORMAT_SMPTE_30DROP=7;
764 enum MCI_FORMAT_BYTES=8;
765 enum MCI_FORMAT_SAMPLES=9;
766 enum MCI_FORMAT_TMSF=10;
767 
768 
769 
770 
771 // Macros
772 BYTE MCI_HMS_HOUR()(DWORD t) { return cast(BYTE)(t); }
773 BYTE MCI_HMS_MINUTE()(DWORD t) { return cast(BYTE)(t>>>8); }
774 BYTE MCI_HMS_SECOND()(DWORD t) { return cast(BYTE)( t>>>16); }
775 DWORD MCI_MAKE_HMS()(BYTE h, BYTE m, BYTE s) { return h |(m<<8)|(cast(DWORD)(s)<<16); }
776 DWORD MCI_MAKE_MSF()(BYTE m, BYTE s, BYTE f) { return m |(s<<8)|(cast(DWORD)(f)<<16); }
777 DWORD MCI_MAKE_TMSF()(BYTE t, BYTE m, BYTE s, BYTE f) {
778  return t |(m<<8)|(s<<16)|(cast(DWORD)(f)<< 24); }
779 
780 BYTE MCI_MSF_MINUTE()(DWORD t) { return cast(BYTE)(t); }
781 BYTE MCI_MSF_SECOND()(DWORD t) { return cast(BYTE)(t >>> 8); }
782 BYTE MCI_MSF_FRAME()(DWORD t)  {  return cast(BYTE)(t >>> 16); }
783 
784 BYTE MCI_TMSF_TRACK()(DWORD t)  { return cast(BYTE)(t); }
785 BYTE MCI_TMSF_MINUTE()(DWORD t) { return cast(BYTE)(t>>8); }
786 BYTE MCI_TMSF_SECOND()(DWORD t) { return cast(BYTE)(t>>16); }
787 BYTE MCI_TMSF_FRAME()(DWORD t)  { return cast(BYTE)(t>>24); }
788 
789 
790 enum MCI_NOTIFY_SUCCESSFUL=1;
791 enum MCI_NOTIFY_SUPERSEDED=2;
792 enum MCI_NOTIFY_ABORTED=4;
793 enum MCI_NOTIFY_FAILURE=8;
794 enum MCI_NOTIFY=1;
795 enum MCI_WAIT=2;
796 enum MCI_FROM=4;
797 enum MCI_TO=8;
798 enum MCI_TRACK=16;
799 enum MCI_OPEN_SHAREABLE=256;
800 enum MCI_OPEN_ELEMENT=512;
801 enum MCI_OPEN_ALIAS=1024;
802 enum MCI_OPEN_ELEMENT_ID=2048;
803 enum MCI_OPEN_TYPE_ID=0x1000;
804 enum MCI_OPEN_TYPE=0x2000;
805 enum MCI_SEEK_TO_START=256;
806 enum MCI_SEEK_TO_END=512;
807 enum MCI_STATUS_ITEM=256;
808 enum MCI_STATUS_START=512;
809 enum MCI_STATUS_LENGTH=1;
810 enum MCI_STATUS_POSITION=2;
811 enum MCI_STATUS_NUMBER_OF_TRACKS=3;
812 enum MCI_STATUS_MODE=4;
813 enum MCI_STATUS_MEDIA_PRESENT=5;
814 enum MCI_STATUS_TIME_FORMAT=6;
815 enum MCI_STATUS_READY=7;
816 enum MCI_STATUS_CURRENT_TRACK=8;
817 enum MCI_INFO_PRODUCT=256;
818 enum MCI_INFO_FILE=512;
819 enum MCI_INFO_MEDIA_UPC=1024;
820 enum MCI_INFO_MEDIA_IDENTITY=2048;
821 enum MCI_INFO_NAME=0x1000;
822 enum MCI_INFO_COPYRIGHT=0x2000;
823 
824 enum MCI_GETDEVCAPS_ITEM=256;
825 enum MCI_GETDEVCAPS_CAN_RECORD=1;
826 enum MCI_GETDEVCAPS_HAS_AUDIO=2;
827 enum MCI_GETDEVCAPS_HAS_VIDEO=3;
828 enum MCI_GETDEVCAPS_DEVICE_TYPE=4;
829 enum MCI_GETDEVCAPS_USES_FILES=5;
830 enum MCI_GETDEVCAPS_COMPOUND_DEVICE=6;
831 enum MCI_GETDEVCAPS_CAN_EJECT=7;
832 enum MCI_GETDEVCAPS_CAN_PLAY=8;
833 enum MCI_GETDEVCAPS_CAN_SAVE=9;
834 
835 enum MCI_SYSINFO_QUANTITY=256;
836 enum MCI_SYSINFO_OPEN=512;
837 enum MCI_SYSINFO_NAME=1024;
838 enum MCI_SYSINFO_INSTALLNAME=2048;
839 enum MCI_SET_DOOR_OPEN=256;
840 enum MCI_SET_DOOR_CLOSED=512;
841 enum MCI_SET_TIME_FORMAT=1024;
842 enum MCI_SET_AUDIO=2048;
843 enum MCI_SET_VIDEO=0x1000;
844 enum MCI_SET_ON=0x2000;
845 enum MCI_SET_OFF=0x4000;
846 
847 enum MCI_SET_AUDIO_ALL=0;
848 enum MCI_SET_AUDIO_LEFT=1;
849 enum MCI_SET_AUDIO_RIGHT=2;
850 
851 enum MCI_BREAK_KEY=256;
852 enum MCI_BREAK_HWND=512;
853 enum MCI_BREAK_OFF=1024;
854 
855 enum MCI_RECORD_INSERT=256;
856 enum MCI_RECORD_OVERWRITE=512;
857 enum MCI_SAVE_FILE=256;
858 enum MCI_LOAD_FILE=256;
859 
860 enum MCI_VD_MODE_PARK=(MCI_VD_OFFSET+1);
861 enum MCI_VD_MEDIA_CLV=(MCI_VD_OFFSET+2);
862 enum MCI_VD_MEDIA_CAV=(MCI_VD_OFFSET+3);
863 enum MCI_VD_MEDIA_OTHER=(MCI_VD_OFFSET+4);
864 
865 enum MCI_VD_FORMAT_TRACK=0x4001;
866 enum MCI_VD_PLAY_REVERSE=0x10000;
867 enum MCI_VD_PLAY_FAST=0x20000;
868 enum MCI_VD_PLAY_SPEED=0x40000;
869 enum MCI_VD_PLAY_SCAN=0x80000;
870 enum MCI_VD_PLAY_SLOW=0x100000;
871 enum MCI_VD_SEEK_REVERSE=0x10000;
872 enum MCI_VD_STATUS_SPEED=0x4002;
873 enum MCI_VD_STATUS_FORWARD=0x4003;
874 enum MCI_VD_STATUS_MEDIA_TYPE=0x4004;
875 enum MCI_VD_STATUS_SIDE=0x4005;
876 enum MCI_VD_STATUS_DISC_SIZE=0x4006;
877 enum MCI_VD_GETDEVCAPS_CLV=0x10000;
878 enum MCI_VD_GETDEVCAPS_CAV=0x20000;
879 enum MCI_VD_SPIN_UP=0x10000;
880 enum MCI_VD_SPIN_DOWN=0x20000;
881 enum MCI_VD_GETDEVCAPS_CAN_REVERSE=0x4002;
882 enum MCI_VD_GETDEVCAPS_FAST_RATE=0x4003;
883 enum MCI_VD_GETDEVCAPS_SLOW_RATE=0x4004;
884 enum MCI_VD_GETDEVCAPS_NORMAL_RATE=0x4005;
885 enum MCI_VD_STEP_FRAMES=0x10000;
886 enum MCI_VD_STEP_REVERSE=0x20000;
887 enum MCI_VD_ESCAPE_STRING=256;
888 
889 enum MCI_CDA_STATUS_TYPE_TRACK=0x4001;
890 enum MCI_CDA_TRACK_AUDIO=MCI_CD_OFFSET;
891 enum MCI_CDA_TRACK_OTHER=(MCI_CD_OFFSET+1);
892 
893 enum MCI_WAVE_PCM=MCI_WAVE_OFFSET;
894 enum MCI_WAVE_MAPPER=(MCI_WAVE_OFFSET+1);
895 enum MCI_WAVE_OPEN_BUFFER=0x10000;
896 enum MCI_WAVE_SET_FORMATTAG=0x10000;
897 enum MCI_WAVE_SET_CHANNELS=0x20000;
898 enum MCI_WAVE_SET_SAMPLESPERSEC=0x40000;
899 enum MCI_WAVE_SET_AVGBYTESPERSEC=0x80000;
900 enum MCI_WAVE_SET_BLOCKALIGN=0x100000;
901 enum MCI_WAVE_SET_BITSPERSAMPLE=0x200000;
902 enum MCI_WAVE_INPUT=0x400000;
903 enum MCI_WAVE_OUTPUT=0x800000;
904 enum MCI_WAVE_STATUS_FORMATTAG=0x4001;
905 enum MCI_WAVE_STATUS_CHANNELS=0x4002;
906 enum MCI_WAVE_STATUS_SAMPLESPERSEC=0x4003;
907 enum MCI_WAVE_STATUS_AVGBYTESPERSEC=0x4004;
908 enum MCI_WAVE_STATUS_BLOCKALIGN=0x4005;
909 enum MCI_WAVE_STATUS_BITSPERSAMPLE=0x4006;
910 enum MCI_WAVE_STATUS_LEVEL=0x4007;
911 enum MCI_WAVE_SET_ANYINPUT=0x4000000;
912 enum MCI_WAVE_SET_ANYOUTPUT=0x8000000;
913 enum MCI_WAVE_GETDEVCAPS_INPUTS=0x4001;
914 enum MCI_WAVE_GETDEVCAPS_OUTPUTS=0x4002;
915 
916 enum MCI_SEQ_DIV_PPQN=MCI_SEQ_OFFSET;
917 enum MCI_SEQ_DIV_SMPTE_24=(MCI_SEQ_OFFSET+1);
918 enum MCI_SEQ_DIV_SMPTE_25=(MCI_SEQ_OFFSET+2);
919 enum MCI_SEQ_DIV_SMPTE_30DROP=(MCI_SEQ_OFFSET+3);
920 enum MCI_SEQ_DIV_SMPTE_30=(MCI_SEQ_OFFSET+4);
921 enum MCI_SEQ_FORMAT_SONGPTR=0x4001;
922 enum MCI_SEQ_FILE=0x4002;
923 enum MCI_SEQ_MIDI=0x4003;
924 enum MCI_SEQ_SMPTE=0x4004;
925 enum MCI_SEQ_NONE=65533;
926 enum MCI_SEQ_MAPPER=65535;
927 
928 enum MCI_SEQ_STATUS_TEMPO=0x4002;
929 enum MCI_SEQ_STATUS_PORT=0x4003;
930 enum MCI_SEQ_STATUS_SLAVE=0x4007;
931 enum MCI_SEQ_STATUS_MASTER=0x4008;
932 enum MCI_SEQ_STATUS_OFFSET=0x4009;
933 enum MCI_SEQ_STATUS_DIVTYPE=0x400A;
934 enum MCI_SEQ_STATUS_NAME=0x400B;
935 enum MCI_SEQ_STATUS_COPYRIGHT=0x400C;
936 
937 enum MCI_SEQ_SET_TEMPO=0x10000;
938 enum MCI_SEQ_SET_PORT=0x20000;
939 enum MCI_SEQ_SET_SLAVE=0x40000;
940 enum MCI_SEQ_SET_MASTER=0x80000;
941 enum MCI_SEQ_SET_OFFSET=0x1000000;
942 
943 enum MCI_ANIM_OPEN_WS=0x10000;
944 enum MCI_ANIM_OPEN_PARENT=0x20000;
945 enum MCI_ANIM_OPEN_NOSTATIC=0x40000;
946 enum MCI_ANIM_PLAY_SPEED=0x10000;
947 enum MCI_ANIM_PLAY_REVERSE=0x20000;
948 enum MCI_ANIM_PLAY_FAST=0x40000;
949 enum MCI_ANIM_PLAY_SLOW=0x80000;
950 enum MCI_ANIM_PLAY_SCAN=0x100000;
951 enum MCI_ANIM_STEP_REVERSE=0x10000;
952 enum MCI_ANIM_STEP_FRAMES=0x20000;
953 enum MCI_ANIM_STATUS_SPEED=0x4001;
954 enum MCI_ANIM_STATUS_FORWARD=0x4002;
955 enum MCI_ANIM_STATUS_HWND=0x4003;
956 enum MCI_ANIM_STATUS_HPAL=0x4004;
957 enum MCI_ANIM_STATUS_STRETCH=0x4005;
958 enum MCI_ANIM_INFO_TEXT=0x10000;
959 
960 enum MCI_ANIM_GETDEVCAPS_CAN_REVERSE=0x4001;
961 enum MCI_ANIM_GETDEVCAPS_FAST_RATE=0x4002;
962 enum MCI_ANIM_GETDEVCAPS_SLOW_RATE=0x4003;
963 enum MCI_ANIM_GETDEVCAPS_NORMAL_RATE=0x4004;
964 enum MCI_ANIM_GETDEVCAPS_PALETTES=0x4006;
965 enum MCI_ANIM_GETDEVCAPS_CAN_STRETCH=0x4007;
966 enum MCI_ANIM_GETDEVCAPS_MAX_WINDOWS=0x4008;
967 
968 enum MCI_ANIM_REALIZE_NORM=0x10000;
969 enum MCI_ANIM_REALIZE_BKGD=0x20000;
970 
971 enum MCI_ANIM_WINDOW_HWND=0x10000;
972 enum MCI_ANIM_WINDOW_STATE=0x40000;
973 enum MCI_ANIM_WINDOW_TEXT=0x80000;
974 enum MCI_ANIM_WINDOW_ENABLE_STRETCH=0x100000;
975 enum MCI_ANIM_WINDOW_DISABLE_STRETCH=0x200000;
976 enum MCI_ANIM_WINDOW_DEFAULT=0x0;
977 
978 enum MCI_ANIM_RECT=0x10000;
979 enum MCI_ANIM_PUT_SOURCE=0x20000;
980 enum MCI_ANIM_PUT_DESTINATION=0x40000;
981 enum MCI_ANIM_WHERE_SOURCE=0x20000;
982 enum MCI_ANIM_WHERE_DESTINATION=0x40000;
983 enum MCI_ANIM_UPDATE_HDC=0x20000;
984 
985 enum MCI_OVLY_OPEN_WS=0x10000;
986 enum MCI_OVLY_OPEN_PARENT=0x20000;
987 enum MCI_OVLY_STATUS_HWND=0x4001;
988 enum MCI_OVLY_STATUS_STRETCH=0x4002;
989 enum MCI_OVLY_INFO_TEXT=0x10000;
990 enum MCI_OVLY_GETDEVCAPS_CAN_STRETCH=0x4001;
991 enum MCI_OVLY_GETDEVCAPS_CAN_FREEZE=0x4002;
992 enum MCI_OVLY_GETDEVCAPS_MAX_WINDOWS=0x4003;
993 enum MCI_OVLY_WINDOW_HWND=0x10000;
994 enum MCI_OVLY_WINDOW_STATE=0x40000;
995 enum MCI_OVLY_WINDOW_TEXT=0x80000;
996 enum MCI_OVLY_WINDOW_ENABLE_STRETCH=0x100000;
997 enum MCI_OVLY_WINDOW_DISABLE_STRETCH=0x200000;
998 enum MCI_OVLY_WINDOW_DEFAULT=0x0;
999 enum MCI_OVLY_RECT=0x10000;
1000 enum MCI_OVLY_PUT_SOURCE=0x20000;
1001 enum MCI_OVLY_PUT_DESTINATION=0x40000;
1002 enum MCI_OVLY_PUT_FRAME=0x80000;
1003 enum MCI_OVLY_PUT_VIDEO=0x100000;
1004 enum MCI_OVLY_WHERE_SOURCE=0x20000;
1005 enum MCI_OVLY_WHERE_DESTINATION=0x40000;
1006 enum MCI_OVLY_WHERE_FRAME=0x80000;
1007 enum MCI_OVLY_WHERE_VIDEO=0x100000;
1008 
1009 enum NEWTRANSPARENT=3;
1010 enum QUERYROPSUPPORT=40;
1011 enum SELECTDIB=41;
1012 
1013 LONG DIBINDEX()(WORD n) {
1014     return MAKELONG(n, 0x10FF);
1015 }
1016 enum CAPS1=94;
1017 enum C1_TRANSPARENT=1;
1018 
1019 //const SEEK_SET=0;
1020 //const SEEK_CUR=1;
1021 //const SEEK_END=2;
1022 public import core.stdc.stdio : SEEK_SET, SEEK_CUR, SEEK_END;
1023 
1024 alias DWORD MCIERROR;
1025 alias UINT MCIDEVICEID;
1026 extern(Windows) alias UINT function (MCIDEVICEID, DWORD) YIELDPROC;
1027 alias UINT MMVERSION;
1028 alias UINT MMRESULT;
1029 
1030 struct MMTIME {
1031     UINT wType;
1032     union {
1033         DWORD ms;
1034         DWORD sample;
1035         DWORD cb;
1036         DWORD ticks;
1037         struct _smpte {
1038             BYTE hour;
1039             BYTE min;
1040             BYTE sec;
1041             BYTE frame;
1042             BYTE fps;
1043             BYTE dummy;
1044             BYTE[2] pad;
1045         }
1046         _smpte smpte;
1047         struct _midi {
1048             DWORD songptrpos;
1049         }
1050         _midi midi;
1051     }
1052 }
1053 alias MMTIME* PMMTIME, LPMMTIME;
1054 
1055 alias TypeDef!(HANDLE) HDRVR;
1056 
1057 struct DRVCONFIGINFO {
1058 align(1):
1059     DWORD dwDCISize;
1060     LPCWSTR lpszDCISectionName;
1061     LPCWSTR lpszDCIAliasName;
1062 }
1063 alias DRVCONFIGINFO * PDRVCONFIGINFO, LPDRVCONFIGINFO;
1064 
1065 struct DRVCONFIGINFOEX {
1066 align(1):
1067     DWORD dwDCISize;
1068     LPCWSTR lpszDCISectionName;
1069     LPCWSTR lpszDCIAliasName;
1070     DWORD dnDevNode;
1071 }
1072 alias DRVCONFIGINFOEX* PDRVCONFIGINFOEX, LPDRVCONFIGINFOEX;
1073 
1074 extern(Windows):
1075 
1076 /+FIXME: I couldn't find these in MSDN.
1077 alias void function (HDRVR, UINT, DWORD_PTR, DWORD_PTR, DWORD_PTR) DRVCALLBACK;
1078 LRESULT DRIVERPROC (DWORD_PTR, HDRVR, UINT, LPARAM, LPARAM);
1079 alias DRVCALLBACK* LPDRVCALLBACK, PDRVCALLBACK;
1080 
1081 alias DRVCALLBACK WAVECALLBACK;
1082 alias WAVECALLBACK* LPWAVECALLBACK;
1083 
1084 alias DRVCALLBACK MIDICALLBACK;
1085 alias MIDICALLBACK* LPMIDICALLBACK;
1086 
1087 +/
1088 
1089 alias TypeDef!(HANDLE) HWAVE;
1090 alias TypeDef!(HANDLE) HWAVEIN;
1091 alias TypeDef!(HANDLE) HWAVEOUT;
1092 
1093 alias HWAVEIN* LPHWAVEIN;
1094 alias HWAVEOUT* LPHWAVEOUT;
1095 
1096 struct WAVEHDR {
1097     LPSTR lpData;
1098     DWORD dwBufferLength;
1099     DWORD dwBytesRecorded;
1100     DWORD_PTR dwUser;
1101     DWORD dwFlags;
1102     DWORD dwLoops;
1103     WAVEHDR *lpNext;
1104     DWORD_PTR reserved;
1105 }
1106 alias WAVEHDR* PWAVEHDR, LPWAVEHDR;
1107 
1108 struct WAVEOUTCAPSA {
1109     WORD wMid;
1110     WORD wPid;
1111     MMVERSION vDriverVersion;
1112     CHAR[MAXPNAMELEN] szPname = 0;
1113     DWORD dwFormats;
1114     WORD wChannels;
1115     WORD wReserved1;
1116     DWORD dwSupport;
1117 }
1118 alias WAVEOUTCAPSA* PWAVEOUTCAPSA, LPWAVEOUTCAPSA;
1119 
1120 struct WAVEOUTCAPSW {
1121     WORD wMid;
1122     WORD wPid;
1123     MMVERSION vDriverVersion;
1124     WCHAR[MAXPNAMELEN] szPname = 0;
1125     DWORD dwFormats;
1126     WORD wChannels;
1127     WORD wReserved1;
1128     DWORD dwSupport;
1129 }
1130 alias WAVEOUTCAPSW* PWAVEOUTCAPSW, LPWAVEOUTCAPSW;
1131 
1132 struct WAVEINCAPSA {
1133     WORD wMid;
1134     WORD wPid;
1135     MMVERSION vDriverVersion;
1136     CHAR[MAXPNAMELEN] szPname = 0;
1137     DWORD dwFormats;
1138     WORD wChannels;
1139     WORD wReserved1;
1140 }
1141 alias WAVEINCAPSA* PWAVEINCAPSA, LPWAVEINCAPSA;
1142 
1143 struct WAVEINCAPSW {
1144     WORD wMid;
1145     WORD wPid;
1146     MMVERSION vDriverVersion;
1147     WCHAR[MAXPNAMELEN] szPname = 0;
1148     DWORD dwFormats;
1149     WORD wChannels;
1150     WORD wReserved1;
1151 }
1152 alias WAVEINCAPSW* PWAVEINCAPSW, LPWAVEINCAPSW;
1153 
1154 struct WAVEFORMAT {
1155     WORD wFormatTag;
1156     WORD nChannels;
1157     DWORD nSamplesPerSec;
1158     DWORD nAvgBytesPerSec;
1159     WORD nBlockAlign;
1160 }
1161 alias WAVEFORMAT* PWAVEFORMAT, LPWAVEFORMAT;
1162 
1163 struct PCMWAVEFORMAT {
1164     WAVEFORMAT wf;
1165     WORD wBitsPerSample;
1166 }
1167 alias PCMWAVEFORMAT* PPCMWAVEFORMAT, LPPCMWAVEFORMAT;
1168 
1169 struct WAVEFORMATEX {
1170     WORD wFormatTag;
1171     WORD nChannels;
1172     DWORD nSamplesPerSec;
1173     DWORD nAvgBytesPerSec;
1174     WORD nBlockAlign;
1175     WORD wBitsPerSample;
1176     WORD cbSize;
1177 }
1178 alias WAVEFORMATEX* PWAVEFORMATEX, LPWAVEFORMATEX;
1179 alias const(WAVEFORMATEX)* LPCWAVEFORMATEX;
1180 
1181 alias TypeDef!(HANDLE) HMIDI;
1182 alias TypeDef!(HANDLE) HMIDIIN;
1183 alias TypeDef!(HANDLE) HMIDIOUT;
1184 alias TypeDef!(HANDLE) HMIDISTRM;
1185 
1186 alias HMIDI* LPHMIDI;
1187 alias HMIDIIN* LPHMIDIIN;
1188 alias HMIDIOUT* LPHMIDIOUT;
1189 alias HMIDISTRM* LPHMIDISTRM;
1190 
1191 alias WORD[MIDIPATCHSIZE] PATCHARRAY;
1192 alias WORD* LPPATCHARRAY;
1193 alias WORD[MIDIPATCHSIZE] KEYARRAY;
1194 alias WORD* LPKEYARRAY;
1195 
1196 struct MIDIOUTCAPSA {
1197     WORD wMid;
1198     WORD wPid;
1199     MMVERSION vDriverVersion;
1200     CHAR[MAXPNAMELEN] szPname = 0;
1201     WORD wTechnology;
1202     WORD wVoices;
1203     WORD wNotes;
1204     WORD wChannelMask;
1205     DWORD dwSupport;
1206 }
1207 alias MIDIOUTCAPSA* PMIDIOUTCAPSA, LPMIDIOUTCAPSA;
1208 
1209 struct MIDIOUTCAPSW {
1210     WORD wMid;
1211     WORD wPid;
1212     MMVERSION vDriverVersion;
1213     WCHAR[MAXPNAMELEN] szPname = 0;
1214     WORD wTechnology;
1215     WORD wVoices;
1216     WORD wNotes;
1217     WORD wChannelMask;
1218     DWORD dwSupport;
1219 }
1220 alias MIDIOUTCAPSW* PMIDIOUTCAPSW, LPMIDIOUTCAPSW;
1221 
1222 struct MIDIINCAPSA {
1223     WORD wMid;
1224     WORD wPid;
1225     MMVERSION vDriverVersion;
1226     CHAR[MAXPNAMELEN] szPname = 0;
1227     DWORD dwSupport;
1228 }
1229 alias MIDIINCAPSA* PMIDIINCAPSA, LPMIDIINCAPSA;
1230 
1231 struct MIDIINCAPSW {
1232     WORD wMid;
1233     WORD wPid;
1234     MMVERSION vDriverVersion;
1235     WCHAR[MAXPNAMELEN] szPname = 0;
1236     DWORD dwSupport;
1237 }
1238 alias MIDIINCAPSW* PMIDIINCAPSW, LPMIDIINCAPSW;
1239 
1240 struct MIDIHDR {
1241 align(1):
1242     LPSTR lpData;
1243     DWORD dwBufferLength;
1244     DWORD dwBytesRecorded;
1245     DWORD_PTR dwUser;
1246     DWORD dwFlags;
1247     MIDIHDR *lpNext;
1248     DWORD_PTR reserved;
1249     DWORD dwOffset;
1250     DWORD_PTR[8] dwReserved;
1251 }
1252 alias MIDIHDR* PMIDIHDR, LPMIDIHDR;
1253 
1254 struct MIDIEVENT {
1255     DWORD dwDeltaTime;
1256     DWORD dwStreamID;
1257     DWORD dwEvent;
1258     DWORD[1] dwParms;
1259 }
1260 
1261 struct MIDISTRMBUFFVER {
1262     DWORD dwVersion;
1263     DWORD dwMid;
1264     DWORD dwOEMVersion;
1265 }
1266 
1267 struct MIDIPROPTIMEDIV {
1268     DWORD cbStruct;
1269     DWORD dwTimeDiv;
1270 }
1271 alias MIDIPROPTIMEDIV* LPMIDIPROPTIMEDIV;
1272 
1273 struct MIDIPROPTEMPO {
1274     DWORD cbStruct;
1275     DWORD dwTempo;
1276 }
1277 alias MIDIPROPTEMPO* LPMIDIPROPTEMPO;
1278 
1279 struct AUXCAPSA {
1280     WORD wMid;
1281     WORD wPid;
1282     MMVERSION vDriverVersion;
1283     CHAR[MAXPNAMELEN] szPname = 0;
1284     WORD wTechnology;
1285     WORD wReserved1;
1286     DWORD dwSupport;
1287 }
1288 alias AUXCAPSA* PAUXCAPSA, LPAUXCAPSA;
1289 
1290 struct AUXCAPSW {
1291     WORD wMid;
1292     WORD wPid;
1293     MMVERSION vDriverVersion;
1294     WCHAR[MAXPNAMELEN] szPname = 0;
1295     WORD wTechnology;
1296     WORD wReserved1;
1297     DWORD dwSupport;
1298 }
1299 alias AUXCAPSW* PAUXCAPSW, LPAUXCAPSW;
1300 
1301 alias TypeDef!(HANDLE) HMIXEROBJ;
1302 alias HMIXEROBJ* LPHMIXEROBJ;
1303 
1304 alias TypeDef!(HANDLE) HMIXER;
1305 alias HMIXER* LPHMIXER;
1306 
1307 struct MIXERCAPSA {
1308     WORD wMid;
1309     WORD wPid;
1310     MMVERSION vDriverVersion;
1311     CHAR[MAXPNAMELEN] szPname = 0;
1312     DWORD fdwSupport;
1313     DWORD cDestinations;
1314 }
1315 alias MIXERCAPSA* PMIXERCAPSA, LPMIXERCAPSA;
1316 
1317 struct MIXERCAPSW {
1318     WORD wMid;
1319     WORD wPid;
1320     MMVERSION vDriverVersion;
1321     WCHAR[MAXPNAMELEN] szPname = 0;
1322     DWORD fdwSupport;
1323     DWORD cDestinations;
1324 }
1325 alias MIXERCAPSW* PMIXERCAPSW, LPMIXERCAPSW;
1326 
1327 struct MIXERLINEA {
1328 align(1):
1329     DWORD cbStruct;
1330     DWORD dwDestination;
1331     DWORD dwSource;
1332     DWORD dwLineID;
1333     DWORD fdwLine;
1334     DWORD_PTR dwUser;
1335     DWORD dwComponentType;
1336     DWORD cChannels;
1337     DWORD cConnections;
1338     DWORD cControls;
1339     CHAR[MIXER_SHORT_NAME_CHARS] szShortName = 0;
1340     CHAR[MIXER_LONG_NAME_CHARS] szName = 0;
1341     struct _Target {
1342         DWORD dwType;
1343         DWORD dwDeviceID;
1344         WORD wMid;
1345         WORD wPid;
1346         MMVERSION vDriverVersion;
1347         CHAR[MAXPNAMELEN] szPname = 0;
1348     }
1349     _Target Target;
1350 }
1351 alias MIXERLINEA* PMIXERLINEA, LPMIXERLINEA;
1352 
1353 struct MIXERLINEW {
1354 align(1):
1355     DWORD cbStruct;
1356     DWORD dwDestination;
1357     DWORD dwSource;
1358     DWORD dwLineID;
1359     DWORD fdwLine;
1360     DWORD_PTR dwUser;
1361     DWORD dwComponentType;
1362     DWORD cChannels;
1363     DWORD cConnections;
1364     DWORD cControls;
1365     WCHAR[MIXER_SHORT_NAME_CHARS] szShortName = 0;
1366     WCHAR[MIXER_LONG_NAME_CHARS] szName = 0;
1367     struct _Target {
1368         DWORD dwType;
1369         DWORD dwDeviceID;
1370         WORD wMid;
1371         WORD wPid;
1372         MMVERSION vDriverVersion;
1373         WCHAR[MAXPNAMELEN] szPname = 0;
1374     }
1375     _Target Target;
1376 }
1377 alias MIXERLINEW* PMIXERLINEW, LPMIXERLINEW;
1378 
1379 struct MIXERCONTROLA {
1380     DWORD cbStruct;
1381     DWORD dwControlID;
1382     DWORD dwControlType;
1383     DWORD fdwControl;
1384     DWORD cMultipleItems;
1385     CHAR[MIXER_SHORT_NAME_CHARS] szShortName = 0;
1386     CHAR[MIXER_LONG_NAME_CHARS] szName = 0;
1387     union _Bounds {
1388         struct {
1389             LONG lMinimum;
1390             LONG lMaximum;
1391         }
1392         struct {
1393             DWORD dwMinimum;
1394             DWORD dwMaximum;
1395         }
1396         DWORD[6] dwReserved;
1397     }
1398     _Bounds Bounds;
1399     union _Metrics {
1400         DWORD cSteps;
1401         DWORD cbCustomData;
1402         DWORD[6] dwReserved;
1403     }
1404     _Metrics Metrics;
1405 }
1406 alias MIXERCONTROLA* PMIXERCONTROLA, LPMIXERCONTROLA;
1407 
1408 struct MIXERCONTROLW {
1409     DWORD cbStruct;
1410     DWORD dwControlID;
1411     DWORD dwControlType;
1412     DWORD fdwControl;
1413     DWORD cMultipleItems;
1414     WCHAR[MIXER_SHORT_NAME_CHARS] szShortName = 0;
1415     WCHAR[MIXER_LONG_NAME_CHARS] szName = 0;
1416     union _Bounds {
1417         struct {
1418             LONG lMinimum;
1419             LONG lMaximum;
1420         }
1421         struct {
1422             DWORD dwMinimum;
1423             DWORD dwMaximum;
1424         }
1425         DWORD[6] dwReserved;
1426     }
1427     _Bounds Bounds;
1428     union _Metrics {
1429         DWORD cSteps;
1430         DWORD cbCustomData;
1431         DWORD[6] dwReserved;
1432     }
1433     _Metrics Metrics;
1434 }
1435 
1436 alias MIXERCONTROLW* PMIXERCONTROLW, LPMIXERCONTROLW;
1437 
1438 struct MIXERLINECONTROLSA {
1439 align(1):
1440     DWORD cbStruct;
1441     DWORD dwLineID;
1442     union {
1443         DWORD dwControlID;
1444         DWORD dwControlType;
1445     }
1446     DWORD cControls;
1447     DWORD cbmxctrl;
1448     LPMIXERCONTROLA pamxctrl;
1449 }
1450 alias MIXERLINECONTROLSA* PMIXERLINECONTROLSA, LPMIXERLINECONTROLSA;
1451 
1452 struct MIXERLINECONTROLSW {
1453 align(1):
1454     DWORD cbStruct;
1455     DWORD dwLineID;
1456     union {
1457         DWORD dwControlID;
1458         DWORD dwControlType;
1459     }
1460     DWORD cControls;
1461     DWORD cbmxctrl;
1462     LPMIXERCONTROLW pamxctrl;
1463 }
1464 alias MIXERLINECONTROLSW* PMIXERLINECONTROLSW, LPMIXERLINECONTROLSW;
1465 
1466 struct MIXERCONTROLDETAILS {
1467 align(1):
1468     DWORD cbStruct;
1469     DWORD dwControlID;
1470     DWORD cChannels;
1471     union {
1472         HWND hwndOwner;
1473         DWORD cMultipleItems;
1474     }
1475     DWORD cbDetails;
1476     PVOID paDetails;
1477 }
1478 alias MIXERCONTROLDETAILS* PMIXERCONTROLDETAILS, LPMIXERCONTROLDETAILS;
1479 
1480 struct MIXERCONTROLDETAILS_LISTTEXTA {
1481     DWORD dwParam1;
1482     DWORD dwParam2;
1483     CHAR[MIXER_LONG_NAME_CHARS] szName = 0;
1484 }
1485 alias MIXERCONTROLDETAILS_LISTTEXTA* PMIXERCONTROLDETAILS_LISTTEXTA, LPMIXERCONTROLDETAILS_LISTTEXTA;
1486 
1487 struct MIXERCONTROLDETAILS_LISTTEXTW {
1488     DWORD dwParam1;
1489     DWORD dwParam2;
1490     WCHAR[MIXER_LONG_NAME_CHARS] szName = 0;
1491 }
1492 alias MIXERCONTROLDETAILS_LISTTEXTW* PMIXERCONTROLDETAILS_LISTTEXTW, LPMIXERCONTROLDETAILS_LISTTEXTW;
1493 
1494 struct MIXERCONTROLDETAILS_BOOLEAN {
1495     LONG fValue;
1496 }
1497 alias MIXERCONTROLDETAILS_BOOLEAN* PMIXERCONTROLDETAILS_BOOLEAN, LPMIXERCONTROLDETAILS_BOOLEAN;
1498 
1499 struct MIXERCONTROLDETAILS_SIGNED {
1500     LONG lValue;
1501 }
1502 alias MIXERCONTROLDETAILS_SIGNED* PMIXERCONTROLDETAILS_SIGNED, LPMIXERCONTROLDETAILS_SIGNED;
1503 
1504 struct MIXERCONTROLDETAILS_UNSIGNED {
1505     DWORD dwValue;
1506 }
1507 alias MIXERCONTROLDETAILS_UNSIGNED* PMIXERCONTROLDETAILS_UNSIGNED, LPMIXERCONTROLDETAILS_UNSIGNED;
1508 
1509 alias void function (UINT, UINT, DWORD_PTR, DWORD_PTR, DWORD_PTR) LPTIMECALLBACK;
1510 
1511 struct TIMECAPS {
1512     UINT wPeriodMin;
1513     UINT wPeriodMax;
1514 }
1515 alias TIMECAPS* PTIMECAPS, LPTIMECAPS;
1516 
1517 struct JOYCAPSA {
1518     WORD wMid;
1519     WORD wPid;
1520     CHAR[MAXPNAMELEN] szPname = 0;
1521     UINT wXmin;
1522     UINT wXmax;
1523     UINT wYmin;
1524     UINT wYmax;
1525     UINT wZmin;
1526     UINT wZmax;
1527     UINT wNumButtons;
1528     UINT wPeriodMin;
1529     UINT wPeriodMax;
1530     UINT wRmin;
1531     UINT wRmax;
1532     UINT wUmin;
1533     UINT wUmax;
1534     UINT wVmin;
1535     UINT wVmax;
1536     UINT wCaps;
1537     UINT wMaxAxes;
1538     UINT wNumAxes;
1539     UINT wMaxButtons;
1540     CHAR[MAXPNAMELEN] szRegKey = 0;
1541     CHAR[MAX_JOYSTICKOEMVXDNAME] szOEMVxD = 0;
1542 }
1543 alias JOYCAPSA* PJOYCAPSA, LPJOYCAPSA;
1544 
1545 struct JOYCAPSW {
1546     WORD wMid;
1547     WORD wPid;
1548     WCHAR[MAXPNAMELEN] szPname = 0;
1549     UINT wXmin;
1550     UINT wXmax;
1551     UINT wYmin;
1552     UINT wYmax;
1553     UINT wZmin;
1554     UINT wZmax;
1555     UINT wNumButtons;
1556     UINT wPeriodMin;
1557     UINT wPeriodMax;
1558     UINT wRmin;
1559     UINT wRmax;
1560     UINT wUmin;
1561     UINT wUmax;
1562     UINT wVmin;
1563     UINT wVmax;
1564     UINT wCaps;
1565     UINT wMaxAxes;
1566     UINT wNumAxes;
1567     UINT wMaxButtons;
1568     WCHAR[MAXPNAMELEN] szRegKey = 0;
1569     WCHAR[MAX_JOYSTICKOEMVXDNAME] szOEMVxD = 0;
1570 }
1571 alias JOYCAPSW* PJOYCAPSW, LPJOYCAPSW;
1572 
1573 struct JOYINFO {
1574     UINT wXpos;
1575     UINT wYpos;
1576     UINT wZpos;
1577     UINT wButtons;
1578 }
1579 alias JOYINFO* PJOYINFO, LPJOYINFO;
1580 
1581 struct JOYINFOEX {
1582     DWORD dwSize;
1583     DWORD dwFlags;
1584     DWORD dwXpos;
1585     DWORD dwYpos;
1586     DWORD dwZpos;
1587     DWORD dwRpos;
1588     DWORD dwUpos;
1589     DWORD dwVpos;
1590     DWORD dwButtons;
1591     DWORD dwButtonNumber;
1592     DWORD dwPOV;
1593     DWORD dwReserved1;
1594     DWORD dwReserved2;
1595 }
1596 alias JOYINFOEX* PJOYINFOEX, LPJOYINFOEX;
1597 
1598 alias DWORD FOURCC;
1599 alias char* HPSTR;
1600 
1601 alias TypeDef!(HANDLE) HMMIO;
1602 
1603 alias LRESULT function (LPSTR, UINT, LPARAM, LPARAM) LPMMIOPROC;
1604 
1605 struct MMIOINFO {
1606 align(1):
1607     DWORD dwFlags;
1608     FOURCC fccIOProc;
1609     LPMMIOPROC pIOProc;
1610     UINT wErrorRet;
1611     HTASK htask;
1612     LONG cchBuffer;
1613     HPSTR pchBuffer;
1614     HPSTR pchNext;
1615     HPSTR pchEndRead;
1616     HPSTR pchEndWrite;
1617     LONG lBufOffset;
1618     LONG lDiskOffset;
1619     DWORD[3] adwInfo;
1620     DWORD dwReserved1;
1621     DWORD dwReserved2;
1622     HMMIO hmmio;
1623 }
1624 alias MMIOINFO* PMMIOINFO, LPMMIOINFO;
1625 alias const(MMIOINFO)* LPCMMIOINFO;
1626 
1627 struct MMCKINFO {
1628     FOURCC ckid;
1629     DWORD cksize;
1630     FOURCC fccType;
1631     DWORD dwDataOffset;
1632     DWORD dwFlags;
1633 }
1634 alias MMCKINFO* PMMCKINFO, LPMMCKINFO;
1635 alias const(MMCKINFO)* LPCMMCKINFO;
1636 
1637 struct MCI_GENERIC_PARMS {
1638     DWORD_PTR dwCallback;
1639 }
1640 alias MCI_GENERIC_PARMS* PMCI_GENERIC_PARMS, LPMCI_GENERIC_PARMS;
1641 
1642 struct MCI_OPEN_PARMSA {
1643 align(1):
1644     DWORD_PTR dwCallback;
1645     MCIDEVICEID wDeviceID;
1646     LPCSTR lpstrDeviceType;
1647     LPCSTR lpstrElementName;
1648     LPCSTR lpstrAlias;
1649 }
1650 alias MCI_OPEN_PARMSA* PMCI_OPEN_PARMSA, LPMCI_OPEN_PARMSA;
1651 
1652 struct MCI_OPEN_PARMSW {
1653 align(1):
1654     DWORD_PTR dwCallback;
1655     MCIDEVICEID wDeviceID;
1656     LPCWSTR lpstrDeviceType;
1657     LPCWSTR lpstrElementName;
1658     LPCWSTR lpstrAlias;
1659 }
1660 alias MCI_OPEN_PARMSW* PMCI_OPEN_PARMSW, LPMCI_OPEN_PARMSW;
1661 
1662 struct MCI_PLAY_PARMS {
1663     DWORD_PTR dwCallback;
1664     DWORD dwFrom;
1665     DWORD dwTo;
1666 }
1667 alias MCI_PLAY_PARMS* PMCI_PLAY_PARMS, LPMCI_PLAY_PARMS;
1668 
1669 struct MCI_SEEK_PARMS {
1670     DWORD_PTR dwCallback;
1671     DWORD dwTo;
1672 }
1673 alias MCI_SEEK_PARMS* PMCI_SEEK_PARMS, LPMCI_SEEK_PARMS;
1674 
1675 struct MCI_STATUS_PARMS {
1676     DWORD_PTR dwCallback;
1677     DWORD_PTR dwReturn;
1678     DWORD dwItem;
1679     DWORD dwTrack;
1680 }
1681 alias MCI_STATUS_PARMS* PMCI_STATUS_PARMS, LPMCI_STATUS_PARMS;
1682 
1683 struct MCI_INFO_PARMSA {
1684     DWORD_PTR dwCallback;
1685     LPSTR lpstrReturn;
1686     DWORD dwRetSize;
1687 }
1688 alias MCI_INFO_PARMSA* LPMCI_INFO_PARMSA;
1689 
1690 struct MCI_INFO_PARMSW {
1691     DWORD_PTR dwCallback;
1692     LPWSTR lpstrReturn;
1693     DWORD dwRetSize;
1694 }
1695 alias MCI_INFO_PARMSW* LPMCI_INFO_PARMSW;
1696 
1697 struct MCI_GETDEVCAPS_PARMS {
1698     DWORD_PTR dwCallback;
1699     DWORD dwReturn;
1700     DWORD dwItem;
1701 }
1702 alias MCI_GETDEVCAPS_PARMS* PMCI_GETDEVCAPS_PARMS, LPMCI_GETDEVCAPS_PARMS;
1703 
1704 struct MCI_SYSINFO_PARMSA {
1705     DWORD_PTR dwCallback;
1706     LPSTR lpstrReturn;
1707     DWORD dwRetSize;
1708     DWORD dwNumber;
1709     UINT wDeviceType;
1710 }
1711 alias MCI_SYSINFO_PARMSA* PMCI_SYSINFO_PARMSA, LPMCI_SYSINFO_PARMSA;
1712 
1713 struct MCI_SYSINFO_PARMSW {
1714     DWORD_PTR dwCallback;
1715     LPWSTR lpstrReturn;
1716     DWORD dwRetSize;
1717     DWORD dwNumber;
1718     UINT wDeviceType;
1719 }
1720 alias MCI_SYSINFO_PARMSW* PMCI_SYSINFO_PARMSW, LPMCI_SYSINFO_PARMSW;
1721 
1722 struct MCI_SET_PARMS {
1723     DWORD_PTR dwCallback;
1724     DWORD dwTimeFormat;
1725     DWORD dwAudio;
1726 }
1727 alias MCI_SET_PARMS* PMCI_SET_PARMS, LPMCI_SET_PARMS;
1728 
1729 struct MCI_BREAK_PARMS {
1730 align(1):
1731     DWORD_PTR dwCallback;
1732     int nVirtKey;
1733     HWND hwndBreak;
1734 }
1735 alias MCI_BREAK_PARMS* PMCI_BREAK_PARMS, LPMCI_BREAK_PARMS;
1736 
1737 struct MCI_SAVE_PARMSA {
1738     DWORD_PTR dwCallback;
1739     LPCSTR lpfilename;
1740 }
1741 alias MCI_SAVE_PARMSA* PMCI_SAVE_PARMSA, LPMCI_SAVE_PARMSA;
1742 
1743 struct MCI_SAVE_PARMSW {
1744     DWORD_PTR dwCallback;
1745     LPCWSTR lpfilename;
1746 }
1747 alias MCI_SAVE_PARMSW* PMCI_SAVE_PARMSW, LPMCI_SAVE_PARMSW;
1748 
1749 struct MCI_LOAD_PARMSA {
1750     DWORD_PTR dwCallback;
1751     LPCSTR lpfilename;
1752 }
1753 alias MCI_LOAD_PARMSA* PMCI_LOAD_PARMSA, LPMCI_LOAD_PARMSA;
1754 
1755 struct MCI_LOAD_PARMSW {
1756     DWORD_PTR dwCallback;
1757     LPCWSTR lpfilename;
1758 }
1759 alias MCI_LOAD_PARMSW* PMCI_LOAD_PARMSW, LPMCI_LOAD_PARMSW;
1760 
1761 struct MCI_RECORD_PARMS {
1762     DWORD_PTR dwCallback;
1763     DWORD dwFrom;
1764     DWORD dwTo;
1765 }
1766 alias MCI_RECORD_PARMS* LPMCI_RECORD_PARMS;
1767 
1768 struct MCI_VD_PLAY_PARMS {
1769     DWORD_PTR dwCallback;
1770     DWORD dwFrom;
1771     DWORD dwTo;
1772     DWORD dwSpeed;
1773 }
1774 alias MCI_VD_PLAY_PARMS* PMCI_VD_PLAY_PARMS, LPMCI_VD_PLAY_PARMS;
1775 
1776 struct MCI_VD_STEP_PARMS {
1777     DWORD_PTR dwCallback;
1778     DWORD dwFrames;
1779 }
1780 alias MCI_VD_STEP_PARMS* PMCI_VD_STEP_PARMS, LPMCI_VD_STEP_PARMS;
1781 
1782 struct MCI_VD_ESCAPE_PARMSA {
1783     DWORD_PTR dwCallback;
1784     LPCSTR lpstrCommand;
1785 }
1786 alias MCI_VD_ESCAPE_PARMSA* PMCI_VD_ESCAPE_PARMSA, LPMCI_VD_ESCAPE_PARMSA;
1787 
1788 struct MCI_VD_ESCAPE_PARMSW {
1789     DWORD_PTR dwCallback;
1790     LPCWSTR lpstrCommand;
1791 }
1792 alias MCI_VD_ESCAPE_PARMSW* PMCI_VD_ESCAPE_PARMSW, LPMCI_VD_ESCAPE_PARMSW;
1793 
1794 struct MCI_WAVE_OPEN_PARMSA {
1795 align(1):
1796     DWORD_PTR dwCallback;
1797     MCIDEVICEID wDeviceID;
1798     LPCSTR lpstrDeviceType;
1799     LPCSTR lpstrElementName;
1800     LPCSTR lpstrAlias;
1801     DWORD dwBufferSeconds;
1802 }
1803 alias MCI_WAVE_OPEN_PARMSA* PMCI_WAVE_OPEN_PARMSA, LPMCI_WAVE_OPEN_PARMSA;
1804 
1805 struct MCI_WAVE_OPEN_PARMSW {
1806 align(1):
1807     DWORD_PTR dwCallback;
1808     MCIDEVICEID wDeviceID;
1809     LPCWSTR lpstrDeviceType;
1810     LPCWSTR lpstrElementName;
1811     LPCWSTR lpstrAlias;
1812     DWORD dwBufferSeconds;
1813 }
1814 alias MCI_WAVE_OPEN_PARMSW* PMCI_WAVE_OPEN_PARMSW, LPMCI_WAVE_OPEN_PARMSW;
1815 
1816 struct MCI_WAVE_DELETE_PARMS {
1817     DWORD_PTR dwCallback;
1818     DWORD dwFrom;
1819     DWORD dwTo;
1820 }
1821 alias MCI_WAVE_DELETE_PARMS* PMCI_WAVE_DELETE_PARMS, LPMCI_WAVE_DELETE_PARMS;
1822 
1823 struct MCI_WAVE_SET_PARMS {
1824     DWORD_PTR dwCallback;
1825     DWORD dwTimeFormat;
1826     DWORD dwAudio;
1827     UINT wInput;
1828     UINT wOutput;
1829     WORD wFormatTag;
1830     WORD wReserved2;
1831     WORD nChannels;
1832     WORD wReserved3;
1833     DWORD nSamplesPerSec;
1834     DWORD nAvgBytesPerSec;
1835     WORD nBlockAlign;
1836     WORD wReserved4;
1837     WORD wBitsPerSample;
1838     WORD wReserved5;
1839 }
1840 alias MCI_WAVE_SET_PARMS* PMCI_WAVE_SET_PARMS, LPMCI_WAVE_SET_PARMS;
1841 
1842 extern (Windows) nothrow @nogc:
1843 LRESULT CloseDriver(HDRVR, LONG, LONG);
1844 HDRVR OpenDriver(LPCWSTR, LPCWSTR, LONG);
1845 LRESULT SendDriverMessage(HDRVR, UINT, LONG, LONG);
1846 HMODULE DrvGetModuleHandle(HDRVR);
1847 HMODULE GetDriverModuleHandle(HDRVR);
1848 LRESULT DefDriverProc(DWORD_PTR, HDRVR, UINT, LPARAM, LPARAM);
1849 UINT mmsystemGetVersion();
1850 // FIXME: I believe this next line is a mistake
1851 //alias OutputDebugString OutputDebugStr;
1852 BOOL sndPlaySoundA(LPCSTR, UINT);
1853 BOOL sndPlaySoundW(LPCWSTR, UINT);
1854 BOOL PlaySoundA(LPCSTR, HMODULE, DWORD);
1855 BOOL PlaySoundW(LPCWSTR, HMODULE, DWORD);
1856 UINT waveOutGetNumDevs();
1857 MMRESULT waveOutGetDevCapsA(UINT_PTR, LPWAVEOUTCAPSA, UINT);
1858 MMRESULT waveOutGetDevCapsW(UINT_PTR, LPWAVEOUTCAPSW, UINT);
1859 MMRESULT waveOutGetVolume(HWAVEOUT, PDWORD);
1860 MMRESULT waveOutSetVolume(HWAVEOUT, DWORD);
1861 MMRESULT waveOutGetErrorTextA(MMRESULT, LPSTR, UINT);
1862 MMRESULT waveOutGetErrorTextW(MMRESULT, LPWSTR, UINT);
1863 MMRESULT waveOutOpen(LPHWAVEOUT, UINT, LPCWAVEFORMATEX, DWORD_PTR, DWORD_PTR, DWORD);
1864 MMRESULT waveOutClose(HWAVEOUT);
1865 MMRESULT waveOutPrepareHeader(HWAVEOUT, LPWAVEHDR, UINT);
1866 MMRESULT waveOutUnprepareHeader(HWAVEOUT, LPWAVEHDR, UINT);
1867 MMRESULT waveOutWrite(HWAVEOUT, LPWAVEHDR, UINT);
1868 MMRESULT waveOutPause(HWAVEOUT);
1869 MMRESULT waveOutRestart(HWAVEOUT);
1870 MMRESULT waveOutReset(HWAVEOUT);
1871 MMRESULT waveOutBreakLoop(HWAVEOUT);
1872 MMRESULT waveOutGetPosition(HWAVEOUT, LPMMTIME, UINT);
1873 MMRESULT waveOutGetPitch(HWAVEOUT, PDWORD);
1874 MMRESULT waveOutSetPitch(HWAVEOUT, DWORD);
1875 MMRESULT waveOutGetPlaybackRate(HWAVEOUT, PDWORD);
1876 MMRESULT waveOutSetPlaybackRate(HWAVEOUT, DWORD);
1877 MMRESULT waveOutGetID(HWAVEOUT, LPUINT);
1878 MMRESULT waveOutMessage(HWAVEOUT, UINT, DWORD_PTR, DWORD_PTR);
1879 UINT waveInGetNumDevs();
1880 MMRESULT waveInGetDevCapsA(UINT_PTR, LPWAVEINCAPSA, UINT);
1881 MMRESULT waveInGetDevCapsW(UINT_PTR, LPWAVEINCAPSW, UINT);
1882 MMRESULT waveInGetErrorTextA(MMRESULT, LPSTR, UINT);
1883 MMRESULT waveInGetErrorTextW(MMRESULT, LPWSTR, UINT);
1884 MMRESULT waveInOpen(LPHWAVEIN, UINT, LPCWAVEFORMATEX, DWORD_PTR, DWORD_PTR, DWORD);
1885 MMRESULT waveInClose(HWAVEIN);
1886 MMRESULT waveInPrepareHeader(HWAVEIN, LPWAVEHDR, UINT);
1887 MMRESULT waveInUnprepareHeader(HWAVEIN, LPWAVEHDR, UINT);
1888 MMRESULT waveInAddBuffer(HWAVEIN, LPWAVEHDR, UINT);
1889 MMRESULT waveInStart(HWAVEIN);
1890 MMRESULT waveInStop(HWAVEIN);
1891 MMRESULT waveInReset(HWAVEIN);
1892 MMRESULT waveInGetPosition(HWAVEIN, LPMMTIME, UINT);
1893 MMRESULT waveInGetID(HWAVEIN, LPUINT);
1894 MMRESULT waveInMessage(HWAVEIN, UINT, DWORD_PTR, DWORD_PTR);
1895 UINT midiOutGetNumDevs();
1896 MMRESULT midiStreamOpen(LPHMIDISTRM, LPUINT, DWORD, DWORD_PTR, DWORD_PTR, DWORD);
1897 MMRESULT midiStreamClose(HMIDISTRM);
1898 MMRESULT midiStreamProperty(HMIDISTRM, LPBYTE, DWORD);
1899 MMRESULT midiStreamPosition(HMIDISTRM, LPMMTIME, UINT);
1900 MMRESULT midiStreamOut(HMIDISTRM, LPMIDIHDR, UINT);
1901 MMRESULT midiStreamPause(HMIDISTRM);
1902 MMRESULT midiStreamRestart(HMIDISTRM);
1903 MMRESULT midiStreamStop(HMIDISTRM);
1904 MMRESULT midiConnect(HMIDI, HMIDIOUT, PVOID);
1905 MMRESULT midiDisconnect(HMIDI, HMIDIOUT, PVOID);
1906 MMRESULT midiOutGetDevCapsA(UINT_PTR, LPMIDIOUTCAPSA, UINT);
1907 MMRESULT midiOutGetDevCapsW(UINT_PTR, LPMIDIOUTCAPSW, UINT);
1908 MMRESULT midiOutGetVolume(HMIDIOUT, PDWORD);
1909 MMRESULT midiOutSetVolume(HMIDIOUT, DWORD);
1910 MMRESULT midiOutGetErrorTextA(MMRESULT, LPSTR, UINT);
1911 MMRESULT midiOutGetErrorTextW(MMRESULT, LPWSTR, UINT);
1912 MMRESULT midiOutOpen(LPHMIDIOUT, UINT, DWORD_PTR, DWORD_PTR, DWORD);
1913 MMRESULT midiOutClose(HMIDIOUT);
1914 MMRESULT midiOutPrepareHeader(HMIDIOUT, LPMIDIHDR, UINT);
1915 MMRESULT midiOutUnprepareHeader(HMIDIOUT, LPMIDIHDR, UINT);
1916 MMRESULT midiOutShortMsg(HMIDIOUT, DWORD);
1917 MMRESULT midiOutLongMsg(HMIDIOUT, LPMIDIHDR, UINT);
1918 MMRESULT midiOutReset(HMIDIOUT);
1919 MMRESULT midiOutCachePatches(HMIDIOUT, UINT, LPWORD, UINT);
1920 MMRESULT midiOutCacheDrumPatches(HMIDIOUT, UINT, LPWORD, UINT);
1921 MMRESULT midiOutGetID(HMIDIOUT, LPUINT);
1922 MMRESULT midiOutMessage(HMIDIOUT, UINT, DWORD_PTR, DWORD_PTR);
1923 UINT midiInGetNumDevs();
1924 MMRESULT midiInGetDevCapsA(UINT_PTR, LPMIDIINCAPSA, UINT);
1925 MMRESULT midiInGetDevCapsW(UINT_PTR, LPMIDIINCAPSW, UINT);
1926 MMRESULT midiInGetErrorTextA(MMRESULT, LPSTR, UINT);
1927 MMRESULT midiInGetErrorTextW(MMRESULT, LPWSTR, UINT);
1928 MMRESULT midiInOpen(LPHMIDIIN, UINT, DWORD_PTR, DWORD_PTR, DWORD);
1929 MMRESULT midiInClose(HMIDIIN);
1930 MMRESULT midiInPrepareHeader(HMIDIIN, LPMIDIHDR, UINT);
1931 MMRESULT midiInUnprepareHeader(HMIDIIN, LPMIDIHDR, UINT);
1932 MMRESULT midiInAddBuffer(HMIDIIN, LPMIDIHDR, UINT);
1933 MMRESULT midiInStart(HMIDIIN);
1934 MMRESULT midiInStop(HMIDIIN);
1935 MMRESULT midiInReset(HMIDIIN);
1936 MMRESULT midiInGetID(HMIDIIN, LPUINT);
1937 MMRESULT midiInMessage(HMIDIIN, UINT, DWORD_PTR, DWORD_PTR);
1938 UINT auxGetNumDevs();
1939 MMRESULT auxGetDevCapsA(UINT_PTR, LPAUXCAPSA, UINT);
1940 MMRESULT auxGetDevCapsW(UINT_PTR, LPAUXCAPSW, UINT);
1941 MMRESULT auxSetVolume(UINT, DWORD);
1942 MMRESULT auxGetVolume(UINT, PDWORD);
1943 MMRESULT auxOutMessage(UINT, UINT, DWORD_PTR, DWORD_PTR);
1944 UINT mixerGetNumDevs();
1945 MMRESULT mixerGetDevCapsA(UINT_PTR, LPMIXERCAPSA, UINT);
1946 MMRESULT mixerGetDevCapsW(UINT_PTR, LPMIXERCAPSW, UINT);
1947 MMRESULT mixerOpen(LPHMIXER, UINT, DWORD_PTR, DWORD_PTR, DWORD);
1948 MMRESULT mixerClose(HMIXER);
1949 DWORD mixerMessage(HMIXER, UINT, DWORD_PTR, DWORD_PTR);
1950 MMRESULT mixerGetLineInfoA(HMIXEROBJ, LPMIXERLINEA, DWORD);
1951 MMRESULT mixerGetLineInfoW(HMIXEROBJ, LPMIXERLINEW, DWORD);
1952 MMRESULT mixerGetID(HMIXEROBJ, PUINT, DWORD);
1953 MMRESULT mixerGetLineControlsA(HMIXEROBJ, LPMIXERLINECONTROLSA, DWORD);
1954 MMRESULT mixerGetLineControlsW(HMIXEROBJ, LPMIXERLINECONTROLSW, DWORD);
1955 MMRESULT mixerGetControlDetailsA(HMIXEROBJ, LPMIXERCONTROLDETAILS, DWORD);
1956 MMRESULT mixerGetControlDetailsW(HMIXEROBJ, LPMIXERCONTROLDETAILS, DWORD);
1957 MMRESULT mixerSetControlDetails(HMIXEROBJ, LPMIXERCONTROLDETAILS, DWORD);
1958 MMRESULT timeGetSystemTime(LPMMTIME, UINT);
1959 DWORD timeGetTime();
1960 MMRESULT timeSetEvent(UINT, UINT, LPTIMECALLBACK, DWORD_PTR, UINT);
1961 MMRESULT timeKillEvent(UINT);
1962 MMRESULT timeGetDevCaps(LPTIMECAPS, UINT);
1963 MMRESULT timeBeginPeriod(UINT);
1964 MMRESULT timeEndPeriod(UINT);
1965 UINT joyGetNumDevs();
1966 MMRESULT joyGetDevCapsA(UINT_PTR, LPJOYCAPSA, UINT);
1967 MMRESULT joyGetDevCapsW(UINT_PTR, LPJOYCAPSW, UINT);
1968 MMRESULT joyGetPos(UINT, LPJOYINFO);
1969 MMRESULT joyGetPosEx(UINT, LPJOYINFOEX);
1970 MMRESULT joyGetThreshold(UINT, LPUINT);
1971 MMRESULT joyReleaseCapture(UINT);
1972 MMRESULT joySetCapture(HWND, UINT, UINT, BOOL);
1973 MMRESULT joySetThreshold(UINT, UINT);
1974 FOURCC mmioStringToFOURCCA(LPCSTR, UINT);
1975 FOURCC mmioStringToFOURCCW(LPCWSTR, UINT);
1976 LPMMIOPROC mmioInstallIOProcA(FOURCC, LPMMIOPROC, DWORD);
1977 LPMMIOPROC mmioInstallIOProcW(FOURCC, LPMMIOPROC, DWORD);
1978 HMMIO mmioOpenA(LPSTR, LPMMIOINFO, DWORD);
1979 HMMIO mmioOpenW(LPWSTR, LPMMIOINFO, DWORD);
1980 MMRESULT mmioRenameA(LPCSTR, LPCSTR, LPCMMIOINFO, DWORD);
1981 MMRESULT mmioRenameW(LPCWSTR, LPCWSTR, LPCMMIOINFO, DWORD);
1982 MMRESULT mmioClose(HMMIO, UINT);
1983 LONG mmioRead(HMMIO, HPSTR, LONG);
1984 LONG mmioWrite(HMMIO, LPCSTR, LONG);
1985 LONG mmioSeek(HMMIO, LONG, int);
1986 MMRESULT mmioGetInfo(HMMIO, LPMMIOINFO, UINT);
1987 MMRESULT mmioSetInfo(HMMIO, LPCMMIOINFO, UINT);
1988 MMRESULT mmioSetBuffer(HMMIO, LPSTR, LONG, UINT);
1989 MMRESULT mmioFlush(HMMIO, UINT);
1990 MMRESULT mmioAdvance(HMMIO, LPMMIOINFO, UINT);
1991 LRESULT mmioSendMessage(HMMIO, UINT, LPARAM, LPARAM);
1992 MMRESULT mmioDescend(HMMIO, LPMMCKINFO, const(MMCKINFO)*, UINT);
1993 MMRESULT mmioAscend(HMMIO, LPMMCKINFO, UINT);
1994 MMRESULT mmioCreateChunk(HMMIO, LPMMCKINFO, UINT);
1995 MCIERROR mciSendCommandA(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR);
1996 MCIERROR mciSendCommandW(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR);
1997 MCIERROR mciSendStringA(LPCSTR, LPSTR, UINT, HWND);
1998 MCIERROR mciSendStringW(LPCWSTR, LPWSTR, UINT, HWND);
1999 MCIDEVICEID mciGetDeviceIDA(LPCSTR);
2000 MCIDEVICEID mciGetDeviceIDW(LPCWSTR);
2001 MCIDEVICEID mciGetDeviceIDFromElementIDA(DWORD, LPCSTR);
2002 MCIDEVICEID mciGetDeviceIDFromElementIDW(DWORD, LPCWSTR);
2003 BOOL mciGetErrorStringA(MCIERROR, LPSTR, UINT);
2004 BOOL mciGetErrorStringW(MCIERROR, LPWSTR, UINT);
2005 BOOL mciSetYieldProc(MCIDEVICEID, YIELDPROC, DWORD);
2006 HTASK mciGetCreatorTask(MCIDEVICEID);
2007 YIELDPROC mciGetYieldProc(MCIDEVICEID, PDWORD);
2008 
2009 struct MCI_SEQ_SET_PARMS {
2010     DWORD_PTR dwCallback;
2011     DWORD dwTimeFormat;
2012     DWORD dwAudio;
2013     DWORD dwTempo;
2014     DWORD dwPort;
2015     DWORD dwSlave;
2016     DWORD dwMaster;
2017     DWORD dwOffset;
2018 }
2019 alias MCI_SEQ_SET_PARMS* PMCI_SEQ_SET_PARMS, LPMCI_SEQ_SET_PARMS;
2020 
2021 struct MCI_ANIM_OPEN_PARMSA {
2022 align(1):
2023     DWORD_PTR dwCallback;
2024     MCIDEVICEID wDeviceID;
2025     LPCSTR lpstrDeviceType;
2026     LPCSTR lpstrElementName;
2027     LPCSTR lpstrAlias;
2028     DWORD dwStyle;
2029     HWND hWndParent;
2030 }
2031 alias MCI_ANIM_OPEN_PARMSA* PMCI_ANIM_OPEN_PARMSA, LPMCI_ANIM_OPEN_PARMSA;
2032 
2033 struct MCI_ANIM_OPEN_PARMSW {
2034 align(1):
2035     DWORD_PTR dwCallback;
2036     MCIDEVICEID wDeviceID;
2037     LPCWSTR lpstrDeviceType;
2038     LPCWSTR lpstrElementName;
2039     LPCWSTR lpstrAlias;
2040     DWORD dwStyle;
2041     HWND hWndParent;
2042 }
2043 alias MCI_ANIM_OPEN_PARMSW* PMCI_ANIM_OPEN_PARMSW, LPMCI_ANIM_OPEN_PARMSW;
2044 
2045 struct MCI_ANIM_PLAY_PARMS {
2046     DWORD_PTR dwCallback;
2047     DWORD dwFrom;
2048     DWORD dwTo;
2049     DWORD dwSpeed;
2050 }
2051 alias MCI_ANIM_PLAY_PARMS* PMCI_ANIM_PLAY_PARMS, LPMCI_ANIM_PLAY_PARMS;
2052 
2053 struct MCI_ANIM_STEP_PARMS {
2054     DWORD_PTR dwCallback;
2055     DWORD dwFrames;
2056 }
2057 alias MCI_ANIM_STEP_PARMS* PMCI_ANIM_STEP_PARMS, LPMCI_ANIM_STEP_PARMS;
2058 
2059 struct MCI_ANIM_WINDOW_PARMSA {
2060 align(1):
2061     DWORD_PTR dwCallback;
2062     HWND hWnd;
2063     UINT nCmdShow;
2064     LPCSTR lpstrText;
2065 }
2066 alias MCI_ANIM_WINDOW_PARMSA* PMCI_ANIM_WINDOW_PARMSA, LPMCI_ANIM_WINDOW_PARMSA;
2067 
2068 struct MCI_ANIM_WINDOW_PARMSW {
2069 align(1):
2070     DWORD_PTR dwCallback;
2071     HWND hWnd;
2072     UINT nCmdShow;
2073     LPCWSTR lpstrText;
2074 }
2075 alias MCI_ANIM_WINDOW_PARMSW* PMCI_ANIM_WINDOW_PARMSW, LPMCI_ANIM_WINDOW_PARMSW;
2076 
2077 struct MCI_ANIM_RECT_PARMS {
2078     DWORD_PTR dwCallback;
2079     //#ifdef MCI_USE_OFFEXT
2080     //  POINT ptOffset;
2081     //  POINT ptExtent;
2082     //#else
2083     RECT rc;
2084     //#endif
2085 }
2086 alias MCI_ANIM_RECT_PARMS* PMCI_ANIM_RECT_PARMS, LPMCI_ANIM_RECT_PARMS;
2087 
2088 struct MCI_ANIM_UPDATE_PARMS {
2089     DWORD_PTR dwCallback;
2090     RECT rc;
2091     HDC hDC;
2092 }
2093 alias MCI_ANIM_UPDATE_PARMS* PMCI_ANIM_UPDATE_PARMS, LPMCI_ANIM_UPDATE_PARMS;
2094 
2095 struct MCI_OVLY_OPEN_PARMSA {
2096 align(1):
2097     DWORD_PTR dwCallback;
2098     MCIDEVICEID wDeviceID;
2099     LPCSTR lpstrDeviceType;
2100     LPCSTR lpstrElementName;
2101     LPCSTR lpstrAlias;
2102     DWORD dwStyle;
2103     HWND hWndParent;
2104 }
2105 alias MCI_OVLY_OPEN_PARMSA* PMCI_OVLY_OPEN_PARMSA, LPMCI_OVLY_OPEN_PARMSA;
2106 
2107 struct MCI_OVLY_OPEN_PARMSW {
2108 align(1):
2109     DWORD_PTR dwCallback;
2110     MCIDEVICEID wDeviceID;
2111     LPCWSTR lpstrDeviceType;
2112     LPCWSTR lpstrElementName;
2113     LPCWSTR lpstrAlias;
2114     DWORD dwStyle;
2115     HWND hWndParent;
2116 }
2117 alias MCI_OVLY_OPEN_PARMSW* PMCI_OVLY_OPEN_PARMSW, LPMCI_OVLY_OPEN_PARMSW;
2118 
2119 struct MCI_OVLY_WINDOW_PARMSA {
2120 align(1):
2121     DWORD_PTR dwCallback;
2122     HWND hWnd;
2123     UINT nCmdShow;
2124     LPCSTR lpstrText;
2125 }
2126 alias MCI_OVLY_WINDOW_PARMSA* PMCI_OVLY_WINDOW_PARMSA, LPMCI_OVLY_WINDOW_PARMSA;
2127 
2128 struct MCI_OVLY_WINDOW_PARMSW {
2129 align(1):
2130     DWORD_PTR dwCallback;
2131     HWND hWnd;
2132     UINT nCmdShow;
2133     LPCWSTR lpstrText;
2134 }
2135 alias MCI_OVLY_WINDOW_PARMSW* PMCI_OVLY_WINDOW_PARMSW, LPMCI_OVLY_WINDOW_PARMSW;
2136 
2137 struct MCI_OVLY_RECT_PARMS {
2138     DWORD_PTR dwCallback;
2139     //#ifdef MCI_USE_OFFEXT
2140     //  POINT ptOffset;
2141     //  POINT ptExtent;
2142     //#else
2143     RECT rc;
2144     //#endif
2145 }
2146 alias MCI_OVLY_RECT_PARMS* PMCI_OVLY_RECT_PARMS, LPMCI_OVLY_RECT_PARMS;
2147 
2148 struct MCI_OVLY_SAVE_PARMSA {
2149     DWORD_PTR dwCallback;
2150     LPCSTR lpfilename;
2151     RECT rc;
2152 }
2153 alias MCI_OVLY_SAVE_PARMSA* PMCI_OVLY_SAVE_PARMSA, LPMCI_OVLY_SAVE_PARMSA;
2154 
2155 struct MCI_OVLY_SAVE_PARMSW {
2156     DWORD_PTR dwCallback;
2157     LPCWSTR lpfilename;
2158     RECT rc;
2159 }
2160 alias MCI_OVLY_SAVE_PARMSW* PMCI_OVLY_SAVE_PARMSW, LPMCI_OVLY_SAVE_PARMSW;
2161 
2162 struct MCI_OVLY_LOAD_PARMSA {
2163     DWORD_PTR dwCallback;
2164     LPCSTR lpfilename;
2165     RECT rc;
2166 }
2167 alias MCI_OVLY_LOAD_PARMSA* PMCI_OVLY_LOAD_PARMSA, LPMCI_OVLY_LOAD_PARMSA;
2168 
2169 struct MCI_OVLY_LOAD_PARMSW {
2170     DWORD_PTR dwCallback;
2171     LPCWSTR lpfilename;
2172     RECT rc;
2173 }
2174 alias MCI_OVLY_LOAD_PARMSW* PMCI_OVLY_LOAD_PARMSW, LPMCI_OVLY_LOAD_PARMSW;
2175 
2176 version (Unicode) {
2177     alias WAVEOUTCAPSW WAVEOUTCAPS;
2178     alias WAVEINCAPSW WAVEINCAPS;
2179     alias MIDIOUTCAPSW MIDIOUTCAPS;
2180     alias MIDIINCAPSW MIDIINCAPS;
2181     alias AUXCAPSW AUXCAPS;
2182     alias MIXERCAPSW MIXERCAPS;
2183     alias MIXERLINEW MIXERLINE;
2184     alias MIXERCONTROLA MIXERCONTROL;
2185     alias MIXERLINECONTROLSW MIXERLINECONTROLS;
2186     alias MIXERCONTROLDETAILS_LISTTEXTW MIXERCONTROLDETAILS_LISTTEXT;
2187     alias JOYCAPSW JOYCAPS;
2188     alias MCI_OPEN_PARMSW MCI_OPEN_PARMS;
2189     alias MCI_INFO_PARMSW MCI_INFO_PARMS;
2190     alias MCI_SYSINFO_PARMSW MCI_SYSINFO_PARMS;
2191     alias MCI_SAVE_PARMSW MCI_SAVE_PARMS;
2192     alias MCI_LOAD_PARMSW MCI_LOAD_PARMS;
2193     alias MCI_VD_ESCAPE_PARMSW MCI_VD_ESCAPE_PARMS;
2194     alias MCI_WAVE_OPEN_PARMSW MCI_WAVE_OPEN_PARMS;
2195     alias MCI_ANIM_OPEN_PARMSW MCI_ANIM_OPEN_PARMS;
2196     alias MCI_ANIM_WINDOW_PARMSW MCI_ANIM_WINDOW_PARMS;
2197     alias MCI_OVLY_OPEN_PARMSW MCI_OVLY_OPEN_PARMS;
2198     alias MCI_OVLY_WINDOW_PARMSW MCI_OVLY_WINDOW_PARMS;
2199     alias MCI_OVLY_SAVE_PARMSW MCI_OVLY_SAVE_PARMS;
2200 
2201     alias sndPlaySoundW sndPlaySound;
2202     alias PlaySoundW PlaySound;
2203     alias waveOutGetDevCapsW waveOutGetDevCaps;
2204     alias waveOutGetErrorTextW waveOutGetErrorText;
2205     alias waveInGetDevCapsW waveInGetDevCaps;
2206     alias waveInGetErrorTextW waveInGetErrorText;
2207     alias midiOutGetDevCapsW midiOutGetDevCaps;
2208     alias midiOutGetErrorTextW midiOutGetErrorText;
2209     alias midiInGetDevCapsW midiInGetDevCaps;
2210     alias midiInGetErrorTextW midiInGetErrorText;
2211     alias auxGetDevCapsW auxGetDevCaps;
2212     alias mixerGetDevCapsW mixerGetDevCaps;
2213     alias mixerGetLineInfoW mixerGetLineInfo;
2214     alias mixerGetLineControlsW mixerGetLineControls;
2215     alias mixerGetControlDetailsW mixerGetControlDetails;
2216     alias joyGetDevCapsW joyGetDevCaps;
2217     alias mmioInstallIOProcW mmioInstallIOProc;
2218     alias mmioStringToFOURCCW mmioStringToFOURCC;
2219     alias mmioOpenW mmioOpen;
2220     alias mmioRenameW mmioRename;
2221     alias mciSendCommandW mciSendCommand;
2222     alias mciSendStringW mciSendString;
2223     alias mciGetDeviceIDW mciGetDeviceID;
2224     alias mciGetDeviceIDFromElementIDW mciGetDeviceIDFromElementID;
2225     alias mciGetErrorStringW mciGetErrorString;
2226 
2227 } else {
2228     alias WAVEOUTCAPSA WAVEOUTCAPS;
2229     alias WAVEINCAPSA WAVEINCAPS;
2230     alias MIDIOUTCAPSA MIDIOUTCAPS;
2231     alias MIDIINCAPSA MIDIINCAPS;
2232     alias AUXCAPSA AUXCAPS;
2233     alias MIXERCAPSA MIXERCAPS;
2234     alias MIXERLINEA MIXERLINE;
2235     alias MIXERCONTROLA MIXERCONTROL;
2236     alias MIXERLINECONTROLSA MIXERLINECONTROLS;
2237     alias MIXERCONTROLDETAILS_LISTTEXTA MIXERCONTROLDETAILS_LISTTEXT;
2238     alias JOYCAPSA JOYCAPS;
2239     alias MCI_OPEN_PARMSA MCI_OPEN_PARMS;
2240     alias MCI_INFO_PARMSA MCI_INFO_PARMS;
2241     alias MCI_SYSINFO_PARMSA MCI_SYSINFO_PARMS;
2242     alias MCI_SAVE_PARMSA MCI_SAVE_PARMS;
2243     alias MCI_LOAD_PARMSA MCI_LOAD_PARMS;
2244     alias MCI_VD_ESCAPE_PARMSA MCI_VD_ESCAPE_PARMS;
2245     alias MCI_WAVE_OPEN_PARMSA MCI_WAVE_OPEN_PARMS;
2246     alias MCI_ANIM_OPEN_PARMSA MCI_ANIM_OPEN_PARMS;
2247     alias MCI_ANIM_WINDOW_PARMSA MCI_ANIM_WINDOW_PARMS;
2248     alias MCI_OVLY_OPEN_PARMSA MCI_OVLY_OPEN_PARMS;
2249     alias MCI_OVLY_WINDOW_PARMSA MCI_OVLY_WINDOW_PARMS;
2250     alias MCI_OVLY_SAVE_PARMSA MCI_OVLY_SAVE_PARMS;
2251 
2252     alias sndPlaySoundA sndPlaySound;
2253     alias PlaySoundA PlaySound;
2254     alias waveOutGetDevCapsA waveOutGetDevCaps;
2255     alias waveOutGetErrorTextA waveOutGetErrorText;
2256     alias waveInGetDevCapsA waveInGetDevCaps;
2257     alias waveInGetErrorTextA waveInGetErrorText;
2258     alias midiOutGetDevCapsA midiOutGetDevCaps;
2259     alias midiOutGetErrorTextA midiOutGetErrorText;
2260     alias midiInGetDevCapsA midiInGetDevCaps;
2261     alias midiInGetErrorTextA midiInGetErrorText;
2262     alias auxGetDevCapsA auxGetDevCaps;
2263     alias mixerGetDevCapsA mixerGetDevCaps;
2264     alias mixerGetLineInfoA mixerGetLineInfo;
2265     alias mixerGetLineControlsA mixerGetLineControls;
2266     alias mixerGetControlDetailsA mixerGetControlDetails;
2267     alias joyGetDevCapsA joyGetDevCaps;
2268     alias mmioInstallIOProcA mmioInstallIOProc;
2269     alias mmioStringToFOURCCA mmioStringToFOURCC;
2270     alias mmioOpenA mmioOpen;
2271     alias mmioRenameA mmioRename;
2272     alias mciSendCommandA mciSendCommand;
2273     alias mciSendStringA mciSendString;
2274     alias mciGetDeviceIDA mciGetDeviceID;
2275     alias mciGetDeviceIDFromElementIDA mciGetDeviceIDFromElementID;
2276     alias mciGetErrorStringA mciGetErrorString;
2277 }
2278 
2279 alias WAVEOUTCAPS* PWAVEOUTCAPS, LPWAVEOUTCAPS;
2280 alias WAVEINCAPS* PWAVEINCAPS, LPWAVEINCAPS;
2281 alias MIDIOUTCAPS* PMIDIOUTCAPS, LPMIDIOUTCAPS;
2282 alias MIDIINCAPS* PMIDIINCAPS, LPMIDIINCAPS;
2283 alias AUXCAPS* PAUXCAPS, LPAUXCAPS;
2284 alias MIXERCAPS* PMIXERCAPS, LPMIXERCAPS;
2285 alias MIXERLINE* PMIXERLINE, LPMIXERLINE;
2286 alias MIXERCONTROL* PMIXERCONTROL, LPMIXERCONTROL;
2287 alias MIXERLINECONTROLS* PMIXERLINECONTROLS, LPMIXERLINECONTROLS;
2288 alias MIXERCONTROLDETAILS_LISTTEXT* PMIXERCONTROLDETAILS_LISTTEXT, LPMIXERCONTROLDETAILS_LISTTEXT;
2289 alias JOYCAPS* PJOYCAPS, LPJOYCAPS;
2290 alias MCI_OPEN_PARMS* PMCI_OPEN_PARMS, LPMCI_OPEN_PARMS;
2291 alias MCI_INFO_PARMS* LPMCI_INFO_PARMS;
2292 alias MCI_SYSINFO_PARMS* PMCI_SYSINFO_PARMS, LPMCI_SYSINFO_PARMS;
2293 alias MCI_SAVE_PARMS* PMCI_SAVE_PARMS, LPMCI_SAVE_PARMS;
2294 alias MCI_LOAD_PARMS* PMCI_LOAD_PARMS, LPMCI_LOAD_PARMS;
2295 alias MCI_VD_ESCAPE_PARMS* PMCI_VD_ESCAPE_PARMS, LPMCI_VD_ESCAPE_PARMS;
2296 alias MCI_WAVE_OPEN_PARMS* PMCI_WAVE_OPEN_PARMS, LPMCI_WAVE_OPEN_PARMS;
2297 alias MCI_ANIM_OPEN_PARMS* PMCI_ANIM_OPEN_PARMS, LPMCI_ANIM_OPEN_PARMS;
2298 alias MCI_ANIM_WINDOW_PARMS* PMCI_ANIM_WINDOW_PARMS, LPMCI_ANIM_WINDOW_PARMS;
2299 alias MCI_OVLY_OPEN_PARMS* PMCI_OVLY_OPEN_PARMS, LPMCI_OVLY_OPEN_PARMS;
2300 alias MCI_OVLY_WINDOW_PARMS* PMCI_OVLY_WINDOW_PARMS, LPMCI_OVLY_WINDOW_PARMS;
2301 alias MCI_OVLY_SAVE_PARMS* PMCI_OVLY_SAVE_PARMS, LPMCI_OVLY_SAVE_PARMS;