zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

mmeapi.h (38387B) - Raw


      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 
      7 #ifndef _MMEAPI_H_
      8 #define _MMEAPI_H_
      9 
     10 #include <apiset.h>
     11 #include <apisetcconv.h>
     12 
     13 #ifdef _CONTRACT_GEN
     14 #include <nt.h>
     15 #include <ntrtl.h>
     16 #include <nturtl.h>
     17 #include <windows.h>
     18 #endif
     19 
     20 #include <mmsyscom.h>
     21 
     22 #ifdef __cplusplus
     23 extern "C" {
     24 #endif
     25 
     26 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
     27 
     28 #ifndef MMNOWAVE
     29 
     30 #define WAVERR_BADFORMAT (WAVERR_BASE + 0)
     31 #define WAVERR_STILLPLAYING (WAVERR_BASE + 1)
     32 #define WAVERR_UNPREPARED (WAVERR_BASE + 2)
     33 #define WAVERR_SYNC (WAVERR_BASE + 3)
     34 #define WAVERR_LASTERROR (WAVERR_BASE + 3)
     35 
     36 DECLARE_HANDLE(HWAVE);
     37 DECLARE_HANDLE(HWAVEIN);
     38 DECLARE_HANDLE(HWAVEOUT);
     39 typedef HWAVEIN *LPHWAVEIN;
     40 typedef HWAVEOUT *LPHWAVEOUT;
     41 typedef DRVCALLBACK WAVECALLBACK;
     42 typedef WAVECALLBACK *LPWAVECALLBACK;
     43 
     44 #define WOM_OPEN MM_WOM_OPEN
     45 #define WOM_CLOSE MM_WOM_CLOSE
     46 #define WOM_DONE MM_WOM_DONE
     47 #define WIM_OPEN MM_WIM_OPEN
     48 #define WIM_CLOSE MM_WIM_CLOSE
     49 #define WIM_DATA MM_WIM_DATA
     50 
     51 #define WAVE_MAPPER ((UINT)-1)
     52 
     53 #define WAVE_FORMAT_QUERY 0x0001
     54 #define WAVE_ALLOWSYNC 0x0002
     55 #define WAVE_MAPPED 0x0004
     56 #define WAVE_FORMAT_DIRECT 0x0008
     57 #define WAVE_FORMAT_DIRECT_QUERY (WAVE_FORMAT_QUERY | WAVE_FORMAT_DIRECT)
     58 #define WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE 0x0010
     59 
     60 typedef struct wavehdr_tag {
     61   LPSTR lpData;
     62   DWORD dwBufferLength;
     63   DWORD dwBytesRecorded;
     64   DWORD_PTR dwUser;
     65   DWORD dwFlags;
     66   DWORD dwLoops;
     67   struct wavehdr_tag *lpNext;
     68   DWORD_PTR reserved;
     69 } WAVEHDR, *PWAVEHDR, *NPWAVEHDR, *LPWAVEHDR;
     70 
     71 #define WHDR_DONE 0x00000001
     72 #define WHDR_PREPARED 0x00000002
     73 #define WHDR_BEGINLOOP 0x00000004
     74 #define WHDR_ENDLOOP 0x00000008
     75 #define WHDR_INQUEUE 0x00000010
     76 
     77 typedef struct tagWAVEOUTCAPSA {
     78   WORD wMid;
     79   WORD wPid;
     80   MMVERSION vDriverVersion;
     81   CHAR szPname[MAXPNAMELEN];
     82   DWORD dwFormats;
     83   WORD wChannels;
     84   WORD wReserved1;
     85   DWORD dwSupport;
     86 } WAVEOUTCAPSA, *PWAVEOUTCAPSA, *NPWAVEOUTCAPSA, *LPWAVEOUTCAPSA;
     87 
     88 typedef struct tagWAVEOUTCAPSW {
     89   WORD wMid;
     90   WORD wPid;
     91   MMVERSION vDriverVersion;
     92   WCHAR szPname[MAXPNAMELEN];
     93   DWORD dwFormats;
     94   WORD wChannels;
     95   WORD wReserved1;
     96   DWORD dwSupport;
     97 } WAVEOUTCAPSW, *PWAVEOUTCAPSW, *NPWAVEOUTCAPSW, *LPWAVEOUTCAPSW;
     98 
     99 __MINGW_TYPEDEF_AW(WAVEOUTCAPS)
    100 __MINGW_TYPEDEF_AW(PWAVEOUTCAPS)
    101 __MINGW_TYPEDEF_AW(NPWAVEOUTCAPS)
    102 __MINGW_TYPEDEF_AW(LPWAVEOUTCAPS)
    103 
    104 typedef struct tagWAVEOUTCAPS2A {
    105   WORD wMid;
    106   WORD wPid;
    107   MMVERSION vDriverVersion;
    108   CHAR szPname[MAXPNAMELEN];
    109   DWORD dwFormats;
    110   WORD wChannels;
    111   WORD wReserved1;
    112   DWORD dwSupport;
    113   GUID ManufacturerGuid;
    114   GUID ProductGuid;
    115   GUID NameGuid;
    116 } WAVEOUTCAPS2A, *PWAVEOUTCAPS2A, *NPWAVEOUTCAPS2A, *LPWAVEOUTCAPS2A;
    117 
    118 typedef struct tagWAVEOUTCAPS2W {
    119   WORD wMid;
    120   WORD wPid;
    121   MMVERSION vDriverVersion;
    122   WCHAR szPname[MAXPNAMELEN];
    123   DWORD dwFormats;
    124   WORD wChannels;
    125   WORD wReserved1;
    126   DWORD dwSupport;
    127   GUID ManufacturerGuid;
    128   GUID ProductGuid;
    129   GUID NameGuid;
    130 } WAVEOUTCAPS2W, *PWAVEOUTCAPS2W, *NPWAVEOUTCAPS2W, *LPWAVEOUTCAPS2W;
    131 
    132 __MINGW_TYPEDEF_AW(WAVEOUTCAPS2)
    133 __MINGW_TYPEDEF_AW(PWAVEOUTCAPS2)
    134 __MINGW_TYPEDEF_AW(NPWAVEOUTCAPS2)
    135 __MINGW_TYPEDEF_AW(LPWAVEOUTCAPS2)
    136 
    137 #define WAVECAPS_PITCH 0x0001
    138 #define WAVECAPS_PLAYBACKRATE 0x0002
    139 #define WAVECAPS_VOLUME 0x0004
    140 #define WAVECAPS_LRVOLUME 0x0008
    141 #define WAVECAPS_SYNC 0x0010
    142 #define WAVECAPS_SAMPLEACCURATE 0x0020
    143 
    144 typedef struct tagWAVEINCAPSA {
    145   WORD wMid;
    146   WORD wPid;
    147   MMVERSION vDriverVersion;
    148   CHAR szPname[MAXPNAMELEN];
    149   DWORD dwFormats;
    150   WORD wChannels;
    151   WORD wReserved1;
    152 } WAVEINCAPSA, *PWAVEINCAPSA, *NPWAVEINCAPSA, *LPWAVEINCAPSA;
    153 
    154 typedef struct tagWAVEINCAPSW {
    155   WORD wMid;
    156   WORD wPid;
    157   MMVERSION vDriverVersion;
    158   WCHAR szPname[MAXPNAMELEN];
    159   DWORD dwFormats;
    160   WORD wChannels;
    161   WORD wReserved1;
    162 } WAVEINCAPSW, *PWAVEINCAPSW, *NPWAVEINCAPSW, *LPWAVEINCAPSW;
    163 
    164 __MINGW_TYPEDEF_AW(WAVEINCAPS)
    165 __MINGW_TYPEDEF_AW(PWAVEINCAPS)
    166 __MINGW_TYPEDEF_AW(NPWAVEINCAPS)
    167 __MINGW_TYPEDEF_AW(LPWAVEINCAPS)
    168 
    169 typedef struct tagWAVEINCAPS2A {
    170   WORD wMid;
    171   WORD wPid;
    172   MMVERSION vDriverVersion;
    173   CHAR szPname[MAXPNAMELEN];
    174   DWORD dwFormats;
    175   WORD wChannels;
    176   WORD wReserved1;
    177   GUID ManufacturerGuid;
    178   GUID ProductGuid;
    179   GUID NameGuid;
    180 } WAVEINCAPS2A, *PWAVEINCAPS2A, *NPWAVEINCAPS2A, *LPWAVEINCAPS2A;
    181 
    182 typedef struct tagWAVEINCAPS2W {
    183   WORD wMid;
    184   WORD wPid;
    185   MMVERSION vDriverVersion;
    186   WCHAR szPname[MAXPNAMELEN];
    187   DWORD dwFormats;
    188   WORD wChannels;
    189   WORD wReserved1;
    190   GUID ManufacturerGuid;
    191   GUID ProductGuid;
    192   GUID NameGuid;
    193 } WAVEINCAPS2W, *PWAVEINCAPS2W, *NPWAVEINCAPS2W, *LPWAVEINCAPS2W;
    194 
    195 __MINGW_TYPEDEF_AW(WAVEINCAPS2)
    196 __MINGW_TYPEDEF_AW(PWAVEINCAPS2)
    197 __MINGW_TYPEDEF_AW(NPWAVEINCAPS2)
    198 __MINGW_TYPEDEF_AW(LPWAVEINCAPS2)
    199 
    200 #define WAVE_INVALIDFORMAT 0x00000000
    201 #define WAVE_FORMAT_1M08 0x00000001
    202 #define WAVE_FORMAT_1S08 0x00000002
    203 #define WAVE_FORMAT_1M16 0x00000004
    204 #define WAVE_FORMAT_1S16 0x00000008
    205 #define WAVE_FORMAT_2M08 0x00000010
    206 #define WAVE_FORMAT_2S08 0x00000020
    207 #define WAVE_FORMAT_2M16 0x00000040
    208 #define WAVE_FORMAT_2S16 0x00000080
    209 #define WAVE_FORMAT_4M08 0x00000100
    210 #define WAVE_FORMAT_4S08 0x00000200
    211 #define WAVE_FORMAT_4M16 0x00000400
    212 #define WAVE_FORMAT_4S16 0x00000800
    213 
    214 #define WAVE_FORMAT_44M08 0x00000100
    215 #define WAVE_FORMAT_44S08 0x00000200
    216 #define WAVE_FORMAT_44M16 0x00000400
    217 #define WAVE_FORMAT_44S16 0x00000800
    218 #define WAVE_FORMAT_48M08 0x00001000
    219 #define WAVE_FORMAT_48S08 0x00002000
    220 #define WAVE_FORMAT_48M16 0x00004000
    221 #define WAVE_FORMAT_48S16 0x00008000
    222 #define WAVE_FORMAT_96M08 0x00010000
    223 #define WAVE_FORMAT_96S08 0x00020000
    224 #define WAVE_FORMAT_96M16 0x00040000
    225 #define WAVE_FORMAT_96S16 0x00080000
    226 
    227 #ifndef WAVE_FORMAT_PCM
    228 
    229 typedef struct waveformat_tag {
    230   WORD wFormatTag;
    231   WORD nChannels;
    232   DWORD nSamplesPerSec;
    233   DWORD nAvgBytesPerSec;
    234   WORD nBlockAlign;
    235 } WAVEFORMAT, *PWAVEFORMAT, *NPWAVEFORMAT, *LPWAVEFORMAT;
    236 
    237 #define WAVE_FORMAT_PCM 1
    238 
    239 typedef struct pcmwaveformat_tag {
    240   WAVEFORMAT wf;
    241   WORD wBitsPerSample;
    242 } PCMWAVEFORMAT, *PPCMWAVEFORMAT, *NPPCMWAVEFORMAT, *LPPCMWAVEFORMAT;
    243 #endif /* WAVE_FORMAT_PCM */
    244 
    245 #ifndef _WAVEFORMATEX_
    246 #define _WAVEFORMATEX_
    247 
    248 typedef struct tWAVEFORMATEX {
    249   WORD wFormatTag;
    250   WORD nChannels;
    251   DWORD nSamplesPerSec;
    252   DWORD nAvgBytesPerSec;
    253   WORD nBlockAlign;
    254   WORD wBitsPerSample;
    255   WORD cbSize;
    256 } WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;
    257 
    258 #endif /* _WAVEFORMATEX_ */
    259 typedef const WAVEFORMATEX *LPCWAVEFORMATEX;
    260 
    261 WINMMAPI UINT WINAPI waveOutGetNumDevs(void);
    262 
    263 WINMMAPI MMRESULT WINAPI waveOutGetDevCapsA(UINT_PTR uDeviceID, LPWAVEOUTCAPSA pwoc, UINT cbwoc);
    264 WINMMAPI MMRESULT WINAPI waveOutGetDevCapsW(UINT_PTR uDeviceID, LPWAVEOUTCAPSW pwoc, UINT cbwoc);
    265 #define waveOutGetDevCaps __MINGW_NAME_AW(waveOutGetDevCaps)
    266 
    267 WINMMAPI MMRESULT WINAPI waveOutGetVolume(HWAVEOUT hwo, LPDWORD pdwVolume);
    268 WINMMAPI MMRESULT WINAPI waveOutSetVolume(HWAVEOUT hwo, DWORD dwVolume);
    269 WINMMAPI MMRESULT WINAPI waveOutGetErrorTextA(MMRESULT mmrError, LPSTR pszText, UINT cchText);
    270 WINMMAPI MMRESULT WINAPI waveOutGetErrorTextW(MMRESULT mmrError, LPWSTR pszText, UINT cchText);
    271 #define waveOutGetErrorText __MINGW_NAME_AW(waveOutGetErrorText)
    272 
    273 WINMMAPI MMRESULT WINAPI waveOutOpen(LPHWAVEOUT phwo, UINT uDeviceID, LPCWAVEFORMATEX pwfx, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen);
    274 WINMMAPI MMRESULT WINAPI waveOutClose(HWAVEOUT hwo);
    275 WINMMAPI MMRESULT WINAPI waveOutPrepareHeader(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh);
    276 WINMMAPI MMRESULT WINAPI waveOutUnprepareHeader(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh);
    277 WINMMAPI MMRESULT WINAPI waveOutWrite(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh);
    278 WINMMAPI MMRESULT WINAPI waveOutPause(HWAVEOUT hwo);
    279 WINMMAPI MMRESULT WINAPI waveOutRestart(HWAVEOUT hwo);
    280 WINMMAPI MMRESULT WINAPI waveOutReset(HWAVEOUT hwo);
    281 WINMMAPI MMRESULT WINAPI waveOutBreakLoop(HWAVEOUT hwo);
    282 WINMMAPI MMRESULT WINAPI waveOutGetPosition(HWAVEOUT hwo, LPMMTIME pmmt, UINT cbmmt);
    283 WINMMAPI MMRESULT WINAPI waveOutGetPitch(HWAVEOUT hwo, LPDWORD pdwPitch);
    284 WINMMAPI MMRESULT WINAPI waveOutSetPitch(HWAVEOUT hwo, DWORD dwPitch);
    285 WINMMAPI MMRESULT WINAPI waveOutGetPlaybackRate(HWAVEOUT hwo, LPDWORD pdwRate);
    286 WINMMAPI MMRESULT WINAPI waveOutSetPlaybackRate(HWAVEOUT hwo, DWORD dwRate);
    287 WINMMAPI MMRESULT WINAPI waveOutGetID(HWAVEOUT hwo, LPUINT puDeviceID);
    288 
    289 WINMMAPI MMRESULT WINAPI waveOutMessage(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2);
    290 
    291 WINMMAPI UINT WINAPI waveInGetNumDevs(void);
    292 
    293 WINMMAPI MMRESULT WINAPI waveInGetDevCapsA(UINT_PTR uDeviceID, LPWAVEINCAPSA pwic, UINT cbwic);
    294 WINMMAPI MMRESULT WINAPI waveInGetDevCapsW(UINT_PTR uDeviceID, LPWAVEINCAPSW pwic, UINT cbwic);
    295 #define waveInGetDevCaps __MINGW_NAME_AW(waveInGetDevCaps)
    296 
    297 WINMMAPI MMRESULT WINAPI waveInGetErrorTextA(MMRESULT mmrError, LPSTR pszText, UINT cchText);
    298 WINMMAPI MMRESULT WINAPI waveInGetErrorTextW(MMRESULT mmrError, LPWSTR pszText, UINT cchText);
    299 #define waveInGetErrorText __MINGW_NAME_AW(waveInGetErrorText)
    300 
    301 WINMMAPI MMRESULT WINAPI waveInOpen(LPHWAVEIN phwi, UINT uDeviceID, LPCWAVEFORMATEX pwfx, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen);
    302 WINMMAPI MMRESULT WINAPI waveInClose(HWAVEIN hwi);
    303 WINMMAPI MMRESULT WINAPI waveInPrepareHeader(HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh);
    304 WINMMAPI MMRESULT WINAPI waveInUnprepareHeader(HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh);
    305 WINMMAPI MMRESULT WINAPI waveInAddBuffer(HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh);
    306 WINMMAPI MMRESULT WINAPI waveInStart(HWAVEIN hwi);
    307 WINMMAPI MMRESULT WINAPI waveInStop(HWAVEIN hwi);
    308 WINMMAPI MMRESULT WINAPI waveInReset(HWAVEIN hwi);
    309 WINMMAPI MMRESULT WINAPI waveInGetPosition(HWAVEIN hwi, LPMMTIME pmmt, UINT cbmmt);
    310 WINMMAPI MMRESULT WINAPI waveInGetID(HWAVEIN hwi, LPUINT puDeviceID);
    311 
    312 WINMMAPI MMRESULT WINAPI waveInMessage(HWAVEIN hwi, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2);
    313 
    314 #endif  /* ifndef MMNOWAVE */
    315 
    316 #ifndef MMNOMIDI
    317 
    318 #define MIDIERR_UNPREPARED (MIDIERR_BASE + 0)
    319 #define MIDIERR_STILLPLAYING (MIDIERR_BASE + 1)
    320 #define MIDIERR_NOMAP (MIDIERR_BASE + 2)
    321 #define MIDIERR_NOTREADY (MIDIERR_BASE + 3)
    322 #define MIDIERR_NODEVICE (MIDIERR_BASE + 4)
    323 #define MIDIERR_INVALIDSETUP (MIDIERR_BASE + 5)
    324 #define MIDIERR_BADOPENMODE (MIDIERR_BASE + 6)
    325 #define MIDIERR_DONT_CONTINUE (MIDIERR_BASE + 7)
    326 #define MIDIERR_LASTERROR (MIDIERR_BASE + 7)
    327 
    328 DECLARE_HANDLE(HMIDI);
    329 DECLARE_HANDLE(HMIDIIN);
    330 DECLARE_HANDLE(HMIDIOUT);
    331 DECLARE_HANDLE(HMIDISTRM);
    332 typedef HMIDI *LPHMIDI;
    333 typedef HMIDIIN *LPHMIDIIN;
    334 typedef HMIDIOUT *LPHMIDIOUT;
    335 typedef HMIDISTRM *LPHMIDISTRM;
    336 typedef DRVCALLBACK MIDICALLBACK;
    337 typedef MIDICALLBACK *LPMIDICALLBACK;
    338 #define MIDIPATCHSIZE 128
    339 typedef WORD PATCHARRAY[MIDIPATCHSIZE];
    340 typedef WORD *LPPATCHARRAY;
    341 typedef WORD KEYARRAY[MIDIPATCHSIZE];
    342 typedef WORD *LPKEYARRAY;
    343 
    344 #define MIM_OPEN MM_MIM_OPEN
    345 #define MIM_CLOSE MM_MIM_CLOSE
    346 #define MIM_DATA MM_MIM_DATA
    347 #define MIM_LONGDATA MM_MIM_LONGDATA
    348 #define MIM_ERROR MM_MIM_ERROR
    349 #define MIM_LONGERROR MM_MIM_LONGERROR
    350 #define MOM_OPEN MM_MOM_OPEN
    351 #define MOM_CLOSE MM_MOM_CLOSE
    352 #define MOM_DONE MM_MOM_DONE
    353 
    354 #define MIM_MOREDATA MM_MIM_MOREDATA
    355 #define MOM_POSITIONCB MM_MOM_POSITIONCB
    356 
    357 #define MIDIMAPPER ((UINT)-1)
    358 #define MIDI_MAPPER ((UINT)-1)
    359 
    360 #define MIDI_IO_STATUS __MSABI_LONG(0x00000020)
    361 
    362 #define MIDI_CACHE_ALL 1
    363 #define MIDI_CACHE_BESTFIT 2
    364 #define MIDI_CACHE_QUERY 3
    365 #define MIDI_UNCACHE 4
    366 
    367 typedef struct tagMIDIOUTCAPSA {
    368   WORD wMid;
    369   WORD wPid;
    370   MMVERSION vDriverVersion;
    371   CHAR szPname[MAXPNAMELEN];
    372   WORD wTechnology;
    373   WORD wVoices;
    374   WORD wNotes;
    375   WORD wChannelMask;
    376   DWORD dwSupport;
    377 } MIDIOUTCAPSA, *PMIDIOUTCAPSA, *NPMIDIOUTCAPSA, *LPMIDIOUTCAPSA;
    378 
    379 typedef struct tagMIDIOUTCAPSW {
    380   WORD wMid;
    381   WORD wPid;
    382   MMVERSION vDriverVersion;
    383   WCHAR szPname[MAXPNAMELEN];
    384   WORD wTechnology;
    385   WORD wVoices;
    386   WORD wNotes;
    387   WORD wChannelMask;
    388   DWORD dwSupport;
    389 } MIDIOUTCAPSW, *PMIDIOUTCAPSW, *NPMIDIOUTCAPSW, *LPMIDIOUTCAPSW;
    390 
    391 __MINGW_TYPEDEF_AW(MIDIOUTCAPS)
    392 __MINGW_TYPEDEF_AW(PMIDIOUTCAPS)
    393 __MINGW_TYPEDEF_AW(NPMIDIOUTCAPS)
    394 __MINGW_TYPEDEF_AW(LPMIDIOUTCAPS)
    395 
    396 typedef struct tagMIDIOUTCAPS2A {
    397   WORD wMid;
    398   WORD wPid;
    399   MMVERSION vDriverVersion;
    400   CHAR szPname[MAXPNAMELEN];
    401   WORD wTechnology;
    402   WORD wVoices;
    403   WORD wNotes;
    404   WORD wChannelMask;
    405   DWORD dwSupport;
    406   GUID ManufacturerGuid;
    407   GUID ProductGuid;
    408   GUID NameGuid;
    409 } MIDIOUTCAPS2A, *PMIDIOUTCAPS2A, *NPMIDIOUTCAPS2A, *LPMIDIOUTCAPS2A;
    410 
    411 typedef struct tagMIDIOUTCAPS2W {
    412   WORD wMid;
    413   WORD wPid;
    414   MMVERSION vDriverVersion;
    415   WCHAR szPname[MAXPNAMELEN];
    416   WORD wTechnology;
    417   WORD wVoices;
    418   WORD wNotes;
    419   WORD wChannelMask;
    420   DWORD dwSupport;
    421   GUID ManufacturerGuid;
    422   GUID ProductGuid;
    423   GUID NameGuid;
    424 } MIDIOUTCAPS2W, *PMIDIOUTCAPS2W, *NPMIDIOUTCAPS2W, *LPMIDIOUTCAPS2W;
    425 
    426 __MINGW_TYPEDEF_AW(MIDIOUTCAPS2)
    427 __MINGW_TYPEDEF_AW(PMIDIOUTCAPS2)
    428 __MINGW_TYPEDEF_AW(NPMIDIOUTCAPS2)
    429 __MINGW_TYPEDEF_AW(LPMIDIOUTCAPS2)
    430 
    431 #define MOD_MIDIPORT 1
    432 #define MOD_SYNTH 2
    433 #define MOD_SQSYNTH 3
    434 #define MOD_FMSYNTH 4
    435 #define MOD_MAPPER 5
    436 #define MOD_WAVETABLE 6
    437 #define MOD_SWSYNTH 7
    438 
    439 #define MIDICAPS_VOLUME 0x0001
    440 #define MIDICAPS_LRVOLUME 0x0002
    441 #define MIDICAPS_CACHE 0x0004
    442 #define MIDICAPS_STREAM 0x0008
    443 
    444 typedef struct tagMIDIINCAPSA {
    445   WORD wMid;
    446   WORD wPid;
    447   MMVERSION vDriverVersion;
    448   CHAR szPname[MAXPNAMELEN];
    449   DWORD dwSupport;
    450 } MIDIINCAPSA, *PMIDIINCAPSA, *NPMIDIINCAPSA, *LPMIDIINCAPSA;
    451 
    452 typedef struct tagMIDIINCAPSW {
    453   WORD wMid;
    454   WORD wPid;
    455   MMVERSION vDriverVersion;
    456   WCHAR szPname[MAXPNAMELEN];
    457   DWORD dwSupport;
    458 } MIDIINCAPSW, *PMIDIINCAPSW, *NPMIDIINCAPSW, *LPMIDIINCAPSW;
    459 
    460 __MINGW_TYPEDEF_AW(MIDIINCAPS)
    461 __MINGW_TYPEDEF_AW(PMIDIINCAPS)
    462 __MINGW_TYPEDEF_AW(NPMIDIINCAPS)
    463 __MINGW_TYPEDEF_AW(LPMIDIINCAPS)
    464 
    465 typedef struct tagMIDIINCAPS2A {
    466   WORD wMid;
    467   WORD wPid;
    468   MMVERSION vDriverVersion;
    469   CHAR szPname[MAXPNAMELEN];
    470   DWORD dwSupport;
    471   GUID ManufacturerGuid;
    472   GUID ProductGuid;
    473   GUID NameGuid;
    474 } MIDIINCAPS2A, *PMIDIINCAPS2A, *NPMIDIINCAPS2A, *LPMIDIINCAPS2A;
    475 
    476 typedef struct tagMIDIINCAPS2W {
    477   WORD wMid;
    478   WORD wPid;
    479   MMVERSION vDriverVersion;
    480   WCHAR szPname[MAXPNAMELEN];
    481   DWORD dwSupport;
    482   GUID ManufacturerGuid;
    483   GUID ProductGuid;
    484   GUID NameGuid;
    485 } MIDIINCAPS2W, *PMIDIINCAPS2W, *NPMIDIINCAPS2W, *LPMIDIINCAPS2W;
    486 
    487 __MINGW_TYPEDEF_AW(MIDIINCAPS2)
    488 __MINGW_TYPEDEF_AW(PMIDIINCAPS2)
    489 __MINGW_TYPEDEF_AW(NPMIDIINCAPS2)
    490 __MINGW_TYPEDEF_AW(LPMIDIINCAPS2)
    491 
    492 typedef struct midihdr_tag {
    493   LPSTR lpData;
    494   DWORD dwBufferLength;
    495   DWORD dwBytesRecorded;
    496   DWORD_PTR dwUser;
    497   DWORD dwFlags;
    498   struct midihdr_tag far *lpNext;
    499   DWORD_PTR reserved;
    500   DWORD dwOffset;
    501   DWORD_PTR dwReserved[8];
    502 } MIDIHDR, *PMIDIHDR, *NPMIDIHDR, *LPMIDIHDR;
    503 
    504 typedef struct midievent_tag {
    505   DWORD dwDeltaTime;
    506   DWORD dwStreamID;
    507   DWORD dwEvent;
    508   DWORD dwParms[1];
    509 } MIDIEVENT;
    510 
    511 typedef struct midistrmbuffver_tag {
    512   DWORD dwVersion;
    513   DWORD dwMid;
    514   DWORD dwOEMVersion;
    515 } MIDISTRMBUFFVER;
    516 
    517 #define MHDR_DONE 0x00000001
    518 #define MHDR_PREPARED 0x00000002
    519 #define MHDR_INQUEUE 0x00000004
    520 #define MHDR_ISSTRM 0x00000008
    521 
    522 #define MEVT_F_SHORT __MSABI_LONG(0x00000000)
    523 #define MEVT_F_LONG __MSABI_LONG(0x80000000)
    524 #define MEVT_F_CALLBACK __MSABI_LONG(0x40000000)
    525 
    526 #define MEVT_EVENTTYPE(x) ((BYTE)(((x)>>24)&0xFF))
    527 #define MEVT_EVENTPARM(x) ((DWORD)((x)&0x00FFFFFFL))
    528 
    529 #define MEVT_SHORTMSG ((BYTE)0x00)
    530 #define MEVT_TEMPO ((BYTE)0x01)
    531 #define MEVT_NOP ((BYTE)0x02)
    532 
    533 #define MEVT_LONGMSG ((BYTE)0x80)
    534 #define MEVT_COMMENT ((BYTE)0x82)
    535 #define MEVT_VERSION ((BYTE)0x84)
    536 
    537 #define MIDISTRM_ERROR (-2)
    538 
    539 #define MIDIPROP_SET __MSABI_LONG(0x80000000)
    540 #define MIDIPROP_GET __MSABI_LONG(0x40000000)
    541 
    542 #define MIDIPROP_TIMEDIV __MSABI_LONG(0x00000001)
    543 #define MIDIPROP_TEMPO __MSABI_LONG(0x00000002)
    544 
    545 typedef struct midiproptimediv_tag {
    546   DWORD cbStruct;
    547   DWORD dwTimeDiv;
    548 } MIDIPROPTIMEDIV, *LPMIDIPROPTIMEDIV;
    549 
    550 typedef struct midiproptempo_tag {
    551   DWORD cbStruct;
    552   DWORD dwTempo;
    553 } MIDIPROPTEMPO, *LPMIDIPROPTEMPO;
    554 
    555 WINMMAPI UINT WINAPI midiOutGetNumDevs(void);
    556 WINMMAPI MMRESULT WINAPI midiStreamOpen(LPHMIDISTRM phms, LPUINT puDeviceID, DWORD cMidi, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen);
    557 WINMMAPI MMRESULT WINAPI midiStreamClose(HMIDISTRM hms);
    558 WINMMAPI MMRESULT WINAPI midiStreamProperty(HMIDISTRM hms, LPBYTE lppropdata, DWORD dwProperty);
    559 WINMMAPI MMRESULT WINAPI midiStreamPosition(HMIDISTRM hms, LPMMTIME lpmmt, UINT cbmmt);
    560 WINMMAPI MMRESULT WINAPI midiStreamOut(HMIDISTRM hms, LPMIDIHDR pmh, UINT cbmh);
    561 WINMMAPI MMRESULT WINAPI midiStreamPause(HMIDISTRM hms);
    562 WINMMAPI MMRESULT WINAPI midiStreamRestart(HMIDISTRM hms);
    563 WINMMAPI MMRESULT WINAPI midiStreamStop(HMIDISTRM hms);
    564 
    565 WINMMAPI MMRESULT WINAPI midiConnect(HMIDI hmi, HMIDIOUT hmo, LPVOID pReserved);
    566 WINMMAPI MMRESULT WINAPI midiDisconnect(HMIDI hmi, HMIDIOUT hmo, LPVOID pReserved);
    567 
    568 WINMMAPI MMRESULT WINAPI midiOutGetDevCapsA(UINT_PTR uDeviceID, LPMIDIOUTCAPSA pmoc, UINT cbmoc);
    569 WINMMAPI MMRESULT WINAPI midiOutGetDevCapsW(UINT_PTR uDeviceID, LPMIDIOUTCAPSW pmoc, UINT cbmoc);
    570 #define midiOutGetDevCaps __MINGW_NAME_AW(midiOutGetDevCaps)
    571 
    572 WINMMAPI MMRESULT WINAPI midiOutGetVolume(HMIDIOUT hmo, LPDWORD pdwVolume);
    573 WINMMAPI MMRESULT WINAPI midiOutSetVolume(HMIDIOUT hmo, DWORD dwVolume);
    574 WINMMAPI MMRESULT WINAPI midiOutGetErrorTextA(MMRESULT mmrError, LPSTR pszText, UINT cchText);
    575 WINMMAPI MMRESULT WINAPI midiOutGetErrorTextW(MMRESULT mmrError, LPWSTR pszText, UINT cchText);
    576 #define midiOutGetErrorText __MINGW_NAME_AW(midiOutGetErrorText)
    577 
    578 WINMMAPI MMRESULT WINAPI midiOutOpen(LPHMIDIOUT phmo, UINT uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen);
    579 WINMMAPI MMRESULT WINAPI midiOutClose(HMIDIOUT hmo);
    580 WINMMAPI MMRESULT WINAPI midiOutPrepareHeader(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh);
    581 WINMMAPI MMRESULT WINAPI midiOutUnprepareHeader(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh);
    582 WINMMAPI MMRESULT WINAPI midiOutShortMsg(HMIDIOUT hmo, DWORD dwMsg);
    583 WINMMAPI MMRESULT WINAPI midiOutLongMsg(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh);
    584 WINMMAPI MMRESULT WINAPI midiOutReset(HMIDIOUT hmo);
    585 WINMMAPI MMRESULT WINAPI midiOutCachePatches(HMIDIOUT hmo, UINT uBank, LPWORD pwpa, UINT fuCache);
    586 WINMMAPI MMRESULT WINAPI midiOutCacheDrumPatches(HMIDIOUT hmo, UINT uPatch, LPWORD pwkya, UINT fuCache);
    587 WINMMAPI MMRESULT WINAPI midiOutGetID(HMIDIOUT hmo, LPUINT puDeviceID);
    588 
    589 WINMMAPI MMRESULT WINAPI midiOutMessage(HMIDIOUT hmo, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2);
    590 
    591 WINMMAPI UINT WINAPI midiInGetNumDevs(void);
    592 
    593 WINMMAPI MMRESULT WINAPI midiInGetDevCapsA(UINT_PTR uDeviceID, LPMIDIINCAPSA pmic, UINT cbmic);
    594 WINMMAPI MMRESULT WINAPI midiInGetDevCapsW(UINT_PTR uDeviceID, LPMIDIINCAPSW pmic, UINT cbmic);
    595 #define midiInGetDevCaps __MINGW_NAME_AW(midiInGetDevCaps)
    596 
    597 WINMMAPI MMRESULT WINAPI midiInGetErrorTextA(MMRESULT mmrError, LPSTR pszText, UINT cchText);
    598 WINMMAPI MMRESULT WINAPI midiInGetErrorTextW(MMRESULT mmrError, LPWSTR pszText, UINT cchText);
    599 #define midiInGetErrorText __MINGW_NAME_AW(midiInGetErrorText)
    600 
    601 WINMMAPI MMRESULT WINAPI midiInOpen(LPHMIDIIN phmi, UINT uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen);
    602 WINMMAPI MMRESULT WINAPI midiInClose(HMIDIIN hmi);
    603 WINMMAPI MMRESULT WINAPI midiInPrepareHeader(HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh);
    604 WINMMAPI MMRESULT WINAPI midiInUnprepareHeader(HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh);
    605 WINMMAPI MMRESULT WINAPI midiInAddBuffer(HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh);
    606 WINMMAPI MMRESULT WINAPI midiInStart(HMIDIIN hmi);
    607 WINMMAPI MMRESULT WINAPI midiInStop(HMIDIIN hmi);
    608 WINMMAPI MMRESULT WINAPI midiInReset(HMIDIIN hmi);
    609 WINMMAPI MMRESULT WINAPI midiInGetID(HMIDIIN hmi, LPUINT puDeviceID);
    610 
    611 WINMMAPI MMRESULT WINAPI midiInMessage(HMIDIIN hmi, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2);
    612 #endif  /* ifndef MMNOMIDI */
    613 
    614 #ifndef MMNOAUX
    615 
    616 #define AUX_MAPPER ((UINT)-1)
    617 
    618 typedef struct tagAUXCAPSA {
    619   WORD wMid;
    620   WORD wPid;
    621   MMVERSION vDriverVersion;
    622   CHAR szPname[MAXPNAMELEN];
    623   WORD wTechnology;
    624   WORD wReserved1;
    625   DWORD dwSupport;
    626 } AUXCAPSA, *PAUXCAPSA, *NPAUXCAPSA, *LPAUXCAPSA;
    627 
    628 typedef struct tagAUXCAPSW {
    629   WORD wMid;
    630   WORD wPid;
    631   MMVERSION vDriverVersion;
    632   WCHAR szPname[MAXPNAMELEN];
    633   WORD wTechnology;
    634   WORD wReserved1;
    635   DWORD dwSupport;
    636 } AUXCAPSW, *PAUXCAPSW, *NPAUXCAPSW, *LPAUXCAPSW;
    637 
    638 __MINGW_TYPEDEF_AW(AUXCAPS)
    639 __MINGW_TYPEDEF_AW(PAUXCAPS)
    640 __MINGW_TYPEDEF_AW(NPAUXCAPS)
    641 __MINGW_TYPEDEF_AW(LPAUXCAPS)
    642 
    643 typedef struct tagAUXCAPS2A {
    644   WORD wMid;
    645   WORD wPid;
    646   MMVERSION vDriverVersion;
    647   CHAR szPname[MAXPNAMELEN];
    648   WORD wTechnology;
    649   WORD wReserved1;
    650   DWORD dwSupport;
    651   GUID ManufacturerGuid;
    652   GUID ProductGuid;
    653   GUID NameGuid;
    654 } AUXCAPS2A, *PAUXCAPS2A, *NPAUXCAPS2A, *LPAUXCAPS2A;
    655 
    656 typedef struct tagAUXCAPS2W {
    657   WORD wMid;
    658   WORD wPid;
    659   MMVERSION vDriverVersion;
    660   WCHAR szPname[MAXPNAMELEN];
    661   WORD wTechnology;
    662   WORD wReserved1;
    663   DWORD dwSupport;
    664   GUID ManufacturerGuid;
    665   GUID ProductGuid;
    666   GUID NameGuid;
    667 } AUXCAPS2W, *PAUXCAPS2W, *NPAUXCAPS2W, *LPAUXCAPS2W;
    668 
    669 __MINGW_TYPEDEF_AW(AUXCAPS2)
    670 __MINGW_TYPEDEF_AW(PAUXCAPS2)
    671 __MINGW_TYPEDEF_AW(NPAUXCAPS2)
    672 __MINGW_TYPEDEF_AW(LPAUXCAPS2)
    673 
    674 #define AUXCAPS_CDAUDIO 1
    675 #define AUXCAPS_AUXIN 2
    676 
    677 #define AUXCAPS_VOLUME 0x0001
    678 #define AUXCAPS_LRVOLUME 0x0002
    679 
    680 WINMMAPI UINT WINAPI auxGetNumDevs(void);
    681 
    682 WINMMAPI MMRESULT WINAPI auxGetDevCapsA(UINT_PTR uDeviceID, LPAUXCAPSA pac, UINT cbac);
    683 WINMMAPI MMRESULT WINAPI auxGetDevCapsW(UINT_PTR uDeviceID, LPAUXCAPSW pac, UINT cbac);
    684 #define auxGetDevCaps __MINGW_NAME_AW(auxGetDevCaps)
    685 
    686 WINMMAPI MMRESULT WINAPI auxSetVolume(UINT uDeviceID, DWORD dwVolume);
    687 WINMMAPI MMRESULT WINAPI auxGetVolume(UINT uDeviceID, LPDWORD pdwVolume);
    688 
    689 WINMMAPI MMRESULT WINAPI auxOutMessage(UINT uDeviceID, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2);
    690 
    691 #endif  /* ifndef MMNOAUX */
    692 
    693 #ifndef MMNOMIXER
    694 
    695 DECLARE_HANDLE(HMIXEROBJ);
    696 typedef HMIXEROBJ *LPHMIXEROBJ;
    697 
    698 DECLARE_HANDLE(HMIXER);
    699 typedef HMIXER *LPHMIXER;
    700 
    701 #define MIXER_SHORT_NAME_CHARS 16
    702 #define MIXER_LONG_NAME_CHARS 64
    703 
    704 #define MIXERR_INVALLINE (MIXERR_BASE + 0)
    705 #define MIXERR_INVALCONTROL (MIXERR_BASE + 1)
    706 #define MIXERR_INVALVALUE (MIXERR_BASE + 2)
    707 #define MIXERR_LASTERROR (MIXERR_BASE + 2)
    708 
    709 #define MIXER_OBJECTF_HANDLE __MSABI_LONG(0x80000000)
    710 #define MIXER_OBJECTF_MIXER __MSABI_LONG(0x00000000)
    711 #define MIXER_OBJECTF_HMIXER (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIXER)
    712 #define MIXER_OBJECTF_WAVEOUT __MSABI_LONG(0x10000000)
    713 #define MIXER_OBJECTF_HWAVEOUT (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEOUT)
    714 #define MIXER_OBJECTF_WAVEIN __MSABI_LONG(0x20000000)
    715 #define MIXER_OBJECTF_HWAVEIN (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEIN)
    716 #define MIXER_OBJECTF_MIDIOUT __MSABI_LONG(0x30000000)
    717 #define MIXER_OBJECTF_HMIDIOUT (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIOUT)
    718 #define MIXER_OBJECTF_MIDIIN __MSABI_LONG(0x40000000)
    719 #define MIXER_OBJECTF_HMIDIIN (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIIN)
    720 #define MIXER_OBJECTF_AUX __MSABI_LONG(0x50000000)
    721 
    722 WINMMAPI UINT WINAPI mixerGetNumDevs(void);
    723 
    724 typedef struct tagMIXERCAPSA {
    725   WORD wMid;
    726   WORD wPid;
    727   MMVERSION vDriverVersion;
    728   CHAR szPname[MAXPNAMELEN];
    729   DWORD fdwSupport;
    730   DWORD cDestinations;
    731 } MIXERCAPSA, *PMIXERCAPSA, *LPMIXERCAPSA;
    732 
    733 typedef struct tagMIXERCAPSW {
    734   WORD wMid;
    735   WORD wPid;
    736   MMVERSION vDriverVersion;
    737   WCHAR szPname[MAXPNAMELEN];
    738   DWORD fdwSupport;
    739   DWORD cDestinations;
    740 } MIXERCAPSW, *PMIXERCAPSW, *LPMIXERCAPSW;
    741 
    742 __MINGW_TYPEDEF_AW(MIXERCAPS)
    743 __MINGW_TYPEDEF_AW(PMIXERCAPS)
    744 __MINGW_TYPEDEF_AW(LPMIXERCAPS)
    745 
    746 typedef struct tagMIXERCAPS2A {
    747   WORD wMid;
    748   WORD wPid;
    749   MMVERSION vDriverVersion;
    750   CHAR szPname[MAXPNAMELEN];
    751   DWORD fdwSupport;
    752   DWORD cDestinations;
    753   GUID ManufacturerGuid;
    754   GUID ProductGuid;
    755   GUID NameGuid;
    756 } MIXERCAPS2A, *PMIXERCAPS2A, *LPMIXERCAPS2A;
    757 
    758 typedef struct tagMIXERCAPS2W {
    759   WORD wMid;
    760   WORD wPid;
    761   MMVERSION vDriverVersion;
    762   WCHAR szPname[MAXPNAMELEN];
    763   DWORD fdwSupport;
    764   DWORD cDestinations;
    765   GUID ManufacturerGuid;
    766   GUID ProductGuid;
    767   GUID NameGuid;
    768 } MIXERCAPS2W, *PMIXERCAPS2W, *LPMIXERCAPS2W;
    769 
    770 __MINGW_TYPEDEF_AW(MIXERCAPS2)
    771 __MINGW_TYPEDEF_AW(PMIXERCAPS2)
    772 __MINGW_TYPEDEF_AW(LPMIXERCAPS2)
    773 
    774 WINMMAPI MMRESULT WINAPI mixerGetDevCapsA(UINT_PTR uMxId, LPMIXERCAPSA pmxcaps, UINT cbmxcaps);
    775 WINMMAPI MMRESULT WINAPI mixerGetDevCapsW(UINT_PTR uMxId, LPMIXERCAPSW pmxcaps, UINT cbmxcaps);
    776 #define mixerGetDevCaps __MINGW_NAME_AW(mixerGetDevCaps)
    777 
    778 WINMMAPI MMRESULT WINAPI mixerOpen(LPHMIXER phmx, UINT uMxId, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen);
    779 WINMMAPI MMRESULT WINAPI mixerClose(HMIXER hmx);
    780 WINMMAPI DWORD WINAPI mixerMessage(HMIXER hmx, UINT uMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2);
    781 
    782 typedef struct tagMIXERLINEA {
    783   DWORD cbStruct;
    784   DWORD dwDestination;
    785   DWORD dwSource;
    786   DWORD dwLineID;
    787   DWORD fdwLine;
    788   DWORD_PTR dwUser;
    789   DWORD dwComponentType;
    790   DWORD cChannels;
    791   DWORD cConnections;
    792   DWORD cControls;
    793   CHAR szShortName[MIXER_SHORT_NAME_CHARS];
    794   CHAR szName[MIXER_LONG_NAME_CHARS];
    795   struct {
    796     DWORD dwType;
    797     DWORD dwDeviceID;
    798     WORD wMid;
    799     WORD wPid;
    800     MMVERSION vDriverVersion;
    801     CHAR szPname[MAXPNAMELEN];
    802   } Target;
    803 } MIXERLINEA, *PMIXERLINEA, *LPMIXERLINEA;
    804 
    805 typedef struct tagMIXERLINEW {
    806   DWORD cbStruct;
    807   DWORD dwDestination;
    808   DWORD dwSource;
    809   DWORD dwLineID;
    810   DWORD fdwLine;
    811   DWORD_PTR dwUser;
    812   DWORD dwComponentType;
    813   DWORD cChannels;
    814   DWORD cConnections;
    815   DWORD cControls;
    816   WCHAR szShortName[MIXER_SHORT_NAME_CHARS];
    817   WCHAR szName[MIXER_LONG_NAME_CHARS];
    818   struct {
    819     DWORD dwType;
    820     DWORD dwDeviceID;
    821     WORD wMid;
    822     WORD wPid;
    823     MMVERSION vDriverVersion;
    824     WCHAR szPname[MAXPNAMELEN];
    825   } Target;
    826 } MIXERLINEW, *PMIXERLINEW, *LPMIXERLINEW;
    827 
    828 __MINGW_TYPEDEF_AW(MIXERLINE)
    829 __MINGW_TYPEDEF_AW(PMIXERLINE)
    830 __MINGW_TYPEDEF_AW(LPMIXERLINE)
    831 
    832 #define MIXERLINE_LINEF_ACTIVE __MSABI_LONG(0x00000001)
    833 #define MIXERLINE_LINEF_DISCONNECTED __MSABI_LONG(0x00008000)
    834 #define MIXERLINE_LINEF_SOURCE __MSABI_LONG(0x80000000)
    835 
    836 #define MIXERLINE_COMPONENTTYPE_DST_FIRST __MSABI_LONG(0x00000000)
    837 #define MIXERLINE_COMPONENTTYPE_DST_UNDEFINED (MIXERLINE_COMPONENTTYPE_DST_FIRST + 0)
    838 #define MIXERLINE_COMPONENTTYPE_DST_DIGITAL (MIXERLINE_COMPONENTTYPE_DST_FIRST + 1)
    839 #define MIXERLINE_COMPONENTTYPE_DST_LINE (MIXERLINE_COMPONENTTYPE_DST_FIRST + 2)
    840 #define MIXERLINE_COMPONENTTYPE_DST_MONITOR (MIXERLINE_COMPONENTTYPE_DST_FIRST + 3)
    841 #define MIXERLINE_COMPONENTTYPE_DST_SPEAKERS (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4)
    842 #define MIXERLINE_COMPONENTTYPE_DST_HEADPHONES (MIXERLINE_COMPONENTTYPE_DST_FIRST + 5)
    843 #define MIXERLINE_COMPONENTTYPE_DST_TELEPHONE (MIXERLINE_COMPONENTTYPE_DST_FIRST + 6)
    844 #define MIXERLINE_COMPONENTTYPE_DST_WAVEIN (MIXERLINE_COMPONENTTYPE_DST_FIRST + 7)
    845 #define MIXERLINE_COMPONENTTYPE_DST_VOICEIN (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
    846 #define MIXERLINE_COMPONENTTYPE_DST_LAST (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
    847 
    848 #define MIXERLINE_COMPONENTTYPE_SRC_FIRST __MSABI_LONG(0x00001000)
    849 #define MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0)
    850 #define MIXERLINE_COMPONENTTYPE_SRC_DIGITAL (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1)
    851 #define MIXERLINE_COMPONENTTYPE_SRC_LINE (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)
    852 #define MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3)
    853 #define MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4)
    854 #define MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5)
    855 #define MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6)
    856 #define MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7)
    857 #define MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8)
    858 #define MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 9)
    859 #define MIXERLINE_COMPONENTTYPE_SRC_ANALOG (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
    860 #define MIXERLINE_COMPONENTTYPE_SRC_LAST (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
    861 
    862 #define MIXERLINE_TARGETTYPE_UNDEFINED 0
    863 #define MIXERLINE_TARGETTYPE_WAVEOUT 1
    864 #define MIXERLINE_TARGETTYPE_WAVEIN 2
    865 #define MIXERLINE_TARGETTYPE_MIDIOUT 3
    866 #define MIXERLINE_TARGETTYPE_MIDIIN 4
    867 #define MIXERLINE_TARGETTYPE_AUX 5
    868 
    869 WINMMAPI MMRESULT WINAPI mixerGetLineInfoA(HMIXEROBJ hmxobj, LPMIXERLINEA pmxl, DWORD fdwInfo);
    870 WINMMAPI MMRESULT WINAPI mixerGetLineInfoW(HMIXEROBJ hmxobj, LPMIXERLINEW pmxl, DWORD fdwInfo);
    871 #define mixerGetLineInfo __MINGW_NAME_AW(mixerGetLineInfo)
    872 
    873 #define MIXER_GETLINEINFOF_DESTINATION __MSABI_LONG(0x00000000)
    874 #define MIXER_GETLINEINFOF_SOURCE __MSABI_LONG(0x00000001)
    875 #define MIXER_GETLINEINFOF_LINEID __MSABI_LONG(0x00000002)
    876 #define MIXER_GETLINEINFOF_COMPONENTTYPE __MSABI_LONG(0x00000003)
    877 #define MIXER_GETLINEINFOF_TARGETTYPE __MSABI_LONG(0x00000004)
    878 
    879 #define MIXER_GETLINEINFOF_QUERYMASK __MSABI_LONG(0x0000000F)
    880 
    881 WINMMAPI MMRESULT WINAPI mixerGetID(HMIXEROBJ hmxobj, UINT *puMxId, DWORD fdwId);
    882 
    883 typedef struct tagMIXERCONTROLA {
    884   DWORD cbStruct;
    885   DWORD dwControlID;
    886   DWORD dwControlType;
    887   DWORD fdwControl;
    888   DWORD cMultipleItems;
    889   CHAR szShortName[MIXER_SHORT_NAME_CHARS];
    890   CHAR szName[MIXER_LONG_NAME_CHARS];
    891   union {
    892     __C89_NAMELESS struct {
    893       LONG lMinimum;
    894       LONG lMaximum;
    895     };
    896     __C89_NAMELESS struct {
    897       DWORD dwMinimum;
    898       DWORD dwMaximum;
    899     };
    900     DWORD dwReserved[6];
    901   } Bounds;
    902   union {
    903     DWORD cSteps;
    904     DWORD cbCustomData;
    905     DWORD dwReserved[6];
    906   } Metrics;
    907 } MIXERCONTROLA, *PMIXERCONTROLA, *LPMIXERCONTROLA;
    908 
    909 typedef struct tagMIXERCONTROLW {
    910   DWORD cbStruct;
    911   DWORD dwControlID;
    912   DWORD dwControlType;
    913   DWORD fdwControl;
    914   DWORD cMultipleItems;
    915   WCHAR szShortName[MIXER_SHORT_NAME_CHARS];
    916   WCHAR szName[MIXER_LONG_NAME_CHARS];
    917   union {
    918     __C89_NAMELESS struct {
    919       LONG lMinimum;
    920       LONG lMaximum;
    921     };
    922     __C89_NAMELESS struct {
    923       DWORD dwMinimum;
    924       DWORD dwMaximum;
    925     };
    926     DWORD dwReserved[6];
    927   } Bounds;
    928   union {
    929     DWORD cSteps;
    930     DWORD cbCustomData;
    931     DWORD dwReserved[6];
    932   } Metrics;
    933 } MIXERCONTROLW, *PMIXERCONTROLW, *LPMIXERCONTROLW;
    934 
    935 __MINGW_TYPEDEF_AW(MIXERCONTROL)
    936 __MINGW_TYPEDEF_AW(PMIXERCONTROL)
    937 __MINGW_TYPEDEF_AW(LPMIXERCONTROL)
    938 
    939 #define MIXERCONTROL_CONTROLF_UNIFORM __MSABI_LONG(0x00000001)
    940 #define MIXERCONTROL_CONTROLF_MULTIPLE __MSABI_LONG(0x00000002)
    941 #define MIXERCONTROL_CONTROLF_DISABLED __MSABI_LONG(0x80000000)
    942 
    943 #define MIXERCONTROL_CT_CLASS_MASK __MSABI_LONG(0xF0000000)
    944 #define MIXERCONTROL_CT_CLASS_CUSTOM __MSABI_LONG(0x00000000)
    945 #define MIXERCONTROL_CT_CLASS_METER __MSABI_LONG(0x10000000)
    946 #define MIXERCONTROL_CT_CLASS_SWITCH __MSABI_LONG(0x20000000)
    947 #define MIXERCONTROL_CT_CLASS_NUMBER __MSABI_LONG(0x30000000)
    948 #define MIXERCONTROL_CT_CLASS_SLIDER __MSABI_LONG(0x40000000)
    949 #define MIXERCONTROL_CT_CLASS_FADER __MSABI_LONG(0x50000000)
    950 #define MIXERCONTROL_CT_CLASS_TIME __MSABI_LONG(0x60000000)
    951 #define MIXERCONTROL_CT_CLASS_LIST __MSABI_LONG(0x70000000)
    952 
    953 #define MIXERCONTROL_CT_SUBCLASS_MASK __MSABI_LONG(0x0F000000)
    954 
    955 #define MIXERCONTROL_CT_SC_SWITCH_BOOLEAN __MSABI_LONG(0x00000000)
    956 #define MIXERCONTROL_CT_SC_SWITCH_BUTTON __MSABI_LONG(0x01000000)
    957 
    958 #define MIXERCONTROL_CT_SC_METER_POLLED __MSABI_LONG(0x00000000)
    959 
    960 #define MIXERCONTROL_CT_SC_TIME_MICROSECS __MSABI_LONG(0x00000000)
    961 #define MIXERCONTROL_CT_SC_TIME_MILLISECS __MSABI_LONG(0x01000000)
    962 
    963 #define MIXERCONTROL_CT_SC_LIST_SINGLE __MSABI_LONG(0x00000000)
    964 #define MIXERCONTROL_CT_SC_LIST_MULTIPLE __MSABI_LONG(0x01000000)
    965 
    966 #define MIXERCONTROL_CT_UNITS_MASK __MSABI_LONG(0x00FF0000)
    967 #define MIXERCONTROL_CT_UNITS_CUSTOM __MSABI_LONG(0x00000000)
    968 #define MIXERCONTROL_CT_UNITS_BOOLEAN __MSABI_LONG(0x00010000)
    969 #define MIXERCONTROL_CT_UNITS_SIGNED __MSABI_LONG(0x00020000)
    970 #define MIXERCONTROL_CT_UNITS_UNSIGNED __MSABI_LONG(0x00030000)
    971 #define MIXERCONTROL_CT_UNITS_DECIBELS __MSABI_LONG(0x00040000)
    972 #define MIXERCONTROL_CT_UNITS_PERCENT __MSABI_LONG(0x00050000)
    973 
    974 #define MIXERCONTROL_CONTROLTYPE_CUSTOM (MIXERCONTROL_CT_CLASS_CUSTOM | MIXERCONTROL_CT_UNITS_CUSTOM)
    975 #define MIXERCONTROL_CONTROLTYPE_BOOLEANMETER (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_BOOLEAN)
    976 #define MIXERCONTROL_CONTROLTYPE_SIGNEDMETER (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_SIGNED)
    977 #define MIXERCONTROL_CONTROLTYPE_PEAKMETER (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1)
    978 #define MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_UNSIGNED)
    979 #define MIXERCONTROL_CONTROLTYPE_BOOLEAN (MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BOOLEAN | MIXERCONTROL_CT_UNITS_BOOLEAN)
    980 #define MIXERCONTROL_CONTROLTYPE_ONOFF (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 1)
    981 #define MIXERCONTROL_CONTROLTYPE_MUTE (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 2)
    982 #define MIXERCONTROL_CONTROLTYPE_MONO (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 3)
    983 #define MIXERCONTROL_CONTROLTYPE_LOUDNESS (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 4)
    984 #define MIXERCONTROL_CONTROLTYPE_STEREOENH (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 5)
    985 #define MIXERCONTROL_CONTROLTYPE_BASS_BOOST (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 0x00002277)
    986 #define MIXERCONTROL_CONTROLTYPE_BUTTON (MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BUTTON | MIXERCONTROL_CT_UNITS_BOOLEAN)
    987 #define MIXERCONTROL_CONTROLTYPE_DECIBELS (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_DECIBELS)
    988 #define MIXERCONTROL_CONTROLTYPE_SIGNED (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_SIGNED)
    989 #define MIXERCONTROL_CONTROLTYPE_UNSIGNED (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_UNSIGNED)
    990 #define MIXERCONTROL_CONTROLTYPE_PERCENT (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_PERCENT)
    991 #define MIXERCONTROL_CONTROLTYPE_SLIDER (MIXERCONTROL_CT_CLASS_SLIDER | MIXERCONTROL_CT_UNITS_SIGNED)
    992 #define MIXERCONTROL_CONTROLTYPE_PAN (MIXERCONTROL_CONTROLTYPE_SLIDER + 1)
    993 #define MIXERCONTROL_CONTROLTYPE_QSOUNDPAN (MIXERCONTROL_CONTROLTYPE_SLIDER + 2)
    994 #define MIXERCONTROL_CONTROLTYPE_FADER (MIXERCONTROL_CT_CLASS_FADER | MIXERCONTROL_CT_UNITS_UNSIGNED)
    995 #define MIXERCONTROL_CONTROLTYPE_VOLUME (MIXERCONTROL_CONTROLTYPE_FADER + 1)
    996 #define MIXERCONTROL_CONTROLTYPE_BASS (MIXERCONTROL_CONTROLTYPE_FADER + 2)
    997 #define MIXERCONTROL_CONTROLTYPE_TREBLE (MIXERCONTROL_CONTROLTYPE_FADER + 3)
    998 #define MIXERCONTROL_CONTROLTYPE_EQUALIZER (MIXERCONTROL_CONTROLTYPE_FADER + 4)
    999 #define MIXERCONTROL_CONTROLTYPE_SINGLESELECT (MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_SINGLE | MIXERCONTROL_CT_UNITS_BOOLEAN)
   1000 #define MIXERCONTROL_CONTROLTYPE_MUX (MIXERCONTROL_CONTROLTYPE_SINGLESELECT + 1)
   1001 #define MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT (MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_MULTIPLE | MIXERCONTROL_CT_UNITS_BOOLEAN)
   1002 #define MIXERCONTROL_CONTROLTYPE_MIXER (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT + 1)
   1003 #define MIXERCONTROL_CONTROLTYPE_MICROTIME (MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MICROSECS | MIXERCONTROL_CT_UNITS_UNSIGNED)
   1004 #define MIXERCONTROL_CONTROLTYPE_MILLITIME (MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MILLISECS | MIXERCONTROL_CT_UNITS_UNSIGNED)
   1005 
   1006 typedef struct tagMIXERLINECONTROLSA {
   1007   DWORD cbStruct;
   1008   DWORD dwLineID;
   1009   __C89_NAMELESS union {
   1010     DWORD dwControlID;
   1011     DWORD dwControlType;
   1012   };
   1013   DWORD cControls;
   1014   DWORD cbmxctrl;
   1015   LPMIXERCONTROLA pamxctrl;
   1016 } MIXERLINECONTROLSA, *PMIXERLINECONTROLSA, *LPMIXERLINECONTROLSA;
   1017 
   1018 typedef struct tagMIXERLINECONTROLSW {
   1019   DWORD cbStruct;
   1020   DWORD dwLineID;
   1021   __C89_NAMELESS union {
   1022     DWORD dwControlID;
   1023     DWORD dwControlType;
   1024   };
   1025   DWORD cControls;
   1026   DWORD cbmxctrl;
   1027   LPMIXERCONTROLW pamxctrl;
   1028 } MIXERLINECONTROLSW, *PMIXERLINECONTROLSW, *LPMIXERLINECONTROLSW;
   1029 
   1030 __MINGW_TYPEDEF_AW(MIXERLINECONTROLS)
   1031 __MINGW_TYPEDEF_AW(PMIXERLINECONTROLS)
   1032 __MINGW_TYPEDEF_AW(LPMIXERLINECONTROLS)
   1033 
   1034 WINMMAPI MMRESULT WINAPI mixerGetLineControlsA(HMIXEROBJ hmxobj, LPMIXERLINECONTROLSA pmxlc, DWORD fdwControls);
   1035 WINMMAPI MMRESULT WINAPI mixerGetLineControlsW(HMIXEROBJ hmxobj, LPMIXERLINECONTROLSW pmxlc, DWORD fdwControls);
   1036 #define mixerGetLineControls __MINGW_NAME_AW(mixerGetLineControls)
   1037 
   1038 #define MIXER_GETLINECONTROLSF_ALL __MSABI_LONG(0x00000000)
   1039 #define MIXER_GETLINECONTROLSF_ONEBYID __MSABI_LONG(0x00000001)
   1040 #define MIXER_GETLINECONTROLSF_ONEBYTYPE __MSABI_LONG(0x00000002)
   1041 
   1042 #define MIXER_GETLINECONTROLSF_QUERYMASK __MSABI_LONG(0x0000000F)
   1043 
   1044 typedef struct tMIXERCONTROLDETAILS {
   1045   DWORD cbStruct;
   1046   DWORD dwControlID;
   1047   DWORD cChannels;
   1048   __C89_NAMELESS union {
   1049     HWND hwndOwner;
   1050     DWORD cMultipleItems;
   1051   };
   1052   DWORD cbDetails;
   1053   LPVOID paDetails;
   1054 } MIXERCONTROLDETAILS, *PMIXERCONTROLDETAILS, *LPMIXERCONTROLDETAILS;
   1055 
   1056 typedef struct tagMIXERCONTROLDETAILS_LISTTEXTA {
   1057   DWORD dwParam1;
   1058   DWORD dwParam2;
   1059   CHAR szName[MIXER_LONG_NAME_CHARS];
   1060 } MIXERCONTROLDETAILS_LISTTEXTA, *PMIXERCONTROLDETAILS_LISTTEXTA, *LPMIXERCONTROLDETAILS_LISTTEXTA;
   1061 
   1062 typedef struct tagMIXERCONTROLDETAILS_LISTTEXTW {
   1063   DWORD dwParam1;
   1064   DWORD dwParam2;
   1065   WCHAR szName[MIXER_LONG_NAME_CHARS];
   1066 } MIXERCONTROLDETAILS_LISTTEXTW, *PMIXERCONTROLDETAILS_LISTTEXTW, *LPMIXERCONTROLDETAILS_LISTTEXTW;
   1067 
   1068 __MINGW_TYPEDEF_AW(MIXERCONTROLDETAILS_LISTTEXT)
   1069 __MINGW_TYPEDEF_AW(PMIXERCONTROLDETAILS_LISTTEXT)
   1070 __MINGW_TYPEDEF_AW(LPMIXERCONTROLDETAILS_LISTTEXT)
   1071 
   1072 typedef struct tMIXERCONTROLDETAILS_BOOLEAN {
   1073   LONG fValue;
   1074 } MIXERCONTROLDETAILS_BOOLEAN, *PMIXERCONTROLDETAILS_BOOLEAN, *LPMIXERCONTROLDETAILS_BOOLEAN;
   1075 
   1076 typedef struct tMIXERCONTROLDETAILS_SIGNED {
   1077   LONG lValue;
   1078 } MIXERCONTROLDETAILS_SIGNED, *PMIXERCONTROLDETAILS_SIGNED, *LPMIXERCONTROLDETAILS_SIGNED;
   1079 
   1080 typedef struct tMIXERCONTROLDETAILS_UNSIGNED {
   1081   DWORD dwValue;
   1082 } MIXERCONTROLDETAILS_UNSIGNED, *PMIXERCONTROLDETAILS_UNSIGNED, *LPMIXERCONTROLDETAILS_UNSIGNED;
   1083 
   1084 WINMMAPI MMRESULT WINAPI mixerGetControlDetailsA(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails);
   1085 WINMMAPI MMRESULT WINAPI mixerGetControlDetailsW(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails);
   1086 #define mixerGetControlDetails __MINGW_NAME_AW(mixerGetControlDetails)
   1087 
   1088 #define MIXER_GETCONTROLDETAILSF_VALUE __MSABI_LONG(0x00000000)
   1089 #define MIXER_GETCONTROLDETAILSF_LISTTEXT __MSABI_LONG(0x00000001)
   1090 
   1091 #define MIXER_GETCONTROLDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F)
   1092 
   1093 WINMMAPI MMRESULT WINAPI mixerSetControlDetails(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails);
   1094 
   1095 #define MIXER_SETCONTROLDETAILSF_VALUE __MSABI_LONG(0x00000000)
   1096 #define MIXER_SETCONTROLDETAILSF_CUSTOM __MSABI_LONG(0x00000001)
   1097 
   1098 #define MIXER_SETCONTROLDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F)
   1099 
   1100 #endif /* ifndef MMNOMIXER */
   1101 
   1102 #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
   1103 
   1104 #ifdef __cplusplus
   1105 }
   1106 #endif
   1107 
   1108 #endif /* _MMEAPI_H_ */