1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 use shared::basetsd::{DWORD_PTR, UINT_PTR};
7 use shared::minwindef::{DWORD, LPBYTE, LPDWORD, LPWORD, PDWORD, UINT};
8 use um::imm::LPUINT;
9 use um::mmsystem::{
10     HMIDI, HMIDIIN, HMIDIOUT, HMIDISTRM, HWAVEIN, HWAVEOUT, LPCWAVEFORMATEX, LPHMIDIIN, LPHMIDIOUT,
11     LPHMIDISTRM, LPHWAVEIN, LPHWAVEOUT, LPMIDIHDR, LPMIDIINCAPSW, LPMIDIOUTCAPSW, LPMMTIME,
12     LPWAVEHDR, LPWAVEINCAPSW, LPWAVEOUTCAPSW, MMRESULT
13 };
14 use um::winnt::{LPWSTR, PVOID};
15 extern "system" {
waveOutGetNumDevs() -> UINT16     pub fn waveOutGetNumDevs() -> UINT;
17     // pub fn waveOutGetDevCapsA();
waveOutGetDevCapsW( uDeviceID: UINT_PTR, pwoc: LPWAVEOUTCAPSW, cbwoc: UINT, ) -> MMRESULT18     pub fn waveOutGetDevCapsW(
19         uDeviceID: UINT_PTR,
20         pwoc: LPWAVEOUTCAPSW,
21         cbwoc: UINT,
22     ) -> MMRESULT;
waveOutGetVolume( hwo: HWAVEOUT, pdwVolume: LPDWORD, ) -> MMRESULT23     pub fn waveOutGetVolume(
24         hwo: HWAVEOUT,
25         pdwVolume: LPDWORD,
26     ) -> MMRESULT;
waveOutSetVolume( hwo: HWAVEOUT, dwVolume: DWORD, ) -> MMRESULT27     pub fn waveOutSetVolume(
28         hwo: HWAVEOUT,
29         dwVolume: DWORD,
30     ) -> MMRESULT;
31     // pub fn waveOutGetErrorTextA();
waveOutGetErrorTextW( mmrError: MMRESULT, pszText: LPWSTR, cchText: UINT, ) -> MMRESULT32     pub fn waveOutGetErrorTextW(
33         mmrError: MMRESULT,
34         pszText: LPWSTR,
35         cchText: UINT,
36     ) -> MMRESULT;
waveOutOpen( phwo: LPHWAVEOUT, uDeviceID: UINT, pwfx: LPCWAVEFORMATEX, dwCallback: DWORD_PTR, dwInstance: DWORD_PTR, fdwOpen: DWORD, ) -> MMRESULT37     pub fn waveOutOpen(
38         phwo: LPHWAVEOUT,
39         uDeviceID: UINT,
40         pwfx: LPCWAVEFORMATEX,
41         dwCallback: DWORD_PTR,
42         dwInstance: DWORD_PTR,
43         fdwOpen: DWORD,
44     ) -> MMRESULT;
waveOutClose( hwo: HWAVEOUT, ) -> MMRESULT45     pub fn waveOutClose(
46         hwo: HWAVEOUT,
47     ) -> MMRESULT;
waveOutPrepareHeader( hwo: HWAVEOUT, pwh: LPWAVEHDR, cbwh: UINT, ) -> MMRESULT48     pub fn waveOutPrepareHeader(
49         hwo: HWAVEOUT,
50         pwh: LPWAVEHDR,
51         cbwh: UINT,
52     ) -> MMRESULT;
waveOutUnprepareHeader( hwo: HWAVEOUT, pwh: LPWAVEHDR, cbwh: UINT, ) -> MMRESULT53     pub fn waveOutUnprepareHeader(
54         hwo: HWAVEOUT,
55         pwh: LPWAVEHDR,
56         cbwh: UINT,
57     ) -> MMRESULT;
waveOutWrite( hwo: HWAVEOUT, pwh: LPWAVEHDR, cbwh: UINT, ) -> MMRESULT58     pub fn waveOutWrite(
59         hwo: HWAVEOUT,
60         pwh: LPWAVEHDR,
61         cbwh: UINT,
62     ) -> MMRESULT;
waveOutPause( hwo: HWAVEOUT, ) -> MMRESULT63     pub fn waveOutPause(
64         hwo: HWAVEOUT,
65     ) -> MMRESULT;
waveOutRestart( hwo: HWAVEOUT, ) -> MMRESULT66     pub fn waveOutRestart(
67         hwo: HWAVEOUT,
68     ) -> MMRESULT;
waveOutReset( hwo: HWAVEOUT, ) -> MMRESULT69     pub fn waveOutReset(
70         hwo: HWAVEOUT,
71     ) -> MMRESULT;
waveOutBreakLoop( hwo: HWAVEOUT, ) -> MMRESULT72     pub fn waveOutBreakLoop(
73         hwo: HWAVEOUT,
74     ) -> MMRESULT;
waveOutGetPosition( hwo: HWAVEOUT, pmmt: LPMMTIME, cbmmt: UINT, ) -> MMRESULT75     pub fn waveOutGetPosition(
76         hwo: HWAVEOUT,
77         pmmt: LPMMTIME,
78         cbmmt: UINT,
79     ) -> MMRESULT;
waveOutGetPitch( hwo: HWAVEOUT, pdwPitch: LPDWORD, ) -> MMRESULT80     pub fn waveOutGetPitch(
81         hwo: HWAVEOUT,
82         pdwPitch: LPDWORD,
83     ) -> MMRESULT;
waveOutSetPitch( hwo: HWAVEOUT, dwPitch: DWORD, ) -> MMRESULT84     pub fn waveOutSetPitch(
85         hwo: HWAVEOUT,
86         dwPitch: DWORD,
87     ) -> MMRESULT;
waveOutGetPlaybackRate( hwo: HWAVEOUT, pdwRate: LPDWORD, ) -> MMRESULT88     pub fn waveOutGetPlaybackRate(
89         hwo: HWAVEOUT,
90         pdwRate: LPDWORD,
91     ) -> MMRESULT;
waveOutSetPlaybackRate( hwo: HWAVEOUT, dwRate: DWORD, ) -> MMRESULT92     pub fn waveOutSetPlaybackRate(
93         hwo: HWAVEOUT,
94         dwRate: DWORD,
95     ) -> MMRESULT;
96     // pub fn waveOutGetID();
waveOutMessage( hwo: HWAVEOUT, uMsg: UINT, dw1: DWORD_PTR, dw2: DWORD_PTR, ) -> MMRESULT97     pub fn waveOutMessage(
98         hwo: HWAVEOUT,
99         uMsg: UINT,
100         dw1: DWORD_PTR,
101         dw2: DWORD_PTR,
102     ) -> MMRESULT;
waveInGetNumDevs() -> UINT103     pub fn waveInGetNumDevs() -> UINT;
104     // pub fn waveInGetDevCapsA();
waveInGetDevCapsW( uDeviceID: UINT_PTR, pwic: LPWAVEINCAPSW, cbwic: UINT, ) -> MMRESULT105     pub fn waveInGetDevCapsW(
106         uDeviceID: UINT_PTR,
107         pwic: LPWAVEINCAPSW,
108         cbwic: UINT,
109     ) -> MMRESULT;
110     // pub fn waveInGetErrorTextA();
waveInGetErrorTextW( mmrError: MMRESULT, pszText: LPWSTR, cchText: UINT, ) -> MMRESULT111     pub fn waveInGetErrorTextW(
112         mmrError: MMRESULT,
113         pszText: LPWSTR,
114         cchText: UINT,
115     ) -> MMRESULT;
waveInOpen( phwi: LPHWAVEIN, uDeviceID: UINT, pwfx: LPCWAVEFORMATEX, dwCallback: DWORD_PTR, dwInstance: DWORD_PTR, fdwOpen: DWORD, ) -> MMRESULT116     pub fn waveInOpen(
117         phwi: LPHWAVEIN,
118         uDeviceID: UINT,
119         pwfx: LPCWAVEFORMATEX,
120         dwCallback: DWORD_PTR,
121         dwInstance: DWORD_PTR,
122         fdwOpen: DWORD,
123     ) -> MMRESULT;
waveInClose( hwi: HWAVEIN, ) -> MMRESULT124     pub fn waveInClose(
125         hwi: HWAVEIN,
126     ) -> MMRESULT;
waveInPrepareHeader( hwi: HWAVEIN, pwh: LPWAVEHDR, cbwh: UINT, ) -> MMRESULT127     pub fn waveInPrepareHeader(
128         hwi: HWAVEIN,
129         pwh: LPWAVEHDR,
130         cbwh: UINT,
131     ) -> MMRESULT;
waveInUnprepareHeader( hwi: HWAVEIN, pwh: LPWAVEHDR, cbwh: UINT, ) -> MMRESULT132     pub fn waveInUnprepareHeader(
133         hwi: HWAVEIN,
134         pwh: LPWAVEHDR,
135         cbwh: UINT,
136     ) -> MMRESULT;
waveInAddBuffer( hwi: HWAVEIN, pwh: LPWAVEHDR, cbwh: UINT, ) -> MMRESULT137     pub fn waveInAddBuffer(
138         hwi: HWAVEIN,
139         pwh: LPWAVEHDR,
140         cbwh: UINT,
141     ) -> MMRESULT;
waveInStart( hwi: HWAVEIN, ) -> MMRESULT142     pub fn waveInStart(
143         hwi: HWAVEIN,
144     ) -> MMRESULT;
waveInStop( hwi: HWAVEIN, ) -> MMRESULT145     pub fn waveInStop(
146         hwi: HWAVEIN,
147     ) -> MMRESULT;
waveInReset( hwi: HWAVEIN, ) -> MMRESULT148     pub fn waveInReset(
149         hwi: HWAVEIN,
150     ) -> MMRESULT;
waveInGetPosition( hwi: HWAVEIN, pmmt: LPMMTIME, cbmmt: UINT, ) -> MMRESULT151     pub fn waveInGetPosition(
152         hwi: HWAVEIN,
153         pmmt: LPMMTIME,
154         cbmmt: UINT,
155     ) -> MMRESULT;
156     // pub fn waveInGetID();
waveInMessage( hwi: HWAVEIN, uMsg: UINT, dw1: DWORD_PTR, dw2: DWORD_PTR, ) -> MMRESULT157     pub fn waveInMessage(
158         hwi: HWAVEIN,
159         uMsg: UINT,
160         dw1: DWORD_PTR,
161         dw2: DWORD_PTR,
162     ) -> MMRESULT;
midiOutGetNumDevs() -> UINT163     pub fn midiOutGetNumDevs() -> UINT;
midiStreamOpen( lphStream: LPHMIDISTRM, puDeviceID: LPUINT, cMidi: DWORD, dwCallback: DWORD_PTR, dwInstance: DWORD_PTR, fdwOpen: DWORD, ) -> MMRESULT164     pub fn midiStreamOpen(
165         lphStream: LPHMIDISTRM,
166         puDeviceID: LPUINT,
167         cMidi: DWORD,
168         dwCallback: DWORD_PTR,
169         dwInstance: DWORD_PTR,
170         fdwOpen: DWORD,
171     ) -> MMRESULT;
midiStreamClose( hStream: HMIDISTRM, ) -> MMRESULT172     pub fn midiStreamClose(
173         hStream: HMIDISTRM,
174     ) -> MMRESULT;
midiStreamProperty( hm: HMIDISTRM, lppropdata: LPBYTE, dwProperty: DWORD, ) -> MMRESULT175     pub fn midiStreamProperty(
176         hm: HMIDISTRM,
177         lppropdata: LPBYTE,
178         dwProperty: DWORD,
179     ) -> MMRESULT;
midiStreamPosition( hms: HMIDISTRM, pmmt: LPMMTIME, cbmmt: UINT, ) -> MMRESULT180     pub fn midiStreamPosition(
181         hms: HMIDISTRM,
182         pmmt: LPMMTIME,
183         cbmmt: UINT,
184     ) -> MMRESULT;
midiStreamOut( hMidiStream: HMIDISTRM, lpMidiHdr: LPMIDIHDR, cbMidiHdr: UINT, ) -> MMRESULT185     pub fn midiStreamOut(
186         hMidiStream: HMIDISTRM,
187         lpMidiHdr: LPMIDIHDR,
188         cbMidiHdr: UINT,
189     ) -> MMRESULT;
midiStreamPause( hms: HMIDISTRM, ) -> MMRESULT190     pub fn midiStreamPause(
191         hms: HMIDISTRM,
192     ) -> MMRESULT;
midiStreamRestart( hms: HMIDISTRM, ) -> MMRESULT193     pub fn midiStreamRestart(
194         hms: HMIDISTRM,
195     ) -> MMRESULT;
midiStreamStop( hms: HMIDISTRM, ) -> MMRESULT196     pub fn midiStreamStop(
197         hms: HMIDISTRM,
198     ) -> MMRESULT;
midiConnect( hMidi: HMIDI, hmo: HMIDIOUT, pReserved: PVOID, ) -> MMRESULT199     pub fn midiConnect(
200         hMidi: HMIDI,
201         hmo: HMIDIOUT,
202         pReserved: PVOID,
203     ) -> MMRESULT;
midiDisconnect( hMidi: HMIDI, hmo: HMIDIOUT, pReserved: PVOID, ) -> MMRESULT204     pub fn midiDisconnect(
205         hMidi: HMIDI,
206         hmo: HMIDIOUT,
207         pReserved: PVOID,
208     ) -> MMRESULT;
midiOutGetDevCapsW( uDeviceID: UINT_PTR, lpMidiOutCaps: LPMIDIOUTCAPSW, cbMidiOutCaps: UINT, ) -> MMRESULT209     pub fn midiOutGetDevCapsW(
210         uDeviceID: UINT_PTR,
211         lpMidiOutCaps: LPMIDIOUTCAPSW,
212         cbMidiOutCaps: UINT,
213     ) -> MMRESULT;
midiOutGetVolume( hmo: HMIDIOUT, lpdwVolume: PDWORD, ) -> MMRESULT214     pub fn midiOutGetVolume(
215         hmo: HMIDIOUT,
216         lpdwVolume: PDWORD,
217     ) -> MMRESULT;
midiOutSetVolume( hmo: HMIDIOUT, dwVolume: DWORD, ) -> MMRESULT218     pub fn midiOutSetVolume(
219         hmo: HMIDIOUT,
220         dwVolume: DWORD,
221     ) -> MMRESULT;
midiOutGetErrorTextW( mmrError: MMRESULT, lpText: LPWSTR, cchText: UINT, ) -> MMRESULT222     pub fn midiOutGetErrorTextW(
223         mmrError: MMRESULT,
224         lpText: LPWSTR,
225         cchText: UINT,
226     ) -> MMRESULT;
midiOutOpen( lphmo: LPHMIDIOUT, uDeviceID: UINT, dwCallback: DWORD_PTR, dwCallbackInstance: DWORD_PTR, dwFlags: DWORD, ) -> MMRESULT227     pub fn midiOutOpen(
228         lphmo: LPHMIDIOUT,
229         uDeviceID: UINT,
230         dwCallback: DWORD_PTR,
231         dwCallbackInstance: DWORD_PTR,
232         dwFlags: DWORD,
233     ) -> MMRESULT;
midiOutClose( hmo: HMIDIOUT, ) -> MMRESULT234     pub fn midiOutClose(
235         hmo: HMIDIOUT,
236     ) -> MMRESULT;
midiOutPrepareHeader( hmo: HMIDIOUT, lpMidiOutHdr: LPMIDIHDR, cbMidiOutHdr: UINT, ) -> MMRESULT237     pub fn midiOutPrepareHeader(
238         hmo: HMIDIOUT,
239         lpMidiOutHdr: LPMIDIHDR,
240         cbMidiOutHdr: UINT,
241     ) -> MMRESULT;
midiOutUnprepareHeader( hmo: HMIDIOUT, lpMidiOutHdr: LPMIDIHDR, cbMidiOutHdr: UINT, ) -> MMRESULT242     pub fn midiOutUnprepareHeader(
243         hmo: HMIDIOUT,
244         lpMidiOutHdr: LPMIDIHDR,
245         cbMidiOutHdr: UINT,
246     ) -> MMRESULT;
midiOutShortMsg( hmo: HMIDIOUT, dwMsg: DWORD, ) -> MMRESULT247     pub fn midiOutShortMsg(
248         hmo: HMIDIOUT,
249         dwMsg: DWORD,
250     ) -> MMRESULT;
midiOutLongMsg( hmo: HMIDIOUT, lpMidiOutHdr: LPMIDIHDR, cbMidiOutHdr: UINT, ) -> MMRESULT251     pub fn midiOutLongMsg(
252         hmo: HMIDIOUT,
253         lpMidiOutHdr: LPMIDIHDR,
254         cbMidiOutHdr: UINT,
255     ) -> MMRESULT;
midiOutReset( hmo: HMIDIOUT, ) -> MMRESULT256     pub fn midiOutReset(
257         hmo: HMIDIOUT,
258     ) -> MMRESULT;
midiOutCachePatches( hmo: HMIDIOUT, wBank: UINT, lpPatchArray: LPWORD, wFlags: UINT, ) -> MMRESULT259     pub fn midiOutCachePatches(
260         hmo: HMIDIOUT,
261         wBank: UINT,
262         lpPatchArray: LPWORD,
263         wFlags: UINT,
264     ) -> MMRESULT;
midiOutCacheDrumPatches( hmo: HMIDIOUT, wPatch: UINT, lpKeyArray: LPWORD, wFlags: UINT, ) -> MMRESULT265     pub fn midiOutCacheDrumPatches(
266         hmo: HMIDIOUT,
267         wPatch: UINT,
268         lpKeyArray: LPWORD,
269         wFlags: UINT,
270     ) -> MMRESULT;
midiOutGetID( hmo: HMIDIOUT, puDeviceID: LPUINT, ) -> MMRESULT271     pub fn midiOutGetID(
272         hmo: HMIDIOUT,
273         puDeviceID: LPUINT,
274     ) -> MMRESULT;
midiOutMessage( deviceID: HMIDIOUT, msg: UINT, dw1: DWORD_PTR, dw2: DWORD_PTR, ) -> MMRESULT275     pub fn midiOutMessage(
276         deviceID: HMIDIOUT,
277         msg: UINT,
278         dw1: DWORD_PTR,
279         dw2: DWORD_PTR,
280     ) -> MMRESULT;
midiInGetNumDevs() -> UINT281     pub fn midiInGetNumDevs() -> UINT;
midiInGetDevCapsW( uDeviceID: UINT_PTR, lpMidiInCaps: LPMIDIINCAPSW, cbMidiInCaps: UINT, ) -> MMRESULT282     pub fn midiInGetDevCapsW(
283         uDeviceID: UINT_PTR,
284         lpMidiInCaps: LPMIDIINCAPSW,
285         cbMidiInCaps: UINT,
286     ) -> MMRESULT;
midiInGetErrorTextW( wError: MMRESULT, lpText: LPWSTR, cchText: UINT, ) -> MMRESULT287     pub fn midiInGetErrorTextW(
288         wError: MMRESULT,
289         lpText: LPWSTR,
290         cchText: UINT,
291     ) -> MMRESULT;
midiInOpen( lphMidiIn: LPHMIDIIN, uDeviceID: UINT, dwCallback: DWORD_PTR, dwCallbackInstance: DWORD_PTR, dwFlags: DWORD, ) -> MMRESULT292     pub fn midiInOpen(
293         lphMidiIn: LPHMIDIIN,
294         uDeviceID: UINT,
295         dwCallback: DWORD_PTR,
296         dwCallbackInstance: DWORD_PTR,
297         dwFlags: DWORD,
298     ) -> MMRESULT;
midiInClose( hMidiIn: HMIDIIN, ) -> MMRESULT299     pub fn midiInClose(
300         hMidiIn: HMIDIIN,
301     ) -> MMRESULT;
midiInPrepareHeader( hMidiIn: HMIDIIN, lpMidiInHdr: LPMIDIHDR, cbMidiInHdr: UINT, ) -> MMRESULT302     pub fn midiInPrepareHeader(
303         hMidiIn: HMIDIIN,
304         lpMidiInHdr: LPMIDIHDR,
305         cbMidiInHdr: UINT,
306     ) -> MMRESULT;
midiInUnprepareHeader( hMidiIn: HMIDIIN, lpMidiInHdr: LPMIDIHDR, cbMidiInHdr: UINT, ) -> MMRESULT307     pub fn midiInUnprepareHeader(
308         hMidiIn: HMIDIIN,
309         lpMidiInHdr: LPMIDIHDR,
310         cbMidiInHdr: UINT,
311     ) -> MMRESULT;
midiInAddBuffer( hMidiIn: HMIDIIN, lpMidiInHdr: LPMIDIHDR, cbMidiInHdr: UINT, ) -> MMRESULT312     pub fn midiInAddBuffer(
313         hMidiIn: HMIDIIN,
314         lpMidiInHdr: LPMIDIHDR,
315         cbMidiInHdr: UINT,
316     ) -> MMRESULT;
midiInStart( hMidiIn: HMIDIIN, ) -> MMRESULT317     pub fn midiInStart(
318         hMidiIn: HMIDIIN,
319     ) -> MMRESULT;
midiInStop( hMidiIn: HMIDIIN, ) -> MMRESULT320     pub fn midiInStop(
321         hMidiIn: HMIDIIN,
322     ) -> MMRESULT;
midiInReset( hMidiIn: HMIDIIN, ) -> MMRESULT323     pub fn midiInReset(
324         hMidiIn: HMIDIIN,
325     ) -> MMRESULT;
midiInGetID( hmi: HMIDIIN, puDeviceID: LPUINT, ) -> MMRESULT326     pub fn midiInGetID(
327         hmi: HMIDIIN,
328         puDeviceID: LPUINT,
329     ) -> MMRESULT;
midiInMessage( deviceID: HMIDIIN, msg: UINT, dw1: DWORD_PTR, dw2: DWORD_PTR, ) -> MMRESULT330     pub fn midiInMessage(
331         deviceID: HMIDIIN,
332         msg: UINT,
333         dw1: DWORD_PTR,
334         dw2: DWORD_PTR,
335     ) -> MMRESULT;
336 }
337