1 // Copyright © 2015, Peter Atashian 2 // Licensed under the MIT License <LICENSE.md> 3 //! MM procedure declarations, constant definitions and macros 4 //109 (Win 7 SDK) 5 pub type MMVERSION = ::UINT; 6 pub type MMRESULT = ::UINT; 7 STRUCT!{struct MMTIME { 8 wType: ::UINT, 9 u: MMTIME_u, 10 }} 11 pub type PMMTIME = *mut MMTIME; 12 pub type NPMMTIME = *mut MMTIME; 13 pub type LPMMTIME = *mut MMTIME; 14 STRUCT!{struct MMTIME_u { 15 data: [u8; 8], 16 }} 17 UNION!(MMTIME_u, data, ms, ms_mut, ::DWORD); 18 UNION!(MMTIME_u, data, sample, sample_mut, ::DWORD); 19 UNION!(MMTIME_u, data, cb, cb_mut, ::DWORD); 20 UNION!(MMTIME_u, data, ticks, ticks_mut, ::DWORD); 21 UNION!(MMTIME_u, data, smpte, smpte_mut, MMTIME_smpte); 22 UNION!(MMTIME_u, data, midi, midi_mut, MMTIME_midi); 23 STRUCT!{struct MMTIME_smpte { 24 hour: ::BYTE, 25 min: ::BYTE, 26 sec: ::BYTE, 27 frame: ::BYTE, 28 fps: ::BYTE, 29 dummy: ::BYTE, 30 pad: [::BYTE; 2], 31 }} 32 STRUCT!{struct MMTIME_midi { 33 songptrpos: ::DWORD, 34 }} 35 pub const TIME_MS: ::UINT = 0x0001; 36 pub const TIME_SAMPLES: ::UINT = 0x0002; 37 pub const TIME_BYTES: ::UINT = 0x0004; 38 pub const TIME_SMPTE: ::UINT = 0x0008; 39 pub const TIME_MIDI: ::UINT = 0x0010; 40 pub const TIME_TICKS: ::UINT = 0x0020; 41 pub const MM_JOY1MOVE: ::UINT = 0x3A0; 42 pub const MM_JOY2MOVE: ::UINT = 0x3A1; 43 pub const MM_JOY1ZMOVE: ::UINT = 0x3A2; 44 pub const MM_JOY2ZMOVE: ::UINT = 0x3A3; 45 pub const MM_JOY1BUTTONDOWN: ::UINT = 0x3B5; 46 pub const MM_JOY2BUTTONDOWN: ::UINT = 0x3B6; 47 pub const MM_JOY1BUTTONUP: ::UINT = 0x3B7; 48 pub const MM_JOY2BUTTONUP: ::UINT = 0x3B8; 49 pub const MM_MCINOTIFY: ::UINT = 0x3B9; 50 pub const MM_WOM_OPEN: ::UINT = 0x3BB; 51 pub const MM_WOM_CLOSE: ::UINT = 0x3BC; 52 pub const MM_WOM_DONE: ::UINT = 0x3BD; 53 pub const MM_WIM_OPEN: ::UINT = 0x3BE; 54 pub const MM_WIM_CLOSE: ::UINT = 0x3BF; 55 pub const MM_WIM_DATA: ::UINT = 0x3C0; 56 pub const MM_MIM_OPEN: ::UINT = 0x3C1; 57 pub const MM_MIM_CLOSE: ::UINT = 0x3C2; 58 pub const MM_MIM_DATA: ::UINT = 0x3C3; 59 pub const MM_MIM_LONGDATA: ::UINT = 0x3C4; 60 pub const MM_MIM_ERROR: ::UINT = 0x3C5; 61 pub const MM_MIM_LONGERROR: ::UINT = 0x3C6; 62 pub const MM_MOM_OPEN: ::UINT = 0x3C7; 63 pub const MM_MOM_CLOSE: ::UINT = 0x3C8; 64 pub const MM_MOM_DONE: ::UINT = 0x3C9; 65 pub const MMSYSERR_BASE: MMRESULT = 0; 66 pub const WAVERR_BASE: MMRESULT = 32; 67 pub const MIDIERR_BASE: MMRESULT = 64; 68 pub const TIMERR_BASE: MMRESULT = 96; 69 pub const JOYERR_BASE: MMRESULT = 160; 70 pub const MCIERR_BASE: MMRESULT = 256; 71 pub const MIXERR_BASE: MMRESULT = 1024; 72 pub const MMSYSERR_NOERROR: MMRESULT = 0; 73 pub const MMSYSERR_ERROR: MMRESULT = MMSYSERR_BASE + 1; 74 pub const MMSYSERR_BADDEVICEID: MMRESULT = MMSYSERR_BASE + 2; 75 pub const MMSYSERR_NOTENABLED: MMRESULT = MMSYSERR_BASE + 3; 76 pub const MMSYSERR_ALLOCATED: MMRESULT = MMSYSERR_BASE + 4; 77 pub const MMSYSERR_INVALHANDLE: MMRESULT = MMSYSERR_BASE + 5; 78 pub const MMSYSERR_NODRIVER: MMRESULT = MMSYSERR_BASE + 6; 79 pub const MMSYSERR_NOMEM: MMRESULT = MMSYSERR_BASE + 7; 80 pub const MMSYSERR_NOTSUPPORTED: MMRESULT = MMSYSERR_BASE + 8; 81 pub const MMSYSERR_BADERRNUM: MMRESULT = MMSYSERR_BASE + 9; 82 pub const MMSYSERR_INVALFLAG: MMRESULT = MMSYSERR_BASE + 10; 83 pub const MMSYSERR_INVALPARAM: MMRESULT = MMSYSERR_BASE + 11; 84 pub const MMSYSERR_HANDLEBUSY: MMRESULT = MMSYSERR_BASE + 12; 85 pub const MMSYSERR_INVALIDALIAS: MMRESULT = MMSYSERR_BASE + 13; 86 pub const MMSYSERR_BADDB: MMRESULT = MMSYSERR_BASE + 14; 87 pub const MMSYSERR_KEYNOTFOUND: MMRESULT = MMSYSERR_BASE + 15; 88 pub const MMSYSERR_READERROR: MMRESULT = MMSYSERR_BASE + 16; 89 pub const MMSYSERR_WRITEERROR: MMRESULT = MMSYSERR_BASE + 17; 90 pub const MMSYSERR_DELETEERROR: MMRESULT = MMSYSERR_BASE + 18; 91 pub const MMSYSERR_VALNOTFOUND: MMRESULT = MMSYSERR_BASE + 19; 92 pub const MMSYSERR_NODRIVERCB: MMRESULT = MMSYSERR_BASE + 20; 93 pub const MMSYSERR_MOREDATA: MMRESULT = MMSYSERR_BASE + 21; 94 pub const MMSYSERR_LASTERROR: MMRESULT = MMSYSERR_BASE + 21; 95 pub const MIDIERR_UNPREPARED: MMRESULT = MIDIERR_BASE + 0; 96 pub const MIDIERR_STILLPLAYING: MMRESULT = MIDIERR_BASE + 1; 97 pub const MIDIERR_NOMAP: MMRESULT = MIDIERR_BASE + 2; 98 pub const MIDIERR_NOTREADY: MMRESULT = MIDIERR_BASE + 3; 99 pub const MIDIERR_NODEVICE: MMRESULT = MIDIERR_BASE + 4; 100 pub const MIDIERR_INVALIDSETUP: MMRESULT = MIDIERR_BASE + 5; 101 pub const MIDIERR_BADOPENMODE: MMRESULT = MIDIERR_BASE + 6; 102 pub const MIDIERR_DONT_CONTINUE: MMRESULT = MIDIERR_BASE + 7; 103 pub const MIDIERR_LASTERROR: MMRESULT = MIDIERR_BASE + 7; 104 pub const CALLBACK_TYPEMASK: ::DWORD = 0x00070000; 105 pub const CALLBACK_NULL: ::DWORD = 0x00000000; 106 pub const CALLBACK_WINDOW: ::DWORD = 0x00010000; 107 pub const CALLBACK_TASK: ::DWORD = 0x00020000; 108 pub const CALLBACK_FUNCTION: ::DWORD = 0x00030000; 109 pub const CALLBACK_THREAD: ::DWORD = CALLBACK_TASK; 110 pub const CALLBACK_EVENT: ::DWORD = 0x00050000; 111 //497 (Win 7 SDK) 112 pub const WAVERR_BADFORMAT: MMRESULT = WAVERR_BASE + 0; 113 pub const WAVERR_STILLPLAYING: MMRESULT = WAVERR_BASE + 1; 114 pub const WAVERR_UNPREPARED: MMRESULT = WAVERR_BASE + 2; 115 pub const WAVERR_SYNC: MMRESULT = WAVERR_BASE + 3; 116 pub const WAVERR_LASTERROR: MMRESULT = WAVERR_BASE + 3; 117 DECLARE_HANDLE!(HWAVEIN, HWAVEIN__); 118 DECLARE_HANDLE!(HWAVEOUT, HWAVEOUT__); 119 pub type LPHWAVEIN = *mut HWAVEIN; 120 pub type LPHWAVEOUT = *mut HWAVEOUT; 121 pub const WOM_OPEN: ::UINT = MM_WOM_OPEN; 122 pub const WOM_CLOSE: ::UINT = MM_WOM_CLOSE; 123 pub const WOM_DONE: ::UINT = MM_WOM_DONE; 124 pub const WIM_OPEN: ::UINT = MM_WIM_OPEN; 125 pub const WIM_CLOSE: ::UINT = MM_WIM_CLOSE; 126 pub const WIM_DATA: ::UINT = MM_WIM_DATA; 127 pub const WAVE_MAPPER: ::UINT = 0xFFFFFFFF; 128 pub const WAVE_FORMAT_QUERY: ::DWORD = 0x0001; 129 pub const WAVE_ALLOWSYNC: ::DWORD = 0x0002; 130 pub const WAVE_MAPPED: ::DWORD = 0x0004; 131 pub const WAVE_FORMAT_DIRECT: ::DWORD = 0x0008; 132 pub const WAVE_FORMAT_DIRECT_QUERY: ::DWORD = WAVE_FORMAT_QUERY | WAVE_FORMAT_DIRECT; 133 pub const WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE: ::DWORD = 0x0010; 134 STRUCT!{struct WAVEHDR { 135 lpData: ::LPSTR, 136 dwBufferLength: ::DWORD, 137 dwBytesRecorded: ::DWORD, 138 dwUser: ::DWORD_PTR, 139 dwFlags: ::DWORD, 140 dwLoops: ::DWORD, 141 lpNext: *mut WAVEHDR, 142 reserved: ::DWORD_PTR, 143 }} 144 pub type PWAVEHDR = *mut WAVEHDR; 145 pub type NPWAVEHDR = *mut WAVEHDR; 146 pub type LPWAVEHDR = *mut WAVEHDR; 147 STRUCT!{struct WAVEOUTCAPSW { 148 wMid: ::WORD, 149 wPid: ::WORD, 150 vDriverVersion: MMVERSION, 151 szPname: [::WCHAR; 32], 152 dwFormats: ::DWORD, 153 wChannels: ::WORD, 154 wReserved1: ::WORD, 155 dwSupport: ::DWORD, 156 }} 157 pub type PWAVEOUTCAPSW = *mut WAVEOUTCAPSW; 158 pub type NPWAVEOUTCAPSW = *mut WAVEOUTCAPSW; 159 pub type LPWAVEOUTCAPSW = *mut WAVEOUTCAPSW; 160 STRUCT!{struct WAVEINCAPSW { 161 wMid: ::WORD, 162 wPid: ::WORD, 163 vDriverVersion: MMVERSION, 164 szPname: [::WCHAR; 32], 165 dwFormats: ::DWORD, 166 wChannels: ::WORD, 167 wReserved1: ::WORD, 168 }} 169 pub type PWAVEINCAPSW = *mut WAVEINCAPSW; 170 pub type NPWAVEINCAPSW = *mut WAVEINCAPSW; 171 pub type LPWAVEINCAPSW = *mut WAVEINCAPSW; 172 pub const WAVE_INVALIDFORMAT: ::DWORD = 0x00000000; 173 pub const WAVE_FORMAT_1M08: ::DWORD = 0x00000001; 174 pub const WAVE_FORMAT_1S08: ::DWORD = 0x00000002; 175 pub const WAVE_FORMAT_1M16: ::DWORD = 0x00000004; 176 pub const WAVE_FORMAT_1S16: ::DWORD = 0x00000008; 177 pub const WAVE_FORMAT_2M08: ::DWORD = 0x00000010; 178 pub const WAVE_FORMAT_2S08: ::DWORD = 0x00000020; 179 pub const WAVE_FORMAT_2M16: ::DWORD = 0x00000040; 180 pub const WAVE_FORMAT_2S16: ::DWORD = 0x00000080; 181 pub const WAVE_FORMAT_4M08: ::DWORD = 0x00000100; 182 pub const WAVE_FORMAT_4S08: ::DWORD = 0x00000200; 183 pub const WAVE_FORMAT_4M16: ::DWORD = 0x00000400; 184 pub const WAVE_FORMAT_4S16: ::DWORD = 0x00000800; 185 pub const WAVE_FORMAT_44M08: ::DWORD = 0x00000100; 186 pub const WAVE_FORMAT_44S08: ::DWORD = 0x00000200; 187 pub const WAVE_FORMAT_44M16: ::DWORD = 0x00000400; 188 pub const WAVE_FORMAT_44S16: ::DWORD = 0x00000800; 189 pub const WAVE_FORMAT_48M08: ::DWORD = 0x00001000; 190 pub const WAVE_FORMAT_48S08: ::DWORD = 0x00002000; 191 pub const WAVE_FORMAT_48M16: ::DWORD = 0x00004000; 192 pub const WAVE_FORMAT_48S16: ::DWORD = 0x00008000; 193 pub const WAVE_FORMAT_96M08: ::DWORD = 0x00010000; 194 pub const WAVE_FORMAT_96S08: ::DWORD = 0x00020000; 195 pub const WAVE_FORMAT_96M16: ::DWORD = 0x00040000; 196 pub const WAVE_FORMAT_96S16: ::DWORD = 0x00080000; 197 //782 (Win 7 SDK) 198 pub type PWAVEFORMATEX = *mut ::WAVEFORMATEX; 199 pub type NPWAVEFORMATEX = *mut ::WAVEFORMATEX; 200 pub type LPWAVEFORMATEX = *mut ::WAVEFORMATEX; 201 pub type LPCWAVEFORMATEX = *const ::WAVEFORMATEX; 202 //2170 (Win 7 SDK) 203 pub const TIMERR_NOERROR: ::MMRESULT = 0; 204 pub const TIMERR_NOCANDO: ::MMRESULT = TIMERR_BASE + 1; 205 pub const TIMERR_STRUCT: ::MMRESULT = TIMERR_BASE + 33; 206 //2198 (Win 7 SDK) 207 STRUCT!{struct TIMECAPS { 208 wPeriodMin: ::UINT, 209 wPeriodMax: ::UINT, 210 }} 211 pub type PTIMECAPS = *mut TIMECAPS; 212 pub type NPTIMECAPS = *mut TIMECAPS; 213 pub type LPTIMECAPS = *mut TIMECAPS; 214 STRUCT!{struct MIDIHDR { 215 lpData: ::LPSTR, 216 dwBufferLength: ::DWORD, 217 dwBytesRecorded: ::DWORD, 218 dwUser: ::DWORD_PTR, 219 dwFlags: ::DWORD, 220 lpNext: *mut MIDIHDR, 221 reserved: ::DWORD_PTR, 222 dwOffset: ::DWORD, 223 dwReserved: [::DWORD_PTR; 4], 224 }} 225 pub type PMIDIHDR = *mut MIDIHDR; 226 pub type NPMIDIHDR = *mut MIDIHDR; 227 pub type LPMIDIHDR = *mut MIDIHDR; 228 STRUCT!{struct MIDIINCAPSW { 229 wMid: ::WORD, 230 wPid: ::WORD, 231 vDriverVersion: MMVERSION, 232 szPname: [::WCHAR; 32], 233 dwSupport: ::DWORD, 234 }} 235 pub type PMIDIINCAPSW = *mut MIDIINCAPSW; 236 pub type NPMIDIINCAPSW = *mut MIDIINCAPSW; 237 pub type LPMIDIINCAPSW = *mut MIDIINCAPSW; 238 STRUCT!{struct MIDIOUTCAPSW { 239 wMid: ::WORD, 240 wPid: ::WORD, 241 vDriverVersion: ::MMVERSION, 242 szPname: [::WCHAR; 32], 243 wTechnology: ::WORD, 244 wVoices: ::WORD, 245 wNotes: ::WORD, 246 wChannelMask: ::WORD, 247 dwSupport: ::DWORD, 248 }} 249 pub type PMIDIOUTCAPSW = *mut MIDIOUTCAPSW; 250 pub type NPMIDIOUTCAPSW = *mut MIDIOUTCAPSW; 251 pub type LPMIDIOUTCAPSW = *mut MIDIOUTCAPSW; 252 DECLARE_HANDLE!(HMIDIIN, HMIDIIN__); 253 DECLARE_HANDLE!(HMIDIOUT, HMIDIOUT__); 254 pub type LPHMIDIIN = *mut HMIDIIN; 255 pub type LPHMIDIOUT = *mut HMIDIOUT; 256 DECLARE_HANDLE!(HMIDISTRM, HMIDISTRM__); 257 DECLARE_HANDLE!(HMIDI, HMIDI__); 258 pub type LPHMIDISTRM = *mut HMIDISTRM; 259 pub type LPHMIDI = *mut HMIDI; 260