1 // Copyright © 2017 winapi-rs developers
2 // Licensed under the Apache License, Version 2.0
3 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
4 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
5 // All files in the project carrying such notice may not be copied, modified, or distributed
6 // except according to those terms.
7 use shared::basetsd::{DWORD_PTR, UINT_PTR};
8 use shared::minwindef::{DWORD, LPBYTE, LPDWORD, LPWORD, PDWORD, UINT};
9 use um::imm::LPUINT;
10 use um::mmsystem::{
11     HMIDI, HMIDIIN, HMIDIOUT, HMIDISTRM, HWAVEIN, HWAVEOUT, LPCWAVEFORMATEX, LPHMIDIIN, LPHMIDIOUT,
12     LPHMIDISTRM, LPHWAVEIN, LPHWAVEOUT, LPMIDIHDR, LPMIDIINCAPSW, LPMIDIOUTCAPSW, LPMMTIME,
13     LPWAVEHDR, LPWAVEINCAPSW, LPWAVEOUTCAPSW, MMRESULT
14 };
15 use um::winnt::{LPWSTR, PVOID};
16 extern "system" {
waveOutGetNumDevs() -> UINT17     pub fn waveOutGetNumDevs() -> UINT;
18     // pub fn waveOutGetDevCapsA();
waveOutGetDevCapsW( uDeviceID: UINT_PTR, pwoc: LPWAVEOUTCAPSW, cbwoc: UINT, ) -> MMRESULT19     pub fn waveOutGetDevCapsW(
20         uDeviceID: UINT_PTR,
21         pwoc: LPWAVEOUTCAPSW,
22         cbwoc: UINT,
23     ) -> MMRESULT;
waveOutGetVolume( hwo: HWAVEOUT, pdwVolume: LPDWORD, ) -> MMRESULT24     pub fn waveOutGetVolume(
25         hwo: HWAVEOUT,
26         pdwVolume: LPDWORD,
27     ) -> MMRESULT;
waveOutSetVolume( hwo: HWAVEOUT, dwVolume: DWORD, ) -> MMRESULT28     pub fn waveOutSetVolume(
29         hwo: HWAVEOUT,
30         dwVolume: DWORD,
31     ) -> MMRESULT;
32     // pub fn waveOutGetErrorTextA();
waveOutGetErrorTextW( mmrError: MMRESULT, pszText: LPWSTR, cchText: UINT, ) -> MMRESULT33     pub fn waveOutGetErrorTextW(
34         mmrError: MMRESULT,
35         pszText: LPWSTR,
36         cchText: UINT,
37     ) -> MMRESULT;
waveOutOpen( phwo: LPHWAVEOUT, uDeviceID: UINT, pwfx: LPCWAVEFORMATEX, dwCallback: DWORD_PTR, dwInstance: DWORD_PTR, fdwOpen: DWORD, ) -> MMRESULT38     pub fn waveOutOpen(
39         phwo: LPHWAVEOUT,
40         uDeviceID: UINT,
41         pwfx: LPCWAVEFORMATEX,
42         dwCallback: DWORD_PTR,
43         dwInstance: DWORD_PTR,
44         fdwOpen: DWORD,
45     ) -> MMRESULT;
waveOutClose( hwo: HWAVEOUT, ) -> MMRESULT46     pub fn waveOutClose(
47         hwo: HWAVEOUT,
48     ) -> MMRESULT;
waveOutPrepareHeader( hwo: HWAVEOUT, pwh: LPWAVEHDR, cbwh: UINT, ) -> MMRESULT49     pub fn waveOutPrepareHeader(
50         hwo: HWAVEOUT,
51         pwh: LPWAVEHDR,
52         cbwh: UINT,
53     ) -> MMRESULT;
waveOutUnprepareHeader( hwo: HWAVEOUT, pwh: LPWAVEHDR, cbwh: UINT, ) -> MMRESULT54     pub fn waveOutUnprepareHeader(
55         hwo: HWAVEOUT,
56         pwh: LPWAVEHDR,
57         cbwh: UINT,
58     ) -> MMRESULT;
waveOutWrite( hwo: HWAVEOUT, pwh: LPWAVEHDR, cbwh: UINT, ) -> MMRESULT59     pub fn waveOutWrite(
60         hwo: HWAVEOUT,
61         pwh: LPWAVEHDR,
62         cbwh: UINT,
63     ) -> MMRESULT;
waveOutPause( hwo: HWAVEOUT, ) -> MMRESULT64     pub fn waveOutPause(
65         hwo: HWAVEOUT,
66     ) -> MMRESULT;
waveOutRestart( hwo: HWAVEOUT, ) -> MMRESULT67     pub fn waveOutRestart(
68         hwo: HWAVEOUT,
69     ) -> MMRESULT;
waveOutReset( hwo: HWAVEOUT, ) -> MMRESULT70     pub fn waveOutReset(
71         hwo: HWAVEOUT,
72     ) -> MMRESULT;
waveOutBreakLoop( hwo: HWAVEOUT, ) -> MMRESULT73     pub fn waveOutBreakLoop(
74         hwo: HWAVEOUT,
75     ) -> MMRESULT;
waveOutGetPosition( hwo: HWAVEOUT, pmmt: LPMMTIME, cbmmt: UINT, ) -> MMRESULT76     pub fn waveOutGetPosition(
77         hwo: HWAVEOUT,
78         pmmt: LPMMTIME,
79         cbmmt: UINT,
80     ) -> MMRESULT;
waveOutGetPitch( hwo: HWAVEOUT, pdwPitch: LPDWORD, ) -> MMRESULT81     pub fn waveOutGetPitch(
82         hwo: HWAVEOUT,
83         pdwPitch: LPDWORD,
84     ) -> MMRESULT;
waveOutSetPitch( hwo: HWAVEOUT, dwPitch: DWORD, ) -> MMRESULT85     pub fn waveOutSetPitch(
86         hwo: HWAVEOUT,
87         dwPitch: DWORD,
88     ) -> MMRESULT;
waveOutGetPlaybackRate( hwo: HWAVEOUT, pdwRate: LPDWORD, ) -> MMRESULT89     pub fn waveOutGetPlaybackRate(
90         hwo: HWAVEOUT,
91         pdwRate: LPDWORD,
92     ) -> MMRESULT;
waveOutSetPlaybackRate( hwo: HWAVEOUT, dwRate: DWORD, ) -> MMRESULT93     pub fn waveOutSetPlaybackRate(
94         hwo: HWAVEOUT,
95         dwRate: DWORD,
96     ) -> MMRESULT;
97     // pub fn waveOutGetID();
waveOutMessage( hwo: HWAVEOUT, uMsg: UINT, dw1: DWORD_PTR, dw2: DWORD_PTR, ) -> MMRESULT98     pub fn waveOutMessage(
99         hwo: HWAVEOUT,
100         uMsg: UINT,
101         dw1: DWORD_PTR,
102         dw2: DWORD_PTR,
103     ) -> MMRESULT;
waveInGetNumDevs() -> UINT104     pub fn waveInGetNumDevs() -> UINT;
105     // pub fn waveInGetDevCapsA();
waveInGetDevCapsW( uDeviceID: UINT_PTR, pwic: LPWAVEINCAPSW, cbwic: UINT, ) -> MMRESULT106     pub fn waveInGetDevCapsW(
107         uDeviceID: UINT_PTR,
108         pwic: LPWAVEINCAPSW,
109         cbwic: UINT,
110     ) -> MMRESULT;
111     // pub fn waveInGetErrorTextA();
waveInGetErrorTextW( mmrError: MMRESULT, pszText: LPWSTR, cchText: UINT, ) -> MMRESULT112     pub fn waveInGetErrorTextW(
113         mmrError: MMRESULT,
114         pszText: LPWSTR,
115         cchText: UINT,
116     ) -> MMRESULT;
waveInOpen( phwi: LPHWAVEIN, uDeviceID: UINT, pwfx: LPCWAVEFORMATEX, dwCallback: DWORD_PTR, dwInstance: DWORD_PTR, fdwOpen: DWORD, ) -> MMRESULT117     pub fn waveInOpen(
118         phwi: LPHWAVEIN,
119         uDeviceID: UINT,
120         pwfx: LPCWAVEFORMATEX,
121         dwCallback: DWORD_PTR,
122         dwInstance: DWORD_PTR,
123         fdwOpen: DWORD,
124     ) -> MMRESULT;
waveInClose( hwi: HWAVEIN, ) -> MMRESULT125     pub fn waveInClose(
126         hwi: HWAVEIN,
127     ) -> MMRESULT;
waveInPrepareHeader( hwi: HWAVEIN, pwh: LPWAVEHDR, cbwh: UINT, ) -> MMRESULT128     pub fn waveInPrepareHeader(
129         hwi: HWAVEIN,
130         pwh: LPWAVEHDR,
131         cbwh: UINT,
132     ) -> MMRESULT;
waveInUnprepareHeader( hwi: HWAVEIN, pwh: LPWAVEHDR, cbwh: UINT, ) -> MMRESULT133     pub fn waveInUnprepareHeader(
134         hwi: HWAVEIN,
135         pwh: LPWAVEHDR,
136         cbwh: UINT,
137     ) -> MMRESULT;
waveInAddBuffer( hwi: HWAVEIN, pwh: LPWAVEHDR, cbwh: UINT, ) -> MMRESULT138     pub fn waveInAddBuffer(
139         hwi: HWAVEIN,
140         pwh: LPWAVEHDR,
141         cbwh: UINT,
142     ) -> MMRESULT;
waveInStart( hwi: HWAVEIN, ) -> MMRESULT143     pub fn waveInStart(
144         hwi: HWAVEIN,
145     ) -> MMRESULT;
waveInStop( hwi: HWAVEIN, ) -> MMRESULT146     pub fn waveInStop(
147         hwi: HWAVEIN,
148     ) -> MMRESULT;
waveInReset( hwi: HWAVEIN, ) -> MMRESULT149     pub fn waveInReset(
150         hwi: HWAVEIN,
151     ) -> MMRESULT;
waveInGetPosition( hwi: HWAVEIN, pmmt: LPMMTIME, cbmmt: UINT, ) -> MMRESULT152     pub fn waveInGetPosition(
153         hwi: HWAVEIN,
154         pmmt: LPMMTIME,
155         cbmmt: UINT,
156     ) -> MMRESULT;
157     // pub fn waveInGetID();
waveInMessage( hwi: HWAVEIN, uMsg: UINT, dw1: DWORD_PTR, dw2: DWORD_PTR, ) -> MMRESULT158     pub fn waveInMessage(
159         hwi: HWAVEIN,
160         uMsg: UINT,
161         dw1: DWORD_PTR,
162         dw2: DWORD_PTR,
163     ) -> MMRESULT;
midiOutGetNumDevs() -> UINT164     pub fn midiOutGetNumDevs() -> UINT;
midiStreamOpen( lphStream: LPHMIDISTRM, puDeviceID: LPUINT, cMidi: DWORD, dwCallback: DWORD_PTR, dwInstance: DWORD_PTR, fdwOpen: DWORD, ) -> MMRESULT165     pub fn midiStreamOpen(
166         lphStream: LPHMIDISTRM,
167         puDeviceID: LPUINT,
168         cMidi: DWORD,
169         dwCallback: DWORD_PTR,
170         dwInstance: DWORD_PTR,
171         fdwOpen: DWORD,
172     ) -> MMRESULT;
midiStreamClose( hStream: HMIDISTRM, ) -> MMRESULT173     pub fn midiStreamClose(
174         hStream: HMIDISTRM,
175     ) -> MMRESULT;
midiStreamProperty( hm: HMIDISTRM, lppropdata: LPBYTE, dwProperty: DWORD, ) -> MMRESULT176     pub fn midiStreamProperty(
177         hm: HMIDISTRM,
178         lppropdata: LPBYTE,
179         dwProperty: DWORD,
180     ) -> MMRESULT;
midiStreamPosition( hms: HMIDISTRM, pmmt: LPMMTIME, cbmmt: UINT, ) -> MMRESULT181     pub fn midiStreamPosition(
182         hms: HMIDISTRM,
183         pmmt: LPMMTIME,
184         cbmmt: UINT,
185     ) -> MMRESULT;
midiStreamOut( hMidiStream: HMIDISTRM, lpMidiHdr: LPMIDIHDR, cbMidiHdr: UINT, ) -> MMRESULT186     pub fn midiStreamOut(
187         hMidiStream: HMIDISTRM,
188         lpMidiHdr: LPMIDIHDR,
189         cbMidiHdr: UINT,
190     ) -> MMRESULT;
midiStreamPause( hms: HMIDISTRM, ) -> MMRESULT191     pub fn midiStreamPause(
192         hms: HMIDISTRM,
193     ) -> MMRESULT;
midiStreamRestart( hms: HMIDISTRM, ) -> MMRESULT194     pub fn midiStreamRestart(
195         hms: HMIDISTRM,
196     ) -> MMRESULT;
midiStreamStop( hms: HMIDISTRM, ) -> MMRESULT197     pub fn midiStreamStop(
198         hms: HMIDISTRM,
199     ) -> MMRESULT;
midiConnect( hMidi: HMIDI, hmo: HMIDIOUT, pReserved: PVOID, ) -> MMRESULT200     pub fn midiConnect(
201         hMidi: HMIDI,
202         hmo: HMIDIOUT,
203         pReserved: PVOID,
204     ) -> MMRESULT;
midiDisconnect( hMidi: HMIDI, hmo: HMIDIOUT, pReserved: PVOID, ) -> MMRESULT205     pub fn midiDisconnect(
206         hMidi: HMIDI,
207         hmo: HMIDIOUT,
208         pReserved: PVOID,
209     ) -> MMRESULT;
midiOutGetDevCapsW( uDeviceID: UINT_PTR, lpMidiOutCaps: LPMIDIOUTCAPSW, cbMidiOutCaps: UINT, ) -> MMRESULT210     pub fn midiOutGetDevCapsW(
211         uDeviceID: UINT_PTR,
212         lpMidiOutCaps: LPMIDIOUTCAPSW,
213         cbMidiOutCaps: UINT,
214     ) -> MMRESULT;
midiOutGetVolume( hmo: HMIDIOUT, lpdwVolume: PDWORD, ) -> MMRESULT215     pub fn midiOutGetVolume(
216         hmo: HMIDIOUT,
217         lpdwVolume: PDWORD,
218     ) -> MMRESULT;
midiOutSetVolume( hmo: HMIDIOUT, dwVolume: DWORD, ) -> MMRESULT219     pub fn midiOutSetVolume(
220         hmo: HMIDIOUT,
221         dwVolume: DWORD,
222     ) -> MMRESULT;
midiOutGetErrorTextW( mmrError: MMRESULT, lpText: LPWSTR, cchText: UINT, ) -> MMRESULT223     pub fn midiOutGetErrorTextW(
224         mmrError: MMRESULT,
225         lpText: LPWSTR,
226         cchText: UINT,
227     ) -> MMRESULT;
midiOutOpen( lphmo: LPHMIDIOUT, uDeviceID: UINT, dwCallback: DWORD_PTR, dwCallbackInstance: DWORD_PTR, dwFlags: DWORD, ) -> MMRESULT228     pub fn midiOutOpen(
229         lphmo: LPHMIDIOUT,
230         uDeviceID: UINT,
231         dwCallback: DWORD_PTR,
232         dwCallbackInstance: DWORD_PTR,
233         dwFlags: DWORD,
234     ) -> MMRESULT;
midiOutClose( hmo: HMIDIOUT, ) -> MMRESULT235     pub fn midiOutClose(
236         hmo: HMIDIOUT,
237     ) -> MMRESULT;
midiOutPrepareHeader( hmo: HMIDIOUT, lpMidiOutHdr: LPMIDIHDR, cbMidiOutHdr: UINT, ) -> MMRESULT238     pub fn midiOutPrepareHeader(
239         hmo: HMIDIOUT,
240         lpMidiOutHdr: LPMIDIHDR,
241         cbMidiOutHdr: UINT,
242     ) -> MMRESULT;
midiOutUnprepareHeader( hmo: HMIDIOUT, lpMidiOutHdr: LPMIDIHDR, cbMidiOutHdr: UINT, ) -> MMRESULT243     pub fn midiOutUnprepareHeader(
244         hmo: HMIDIOUT,
245         lpMidiOutHdr: LPMIDIHDR,
246         cbMidiOutHdr: UINT,
247     ) -> MMRESULT;
midiOutShortMsg( hmo: HMIDIOUT, dwMsg: DWORD, ) -> MMRESULT248     pub fn midiOutShortMsg(
249         hmo: HMIDIOUT,
250         dwMsg: DWORD,
251     ) -> MMRESULT;
midiOutLongMsg( hmo: HMIDIOUT, lpMidiOutHdr: LPMIDIHDR, cbMidiOutHdr: UINT, ) -> MMRESULT252     pub fn midiOutLongMsg(
253         hmo: HMIDIOUT,
254         lpMidiOutHdr: LPMIDIHDR,
255         cbMidiOutHdr: UINT,
256     ) -> MMRESULT;
midiOutReset( hmo: HMIDIOUT, ) -> MMRESULT257     pub fn midiOutReset(
258         hmo: HMIDIOUT,
259     ) -> MMRESULT;
midiOutCachePatches( hmo: HMIDIOUT, wBank: UINT, lpPatchArray: LPWORD, wFlags: UINT, ) -> MMRESULT260     pub fn midiOutCachePatches(
261         hmo: HMIDIOUT,
262         wBank: UINT,
263         lpPatchArray: LPWORD,
264         wFlags: UINT,
265     ) -> MMRESULT;
midiOutCacheDrumPatches( hmo: HMIDIOUT, wPatch: UINT, lpKeyArray: LPWORD, wFlags: UINT, ) -> MMRESULT266     pub fn midiOutCacheDrumPatches(
267         hmo: HMIDIOUT,
268         wPatch: UINT,
269         lpKeyArray: LPWORD,
270         wFlags: UINT,
271     ) -> MMRESULT;
midiOutGetID( hmo: HMIDIOUT, puDeviceID: LPUINT, ) -> MMRESULT272     pub fn midiOutGetID(
273         hmo: HMIDIOUT,
274         puDeviceID: LPUINT,
275     ) -> MMRESULT;
midiOutMessage( deviceID: HMIDIOUT, msg: UINT, dw1: DWORD_PTR, dw2: DWORD_PTR, ) -> MMRESULT276     pub fn midiOutMessage(
277         deviceID: HMIDIOUT,
278         msg: UINT,
279         dw1: DWORD_PTR,
280         dw2: DWORD_PTR,
281     ) -> MMRESULT;
midiInGetNumDevs() -> UINT282     pub fn midiInGetNumDevs() -> UINT;
midiInGetDevCapsW( uDeviceID: UINT_PTR, lpMidiInCaps: LPMIDIINCAPSW, cbMidiInCaps: UINT, ) -> MMRESULT283     pub fn midiInGetDevCapsW(
284         uDeviceID: UINT_PTR,
285         lpMidiInCaps: LPMIDIINCAPSW,
286         cbMidiInCaps: UINT,
287     ) -> MMRESULT;
midiInGetErrorTextW( wError: MMRESULT, lpText: LPWSTR, cchText: UINT, ) -> MMRESULT288     pub fn midiInGetErrorTextW(
289         wError: MMRESULT,
290         lpText: LPWSTR,
291         cchText: UINT,
292     ) -> MMRESULT;
midiInOpen( lphMidiIn: LPHMIDIIN, uDeviceID: UINT, dwCallback: DWORD_PTR, dwCallbackInstance: DWORD_PTR, dwFlags: DWORD, ) -> MMRESULT293     pub fn midiInOpen(
294         lphMidiIn: LPHMIDIIN,
295         uDeviceID: UINT,
296         dwCallback: DWORD_PTR,
297         dwCallbackInstance: DWORD_PTR,
298         dwFlags: DWORD,
299     ) -> MMRESULT;
midiInClose( hMidiIn: HMIDIIN, ) -> MMRESULT300     pub fn midiInClose(
301         hMidiIn: HMIDIIN,
302     ) -> MMRESULT;
midiInPrepareHeader( hMidiIn: HMIDIIN, lpMidiInHdr: LPMIDIHDR, cbMidiInHdr: UINT, ) -> MMRESULT303     pub fn midiInPrepareHeader(
304         hMidiIn: HMIDIIN,
305         lpMidiInHdr: LPMIDIHDR,
306         cbMidiInHdr: UINT,
307     ) -> MMRESULT;
midiInUnprepareHeader( hMidiIn: HMIDIIN, lpMidiInHdr: LPMIDIHDR, cbMidiInHdr: UINT, ) -> MMRESULT308     pub fn midiInUnprepareHeader(
309         hMidiIn: HMIDIIN,
310         lpMidiInHdr: LPMIDIHDR,
311         cbMidiInHdr: UINT,
312     ) -> MMRESULT;
midiInAddBuffer( hMidiIn: HMIDIIN, lpMidiInHdr: LPMIDIHDR, cbMidiInHdr: UINT, ) -> MMRESULT313     pub fn midiInAddBuffer(
314         hMidiIn: HMIDIIN,
315         lpMidiInHdr: LPMIDIHDR,
316         cbMidiInHdr: UINT,
317     ) -> MMRESULT;
midiInStart( hMidiIn: HMIDIIN, ) -> MMRESULT318     pub fn midiInStart(
319         hMidiIn: HMIDIIN,
320     ) -> MMRESULT;
midiInStop( hMidiIn: HMIDIIN, ) -> MMRESULT321     pub fn midiInStop(
322         hMidiIn: HMIDIIN,
323     ) -> MMRESULT;
midiInReset( hMidiIn: HMIDIIN, ) -> MMRESULT324     pub fn midiInReset(
325         hMidiIn: HMIDIIN,
326     ) -> MMRESULT;
midiInGetID( hmi: HMIDIIN, puDeviceID: LPUINT, ) -> MMRESULT327     pub fn midiInGetID(
328         hmi: HMIDIIN,
329         puDeviceID: LPUINT,
330     ) -> MMRESULT;
midiInMessage( deviceID: HMIDIIN, msg: UINT, dw1: DWORD_PTR, dw2: DWORD_PTR, ) -> MMRESULT331     pub fn midiInMessage(
332         deviceID: HMIDIIN,
333         msg: UINT,
334         dw1: DWORD_PTR,
335         dw2: DWORD_PTR,
336     ) -> MMRESULT;
337 }
338