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