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