msacm.pas 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851
  1. unit MSACM;
  2. // ----------------------------------------------------------------------
  3. //
  4. // msacm.pas
  5. //
  6. // Description:
  7. //
  8. // Audio Compression Manager Public Header File
  9. //
  10. // Converted for Delphi 2.x by Armin Sander, Digital SimpleX
  11. // (armin@dsx.de)
  12. //
  13. // please mail any changes and fixes!
  14. //
  15. // History:
  16. //
  17. // 1.0 - first official release (3 Feb 1997)
  18. //
  19. // Disclaimer:
  20. //
  21. // This product is supplied as is. The author disclaims all warranties,
  22. // expressed or implied, including, without limitation, the warranties
  23. // of merchantability and of fitness for any purpose. The author assumes
  24. // no liability for damages, direct or consequential, which may result
  25. // from the use of this product.
  26. //
  27. // ----------------------------------------------------------------------
  28. interface
  29. uses Windows, MMSystem;
  30. // MMREG include
  31. const
  32. WAVE_FILTER_UNKNOWN = $0000;
  33. WAVE_FILTER_DEVELOPMENT = ($FFFF);
  34. type
  35. PWAVEFILTER = ^TWAVEFILTER;
  36. TWAVEFILTER = packed record
  37. cbStruct : DWORD ; // Size of the filter in bytes
  38. dwFilterTag : DWORD ; // filter type
  39. fdwFilter : DWORD ; // Flags for the filter (Universal Dfns)
  40. dwReserved : array [0..5] of DWORD; // Reserved for system use
  41. end;
  42. const
  43. DRV_MAPPER_PREFERRED_INPUT_GET = (DRV_USER + 0);
  44. const
  45. DRV_MAPPER_PREFERRED_OUTPUT_GET = (DRV_USER + 2);
  46. DRVM_MAPPER_STATUS = $2000;
  47. const
  48. WIDM_MAPPER_STATUS = (DRVM_MAPPER_STATUS + 0);
  49. WAVEIN_MAPPER_STATUS_DEVICE = 0;
  50. WAVEIN_MAPPER_STATUS_MAPPED = 1;
  51. WAVEIN_MAPPER_STATUS_FORMAT = 2;
  52. const
  53. WODM_MAPPER_STATUS = (DRVM_MAPPER_STATUS + 0);
  54. WAVEOUT_MAPPER_STATUS_DEVICE = 0;
  55. WAVEOUT_MAPPER_STATUS_MAPPED = 1;
  56. WAVEOUT_MAPPER_STATUS_FORMAT = 2;
  57. type
  58. HACMDRIVERID = THandle;
  59. PHACMDRIVERID = ^HACMDRIVERID;
  60. type
  61. HACMDRIVER = THandle;
  62. PHACMDRIVER = ^HACMDRIVER;
  63. type
  64. HACMSTREAM = THandle;
  65. PHACMSTREAM = ^HACMSTREAM;
  66. type
  67. HACMOBJ = THandle;
  68. PHACMOBJ = ^HACMOBJ;
  69. const
  70. ACMERR_BASE = (512);
  71. ACMERR_NOTPOSSIBLE = (ACMERR_BASE + 0);
  72. ACMERR_BUSY = (ACMERR_BASE + 1);
  73. ACMERR_UNPREPARED = (ACMERR_BASE + 2);
  74. ACMERR_CANCELED = (ACMERR_BASE + 3);
  75. const
  76. MM_ACM_OPEN = (MM_STREAM_OPEN); // conversion callback messages
  77. MM_ACM_CLOSE = (MM_STREAM_CLOSE);
  78. MM_ACM_DONE = (MM_STREAM_DONE);
  79. function acmGetVersion : DWORD; stdcall;
  80. function acmMetrics(hao : HACMOBJ; uMetric : UINT; var pMetric) : MMRESULT; stdcall;
  81. const
  82. ACM_METRIC_COUNT_DRIVERS = 1;
  83. ACM_METRIC_COUNT_CODECS = 2;
  84. ACM_METRIC_COUNT_CONVERTERS = 3;
  85. ACM_METRIC_COUNT_FILTERS = 4;
  86. ACM_METRIC_COUNT_DISABLED = 5;
  87. ACM_METRIC_COUNT_HARDWARE = 6;
  88. ACM_METRIC_COUNT_LOCAL_DRIVERS = 20;
  89. ACM_METRIC_COUNT_LOCAL_CODECS = 21;
  90. ACM_METRIC_COUNT_LOCAL_CONVERTERS = 22;
  91. ACM_METRIC_COUNT_LOCAL_FILTERS = 23;
  92. ACM_METRIC_COUNT_LOCAL_DISABLED = 24;
  93. ACM_METRIC_HARDWARE_WAVE_INPUT = 30;
  94. ACM_METRIC_HARDWARE_WAVE_OUTPUT = 31;
  95. ACM_METRIC_MAX_SIZE_FORMAT = 50;
  96. ACM_METRIC_MAX_SIZE_FILTER = 51;
  97. ACM_METRIC_DRIVER_SUPPORT = 100;
  98. ACM_METRIC_DRIVER_PRIORITY = 101;
  99. type
  100. ACMDRIVERENUMCB = function(hadid : HACMDRIVERID; dwInstance : DWORD; fdwSupport : DWORD) : BOOL; stdcall;
  101. function acmDriverEnum(fnCallback : ACMDRIVERENUMCB; dwInstance : DWORD; fdwEnum : DWORD) : MMRESULT; stdcall;
  102. const
  103. ACM_DRIVERENUMF_NOLOCAL = $40000000;
  104. ACM_DRIVERENUMF_DISABLED = $80000000;
  105. function acmDriverID(hao : HACMOBJ; var phadid : HACMDRIVERID; fdwDriverID : DWORD) : MMRESULT; stdcall;
  106. function acmDriverAddA(var phadid : HACMDRIVERID; hinstModule : THandle; lParam : LPARAM; dwPriority : DWORD; fdwAdd : DWORD) : MMRESULT; stdcall;
  107. function acmDriverAddW(var phadid : HACMDRIVERID; hinstModule : THandle; lParam : LPARAM; dwPriority : DWORD; fdwAdd : DWORD) : MMRESULT; stdcall;
  108. function acmDriverAdd(var phadid : HACMDRIVERID; hinstModule : THandle; lParam : LPARAM; dwPriority : DWORD; fdwAdd : DWORD) : MMRESULT; stdcall;
  109. const
  110. ACM_DRIVERADDF_FUNCTION = $00000003; // lParam is a procedure
  111. ACM_DRIVERADDF_NOTIFYHWND = $00000004; // lParam is notify hwnd
  112. ACM_DRIVERADDF_TYPEMASK = $00000007; // driver type mask
  113. ACM_DRIVERADDF_LOCAL = $00000000; // is local to current task
  114. ACM_DRIVERADDF_GLOBAL = $00000008; // is global
  115. type
  116. ACMDRIVERPROC = function(_0 : DWORD; _1 : HACMDRIVERID; _2 : UINT; _3 : LPARAM; _4 : LPARAM) : LRESULT; stdcall;
  117. LPACMDRIVERPROC = ^ACMDRIVERPROC;
  118. function acmDriverRemove(hadid : HACMDRIVERID; fdwRemove : DWORD) : MMRESULT; stdcall;
  119. function acmDriverOpen(var phad : HACMDRIVER; hadid : HACMDRIVERID; fdwOpen : DWORD) : MMRESULT; stdcall;
  120. function acmDriverClose(had : HACMDRIVER; fdwClose : DWORD) : MMRESULT; stdcall;
  121. function acmDriverMessage(had : HACMDRIVER; uMsg : UINT; lParam1 : LPARAM; lParam2 : LPARAM) : LRESULT; stdcall;
  122. const
  123. ACMDM_USER = (DRV_USER + $0000);
  124. ACMDM_RESERVED_LOW = (DRV_USER + $2000);
  125. ACMDM_RESERVED_HIGH = (DRV_USER + $2FFF);
  126. ACMDM_BASE = ACMDM_RESERVED_LOW;
  127. ACMDM_DRIVER_ABOUT = (ACMDM_BASE + 11);
  128. function acmDriverPriority(hadid : HACMDRIVERID; dwPriority : DWORD; fdwPriority : DWORD) : MMRESULT; stdcall;
  129. const
  130. ACM_DRIVERPRIORITYF_ENABLE = $00000001;
  131. ACM_DRIVERPRIORITYF_DISABLE = $00000002;
  132. ACM_DRIVERPRIORITYF_ABLEMASK = $00000003;
  133. ACM_DRIVERPRIORITYF_BEGIN = $00010000;
  134. ACM_DRIVERPRIORITYF_END = $00020000;
  135. ACM_DRIVERPRIORITYF_DEFERMASK = $00030000;
  136. const
  137. ACMDRIVERDETAILS_SHORTNAME_CHARS = 32;
  138. ACMDRIVERDETAILS_LONGNAME_CHARS = 128;
  139. ACMDRIVERDETAILS_COPYRIGHT_CHARS = 80;
  140. ACMDRIVERDETAILS_LICENSING_CHARS = 128;
  141. ACMDRIVERDETAILS_FEATURES_CHARS = 512;
  142. type
  143. PACMDRIVERDETAILSA = ^TACMDRIVERDETAILSA;
  144. TACMDRIVERDETAILSA = packed record
  145. cbStruct : DWORD; // number of valid bytes in structure
  146. fccType : FOURCC; // compressor type 'audc'
  147. fccComp : FOURCC; // sub-type (not used; reserved)
  148. wMid : WORD; // manufacturer id
  149. wPid : WORD; // product id
  150. vdwACM : DWORD; // version of the ACM *compiled* for
  151. vdwDriver : DWORD; // version of the driver
  152. fdwSupport : DWORD; // misc. support flags
  153. cFormatTags : DWORD; // total unique format tags supported
  154. cFilterTags : DWORD; // total unique filter tags supported
  155. hicon : HICON; // handle to custom icon
  156. szShortName : array[0..ACMDRIVERDETAILS_SHORTNAME_CHARS-1] of char;
  157. szLongName : array[0..ACMDRIVERDETAILS_LONGNAME_CHARS-1] of char;
  158. szCopyright : array[0..ACMDRIVERDETAILS_COPYRIGHT_CHARS-1] of char;
  159. szLicensing : array[0..ACMDRIVERDETAILS_LICENSING_CHARS-1] of char;
  160. szFeatures : array[0..ACMDRIVERDETAILS_FEATURES_CHARS-1] of char;
  161. end;
  162. type
  163. PACMDRIVERDETAILSW = ^TACMDRIVERDETAILSW;
  164. TACMDRIVERDETAILSW = packed record
  165. cbStruct : DWORD; // number of valid bytes in structure
  166. fccType : FOURCC; // compressor type 'audc'
  167. fccComp : FOURCC; // sub-type (not used; reserved)
  168. wMid : WORD; // manufacturer id
  169. wPid : WORD; // product id
  170. vdwACM : DWORD; // version of the ACM *compiled* for
  171. vdwDriver : DWORD; // version of the driver
  172. fdwSupport : DWORD; // misc. support flags
  173. cFormatTags : DWORD; // total unique format tags supported
  174. cFilterTags : DWORD; // total unique filter tags supported
  175. hicon : HICON; // handle to custom icon
  176. szShortName : array[0..ACMDRIVERDETAILS_SHORTNAME_CHARS-1] of wchar;
  177. szLongName : array[0..ACMDRIVERDETAILS_LONGNAME_CHARS-1] of wchar;
  178. szCopyright : array[0..ACMDRIVERDETAILS_COPYRIGHT_CHARS-1] of wchar;
  179. szLicensing : array[0..ACMDRIVERDETAILS_LICENSING_CHARS-1] of wchar;
  180. szFeatures : array[0..ACMDRIVERDETAILS_FEATURES_CHARS-1] of wchar;
  181. end;
  182. type
  183. TACMDRIVERDETAILS = TACMDRIVERDETAILSA;
  184. PACMDRIVERDETAILS = PACMDRIVERDETAILSA;
  185. const
  186. // ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC = mmioFOURCC('a', 'u', 'd', 'c');
  187. ACMDRIVERDETAILS_FCCCOMP_UNDEFINED = 0;
  188. function ACMDRIVERDETAILS_FCCTYPE_AUDIOCODE : FOURCC;
  189. const
  190. ACMDRIVERDETAILS_SUPPORTF_CODEC = $00000001;
  191. ACMDRIVERDETAILS_SUPPORTF_CONVERTER = $00000002;
  192. ACMDRIVERDETAILS_SUPPORTF_FILTER = $00000004;
  193. ACMDRIVERDETAILS_SUPPORTF_HARDWARE = $00000008;
  194. ACMDRIVERDETAILS_SUPPORTF_ASYNC = $00000010;
  195. ACMDRIVERDETAILS_SUPPORTF_LOCAL = $40000000;
  196. ACMDRIVERDETAILS_SUPPORTF_DISABLED = $80000000;
  197. function acmDriverDetailsA(hadid : HACMDRIVERID; var padd : TACMDRIVERDETAILSA; fdwDetails : DWORD) : MMRESULT; stdcall;
  198. function acmDriverDetailsW(hadid : HACMDRIVERID; var padd : TACMDRIVERDETAILSW; fdwDetails : DWORD) : MMRESULT; stdcall;
  199. function acmDriverDetails(hadid : HACMDRIVERID; var padd : TACMDRIVERDETAILS; fdwDetails : DWORD) : MMRESULT; stdcall;
  200. const
  201. ACMFORMATTAGDETAILS_FORMATTAG_CHARS = 48;
  202. type
  203. PACMFORMATTAGDETAILSA = ^TACMFORMATTAGDETAILSA;
  204. TACMFORMATTAGDETAILSA = packed record
  205. cbStruct : DWORD;
  206. dwFormatTagIndex : DWORD;
  207. dwFormatTag : DWORD;
  208. cbFormatSize : DWORD;
  209. fdwSupport : DWORD;
  210. cStandardFormats : DWORD;
  211. szFormatTag : array[0..ACMFORMATTAGDETAILS_FORMATTAG_CHARS-1] of char;
  212. end;
  213. type
  214. PACMFORMATTAGDETAILSW = ^TACMFORMATTAGDETAILSW;
  215. TACMFORMATTAGDETAILSW = packed record
  216. cbStruct : DWORD;
  217. dwFormatTagIndex : DWORD;
  218. dwFormatTag : DWORD;
  219. cbFormatSize : DWORD;
  220. fdwSupport : DWORD;
  221. cStandardFormats : DWORD;
  222. szFormatTag : array[0..ACMFORMATTAGDETAILS_FORMATTAG_CHARS-1] of wchar;
  223. end;
  224. type
  225. TACMFORMATTAGDETAILS = TACMFORMATTAGDETAILSA;
  226. PACMFORMATTAGDETAILS = PACMFORMATTAGDETAILSA;
  227. function acmFormatTagDetailsA(had : HACMDRIVER; var paftd : TACMFORMATTAGDETAILSA; fdwDetails : DWORD) : MMRESULT; stdcall;
  228. function acmFormatTagDetailsW(had : HACMDRIVER; var paftd : TACMFORMATTAGDETAILSW; fdwDetails : DWORD) : MMRESULT; stdcall;
  229. function acmFormatTagDetails(had : HACMDRIVER; var paftd : TACMFORMATTAGDETAILS; fdwDetails : DWORD) : MMRESULT; stdcall;
  230. const
  231. ACM_FORMATTAGDETAILSF_INDEX = $00000000;
  232. ACM_FORMATTAGDETAILSF_FORMATTAG = $00000001;
  233. ACM_FORMATTAGDETAILSF_LARGESTSIZE = $00000002;
  234. ACM_FORMATTAGDETAILSF_QUERYMASK = $0000000F;
  235. type
  236. ACMFORMATTAGENUMCBA = function(hadid : HACMDRIVERID; const paftd : TACMFORMATTAGDETAILSA; dwInstance : DWORD; fdwSupport : DWORD) : BOOL; stdcall;
  237. function acmFormatTagEnumA(had : HACMDRIVER; var paftd : TACMFORMATTAGDETAILSA; fnCallback : ACMFORMATTAGENUMCBA; dwInstance : DWORD; fdwEnum : DWORD) : MMRESULT; stdcall;
  238. type
  239. ACMFORMATTAGENUMCBW = function(hadid : HACMDRIVERID; const paftd : TACMFORMATTAGDETAILSW; dwInstance : DWORD; fdwSupport : DWORD) : BOOL; stdcall;
  240. function acmFormatTagEnumW(had : HACMDRIVER; var paftd : TACMFORMATTAGDETAILSW; fnCallback : ACMFORMATTAGENUMCBW; dwInstance : DWORD; fdwEnum : DWORD) : MMRESULT; stdcall;
  241. type
  242. ACMFORMATTAGENUMCB = ACMFORMATTAGENUMCBA;
  243. function acmFormatTagEnum(had : HACMDRIVER; var paftd : TACMFORMATTAGDETAILS; fnCallback : ACMFORMATTAGENUMCB; dwInstance : DWORD; fdwEnum : DWORD) : MMRESULT; stdcall;
  244. const
  245. ACMFORMATDETAILS_FORMAT_CHARS = 128;
  246. type
  247. PACMFORMATDETAILSA = ^TACMFORMATDETAILSA;
  248. TACMFORMATDETAILSA = packed record
  249. cbStruct : DWORD;
  250. dwFormatIndex : DWORD;
  251. dwFormatTag : DWORD;
  252. fdwSupport : DWORD;
  253. pwfx : PWAVEFORMATEX;
  254. cbwfx : DWORD;
  255. szFormat : array[0..ACMFORMATDETAILS_FORMAT_CHARS-1] of char;
  256. end;
  257. type
  258. PACMFORMATDETAILSW = ^TACMFORMATDETAILSW;
  259. TACMFORMATDETAILSW = packed record
  260. cbStruct : DWORD;
  261. dwFormatIndex : DWORD;
  262. dwFormatTag : DWORD;
  263. fdwSupport : DWORD;
  264. pwfx : PWAVEFORMATEX;
  265. cbwfx : DWORD;
  266. szFormat : array[0..ACMFORMATDETAILS_FORMAT_CHARS-1] of wchar;
  267. end;
  268. type
  269. PACMFORMATDETAILS = PACMFORMATDETAILSA;
  270. TACMFORMATDETAILS = TACMFORMATDETAILSA;
  271. function acmFormatDetailsA(had : HACMDRIVER; var pafd : TACMFORMATDETAILSA; fdwDetails : DWORD) : MMRESULT; stdcall;
  272. function acmFormatDetailsW(had : HACMDRIVER; var pafd : TACMFORMATDETAILSW; fdwDetails : DWORD) : MMRESULT; stdcall;
  273. function acmFormatDetails(had : HACMDRIVER; var pafd : TACMFORMATDETAILS; fdwDetails : DWORD) : MMRESULT; stdcall;
  274. const
  275. ACM_FORMATDETAILSF_INDEX = $00000000;
  276. ACM_FORMATDETAILSF_FORMAT = $00000001;
  277. ACM_FORMATDETAILSF_QUERYMASK = $0000000F;
  278. type
  279. ACMFORMATENUMCBA = function(hadid : HACMDRIVERID; const pafd : TACMFORMATDETAILSA; dwInstance : DWORD; fdwSupport : DWORD) : BOOL; stdcall;
  280. function acmFormatEnumA(had : HACMDRIVER; var pafd : TACMFORMATDETAILSA; fnCallback : ACMFORMATENUMCBA; dwInstance : DWORD; fdwEnum : DWORD) : MMRESULT; stdcall;
  281. type
  282. ACMFORMATENUMCBW = function(hadid : HACMDRIVERID; const pafd : TACMFORMATDETAILSW; dwInstance : DWORD; fdwSupport : DWORD) : BOOL; stdcall;
  283. function acmFormatEnumW(had : HACMDRIVER; var pafd : TACMFORMATDETAILSW; fnCallback : ACMFORMATENUMCBW; dwInstance : DWORD; fdwEnum : DWORD) : MMRESULT; stdcall;
  284. type
  285. ACMFORMATENUMCB = ACMFORMATENUMCBA;
  286. function acmFormatEnum(had : HACMDRIVER; var pafd : TACMFORMATDETAILS; fnCallback : ACMFORMATENUMCB; dwInstance : DWORD; fdwEnum : DWORD) : MMRESULT; stdcall;
  287. const
  288. ACM_FORMATENUMF_WFORMATTAG = $00010000;
  289. ACM_FORMATENUMF_NCHANNELS = $00020000;
  290. ACM_FORMATENUMF_NSAMPLESPERSEC = $00040000;
  291. ACM_FORMATENUMF_WBITSPERSAMPLE = $00080000;
  292. ACM_FORMATENUMF_CONVERT = $00100000;
  293. ACM_FORMATENUMF_SUGGEST = $00200000;
  294. ACM_FORMATENUMF_HARDWARE = $00400000;
  295. ACM_FORMATENUMF_INPUT = $00800000;
  296. ACM_FORMATENUMF_OUTPUT = $01000000;
  297. function acmFormatSuggest(had : HACMDRIVER; const pwfxSrc : TWAVEFORMATEX; var pwfxDst : TWAVEFORMATEX; cbwfxDst : DWORD; fdwSuggest : DWORD) : MMRESULT; stdcall;
  298. const
  299. ACM_FORMATSUGGESTF_WFORMATTAG = $00010000;
  300. ACM_FORMATSUGGESTF_NCHANNELS = $00020000;
  301. ACM_FORMATSUGGESTF_NSAMPLESPERSEC = $00040000;
  302. ACM_FORMATSUGGESTF_WBITSPERSAMPLE = $00080000;
  303. ACM_FORMATSUGGESTF_TYPEMASK = $00FF0000;
  304. const
  305. ACMHELPMSGSTRINGA = 'acmchoose_help';
  306. ACMHELPMSGSTRINGW = 'acmchoose_help';
  307. ACMHELPMSGCONTEXTMENUA = 'acmchoose_contextmenu';
  308. ACMHELPMSGCONTEXTMENUW = 'acmchoose_contextmenu';
  309. ACMHELPMSGCONTEXTHELPA = 'acmchoose_contexthelp';
  310. ACMHELPMSGCONTEXTHELPW = 'acmchoose_contexthelp';
  311. const
  312. ACMHELPMSGSTRING = ACMHELPMSGSTRINGA;
  313. ACMHELPMSGCONTEXTMENU = ACMHELPMSGCONTEXTMENUA;
  314. ACMHELPMSGCONTEXTHELP = ACMHELPMSGCONTEXTHELPA;
  315. const
  316. MM_ACM_FORMATCHOOSE = ($8000);
  317. FORMATCHOOSE_MESSAGE = 0;
  318. FORMATCHOOSE_FORMATTAG_VERIFY = (FORMATCHOOSE_MESSAGE+0);
  319. FORMATCHOOSE_FORMAT_VERIFY = (FORMATCHOOSE_MESSAGE+1);
  320. FORMATCHOOSE_CUSTOM_VERIFY = (FORMATCHOOSE_MESSAGE+2);
  321. type
  322. ACMFORMATCHOOSEHOOKPROCA = function(hwnd : HWND; uMsg : UINT; wParam : WPARAM; lParam : LPARAM) : UINT; stdcall;
  323. type
  324. ACMFORMATCHOOSEHOOKPROCW = function(hwnd : HWND; uMsg : UINT; wParam : WPARAM; lParam : LPARAM) : UINT; stdcall;
  325. type
  326. ACMFORMATCHOOSEHOOKPROC = ACMFORMATCHOOSEHOOKPROCA;
  327. type
  328. PACMFORMATCHOOSEA = ^TACMFORMATCHOOSEA;
  329. TACMFORMATCHOOSEA = packed record
  330. cbStruct : DWORD ; // sizeof(ACMFORMATCHOOSE)
  331. fdwStyle : DWORD ; // chooser style flags
  332. hwndOwner : HWND ; // caller's window handle
  333. pwfx : PWAVEFORMATEX ; // ptr to wfx buf to receive choice
  334. cbwfx : DWORD ; // size of mem buf for pwfx
  335. pszTitle : LPCSTR ; // dialog box title bar
  336. szFormatTag : array[0..ACMFORMATTAGDETAILS_FORMATTAG_CHARS-1] of char;
  337. szFormat : array[0..ACMFORMATDETAILS_FORMAT_CHARS-1] of char;
  338. pszName : LPSTR ; // custom name selection
  339. cchName : DWORD ; // size in chars of mem buf for pszName
  340. fdwEnum : DWORD ; // format enumeration restrictions
  341. pwfxEnum : PWAVEFORMATEX ; // format describing restrictions
  342. hInstance : THandle ; // app instance containing dlg template
  343. pszTemplateName : LPCSTR ; // custom template name
  344. lCustData : LPARAM ; // data passed to hook fn.
  345. pfnHook : ACMFORMATCHOOSEHOOKPROCA ; // ptr to hook function
  346. end;
  347. type
  348. PACMFORMATCHOOSEW = ^TACMFORMATCHOOSEW;
  349. TACMFORMATCHOOSEW = packed record
  350. cbStruct : DWORD ; // sizeof(ACMFORMATCHOOSE)
  351. fdwStyle : DWORD ; // chooser style flags
  352. hwndOwner : HWND ; // caller's window handle
  353. pwfx : PWAVEFORMATEX ; // ptr to wfx buf to receive choice
  354. cbwfx : DWORD ; // size of mem buf for pwfx
  355. pszTitle : LPCWSTR ; // dialog box title bar
  356. szFormatTag : array[0..ACMFORMATTAGDETAILS_FORMATTAG_CHARS-1] of wchar;
  357. szFormat : array[0..ACMFORMATDETAILS_FORMAT_CHARS-1] of wchar;
  358. pszName : LPWSTR ; // custom name selection
  359. cchName : DWORD ; // size in chars of mem buf for pszName
  360. fdwEnum : DWORD ; // format enumeration restrictions
  361. pwfxEnum : PWAVEFORMATEX ; // format describing restrictions
  362. hInstance : THandle ; // app instance containing dlg template
  363. pszTemplateName : LPCWSTR ; // custom template name
  364. lCustData : LPARAM ; // data passed to hook fn.
  365. pfnHook : ACMFORMATCHOOSEHOOKPROCW ; // ptr to hook function
  366. end;
  367. type
  368. TACMFORMATCHOOSE = TACMFORMATCHOOSEA;
  369. PACMFORMATCHOOSE = PACMFORMATCHOOSEA;
  370. const
  371. ACMFORMATCHOOSE_STYLEF_SHOWHELP = $00000004;
  372. ACMFORMATCHOOSE_STYLEF_ENABLEHOOK = $00000008;
  373. ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE = $00000010;
  374. ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE = $00000020;
  375. ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT = $00000040;
  376. ACMFORMATCHOOSE_STYLEF_CONTEXTHELP = $00000080;
  377. function acmFormatChooseA(var pafmtc : TACMFORMATCHOOSEA) : MMRESULT; stdcall;
  378. function acmFormatChooseW(var pafmtc : TACMFORMATCHOOSEW) : MMRESULT; stdcall;
  379. function acmFormatChoose(var pafmtc : TACMFORMATCHOOSE) : MMRESULT; stdcall;
  380. const
  381. ACMFILTERTAGDETAILS_FILTERTAG_CHARS = 48;
  382. type
  383. PACMFILTERTAGDETAILSA = ^TACMFILTERTAGDETAILSA;
  384. TACMFILTERTAGDETAILSA = packed record
  385. cbStruct : DWORD ;
  386. dwFilterTagIndex : DWORD ;
  387. dwFilterTag : DWORD ;
  388. cbFilterSize : DWORD ;
  389. fdwSupport : DWORD ;
  390. cStandardFilters : DWORD ;
  391. szFilterTag : array[0..ACMFILTERTAGDETAILS_FILTERTAG_CHARS-1] of char;
  392. end;
  393. type
  394. PACMFILTERTAGDETAILSW = ^TACMFILTERTAGDETAILSW;
  395. TACMFILTERTAGDETAILSW = packed record
  396. cbStruct : DWORD ;
  397. dwFilterTagIndex : DWORD ;
  398. dwFilterTag : DWORD ;
  399. cbFilterSize : DWORD ;
  400. fdwSupport : DWORD ;
  401. cStandardFilters : DWORD ;
  402. szFilterTag : array[0..ACMFILTERTAGDETAILS_FILTERTAG_CHARS-1] of wchar;
  403. end;
  404. type
  405. PACMFILTERTAGDETAILS = PACMFILTERTAGDETAILSA;
  406. TACMFILTERTAGDETAILS = TACMFILTERTAGDETAILSA;
  407. function acmFilterTagDetailsA(had : HACMDRIVER; var paftd : TACMFILTERTAGDETAILSA; fdwDetails : DWORD) : MMRESULT; stdcall;
  408. function acmFilterTagDetailsW(had : HACMDRIVER; var paftd : TACMFILTERTAGDETAILSW; fdwDetails : DWORD) : MMRESULT; stdcall;
  409. function acmFilterTagDetails(had : HACMDRIVER; var paftd : TACMFILTERTAGDETAILS; fdwDetails : DWORD) : MMRESULT; stdcall;
  410. const
  411. ACM_FILTERTAGDETAILSF_INDEX = $00000000;
  412. ACM_FILTERTAGDETAILSF_FILTERTAG = $00000001;
  413. ACM_FILTERTAGDETAILSF_LARGESTSIZE = $00000002;
  414. ACM_FILTERTAGDETAILSF_QUERYMASK = $0000000F;
  415. type
  416. ACMFILTERTAGENUMCBA = function(hadid : HACMDRIVERID; const paftd : TACMFILTERTAGDETAILSA; dwInstance : DWORD; fdwSupport : DWORD) : BOOL; stdcall;
  417. function acmFilterTagEnumA(had : HACMDRIVER; var paftd : TACMFILTERTAGDETAILSA; fnCallback : ACMFILTERTAGENUMCBA; dwInstance : DWORD; fdwEnum : DWORD) : MMRESULT; stdcall;
  418. type
  419. ACMFILTERTAGENUMCBW = function(hadid : HACMDRIVERID; const paftd : TACMFILTERTAGDETAILSW; dwInstance : DWORD; fdwSupport : DWORD) : BOOL; stdcall;
  420. function acmFilterTagEnumW(had : HACMDRIVER; var paftd : TACMFILTERTAGDETAILSW; fnCallback : ACMFILTERTAGENUMCBW; dwInstance : DWORD; fdwEnum : DWORD) : MMRESULT; stdcall;
  421. type
  422. ACMFILTERTAGENUMCB = ACMFILTERTAGENUMCBA;
  423. function acmFilterTagEnum(had : HACMDRIVER; var paftd : TACMFILTERTAGDETAILS; fnCallback : ACMFILTERTAGENUMCB; dwInstance : DWORD; fdwEnum : DWORD) : MMRESULT; stdcall;
  424. const
  425. ACMFILTERDETAILS_FILTER_CHARS = 128;
  426. type
  427. PACMFILTERDETAILSA = ^TACMFILTERDETAILSA;
  428. TACMFILTERDETAILSA = packed record
  429. cbStruct : DWORD ;
  430. dwFilterIndex : DWORD ;
  431. dwFilterTag : DWORD ;
  432. fdwSupport : DWORD ;
  433. pwfltr : PWAVEFILTER ;
  434. cbwfltr : DWORD ;
  435. szFilter : array[0..ACMFILTERDETAILS_FILTER_CHARS-1] of char;
  436. end;
  437. type
  438. PACMFILTERDETAILSW = ^TACMFILTERDETAILSW;
  439. TACMFILTERDETAILSW = packed record
  440. cbStruct : DWORD ;
  441. dwFilterIndex : DWORD ;
  442. dwFilterTag : DWORD ;
  443. fdwSupport : DWORD ;
  444. pwfltr : PWAVEFILTER ;
  445. cbwfltr : DWORD ;
  446. szFilter : array[0..ACMFILTERDETAILS_FILTER_CHARS-1] of wchar;
  447. end;
  448. type
  449. PACMFILTERDETAILS = PACMFILTERDETAILSA;
  450. TACMFILTERDETAILS = TACMFILTERDETAILSA;
  451. function acmFilterDetailsA(had : HACMDRIVER; var pafd : TACMFILTERDETAILSA; fdwDetails : DWORD) : MMRESULT; stdcall;
  452. function acmFilterDetailsW(had : HACMDRIVER; var pafd : TACMFILTERDETAILSW; fdwDetails : DWORD) : MMRESULT; stdcall;
  453. function acmFilterDetails(had : HACMDRIVER; var pafd : TACMFILTERDETAILS; fdwDetails : DWORD) : MMRESULT; stdcall;
  454. const
  455. ACM_FILTERDETAILSF_INDEX = $00000000;
  456. ACM_FILTERDETAILSF_FILTER = $00000001;
  457. ACM_FILTERDETAILSF_QUERYMASK = $0000000F;
  458. type
  459. ACMFILTERENUMCBA = function(hadid : HACMDRIVERID; const pafd : TACMFILTERDETAILSA; dwInstance : DWORD; fdwSupport : DWORD) : BOOL; stdcall;
  460. function acmFilterEnumA(had : HACMDRIVER; var pafd : TACMFILTERDETAILSA; fnCallback : ACMFILTERENUMCBA; dwInstance : DWORD; fdwEnum : DWORD) : MMRESULT; stdcall;
  461. type
  462. ACMFILTERENUMCBW = function(hadid : HACMDRIVERID; const pafd : TACMFILTERDETAILSW; dwInstance : DWORD; fdwSupport : DWORD) : BOOL; stdcall;
  463. function acmFilterEnumW(had : HACMDRIVER; var pafd : TACMFILTERDETAILSW; fnCallback : ACMFILTERENUMCBW; dwInstance : DWORD; fdwEnum : DWORD) : MMRESULT; stdcall;
  464. type
  465. ACMFILTERENUMCB = ACMFILTERENUMCBA;
  466. function acmFilterEnum(had : HACMDRIVER; var pafd : TACMFILTERDETAILS; fnCallback : ACMFILTERENUMCB; dwInstance : DWORD; fdwEnum : DWORD) : MMRESULT; stdcall;
  467. const
  468. ACM_FILTERENUMF_DWFILTERTAG = $00010000;
  469. const
  470. MM_ACM_FILTERCHOOSE = ($8000);
  471. FILTERCHOOSE_MESSAGE = 0;
  472. FILTERCHOOSE_FILTERTAG_VERIFY = (FILTERCHOOSE_MESSAGE+0);
  473. FILTERCHOOSE_FILTER_VERIFY = (FILTERCHOOSE_MESSAGE+1);
  474. FILTERCHOOSE_CUSTOM_VERIFY = (FILTERCHOOSE_MESSAGE+2);
  475. type
  476. ACMFILTERCHOOSEHOOKPROCA = function(hwnd : HWND; uMsg : UINT; wParam : WPARAM; lParam : LPARAM) : UINT; stdcall;
  477. type
  478. ACMFILTERCHOOSEHOOKPROCW = function(hwnd : HWND; uMsg : UINT; wParam : WPARAM; lParam : LPARAM) : UINT; stdcall;
  479. type
  480. ACMFILTERCHOOSEHOOKPROC = ACMFILTERCHOOSEHOOKPROCA;
  481. type
  482. PACMFILTERCHOOSEA = ^TACMFILTERCHOOSEA;
  483. TACMFILTERCHOOSEA = packed record
  484. cbStruct : DWORD ; // sizeof(ACMFILTERCHOOSE)
  485. fdwStyle : DWORD ; // chooser style flags
  486. hwndOwner : HWND ; // caller's window handle
  487. pwfltr : PWAVEFILTER ; // ptr to wfltr buf to receive choice
  488. cbwfltr : DWORD ; // size of mem buf for pwfltr
  489. pszTitle : LPCSTR ;
  490. szFilterTag : array[0..ACMFILTERTAGDETAILS_FILTERTAG_CHARS-1] of char;
  491. szFilter : array[0..ACMFILTERDETAILS_FILTER_CHARS-1] of char;
  492. pszName : LPSTR ; // custom name selection
  493. cchName : DWORD ; // size in chars of mem buf for pszName
  494. fdwEnum : DWORD ; // filter enumeration restrictions
  495. pwfltrEnum : PWAVEFILTER ; // filter describing restrictions
  496. hInstance : THandle ; // app instance containing dlg template
  497. pszTemplateName : LPCSTR ; // custom template name
  498. lCustData : LPARAM ; // data passed to hook fn.
  499. pfnHook : ACMFILTERCHOOSEHOOKPROCA ; // ptr to hook function
  500. end;
  501. type
  502. PACMFILTERCHOOSEW = ^TACMFILTERCHOOSEW;
  503. TACMFILTERCHOOSEW = packed record
  504. cbStruct : DWORD ; // sizeof(ACMFILTERCHOOSE)
  505. fdwStyle : DWORD ; // chooser style flags
  506. hwndOwner : HWND ; // caller's window handle
  507. pwfltr : PWAVEFILTER ; // ptr to wfltr buf to receive choice
  508. cbwfltr : DWORD ; // size of mem buf for pwfltr
  509. pszTitle : LPCWSTR ;
  510. szFilterTag : array[0..ACMFILTERTAGDETAILS_FILTERTAG_CHARS-1] of wchar;
  511. szFilter : array[0..ACMFILTERDETAILS_FILTER_CHARS-1] of wchar;
  512. pszName : LPWSTR ; // custom name selection
  513. cchName : DWORD ; // size in chars of mem buf for pszName
  514. fdwEnum : DWORD ; // filter enumeration restrictions
  515. pwfltrEnum : PWAVEFILTER ; // filter describing restrictions
  516. hInstance : THandle ; // app instance containing dlg template
  517. pszTemplateName : LPCWSTR ; // custom template name
  518. lCustData : LPARAM ; // data passed to hook fn.
  519. pfnHook : ACMFILTERCHOOSEHOOKPROCW ; // ptr to hook function
  520. end;
  521. type
  522. PACMFILTERCHOOSE = PACMFILTERCHOOSEA;
  523. TACMFILTERCHOOSE = TACMFILTERCHOOSEA;
  524. const
  525. ACMFILTERCHOOSE_STYLEF_SHOWHELP = $00000004;
  526. ACMFILTERCHOOSE_STYLEF_ENABLEHOOK = $00000008;
  527. ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE = $00000010;
  528. ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE = $00000020;
  529. ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT = $00000040;
  530. ACMFILTERCHOOSE_STYLEF_CONTEXTHELP = $00000080;
  531. function acmFilterChooseA(var pafltrc : TACMFILTERCHOOSEA) : MMRESULT; stdcall;
  532. function acmFilterChooseW(var pafltrc : TACMFILTERCHOOSEW) : MMRESULT; stdcall;
  533. function acmFilterChoose(var pafltrc : TACMFILTERCHOOSE) : MMRESULT; stdcall;
  534. type
  535. PACMSTREAMHEADER = ^TACMSTREAMHEADER;
  536. TACMSTREAMHEADER = packed record
  537. cbStruct : DWORD ; // sizeof(ACMSTREAMHEADER)
  538. fdwStatus : DWORD ; // ACMSTREAMHEADER_STATUSF_*
  539. dwUser : DWORD ; // user instance data for hdr
  540. pbSrc : PBYTE ;
  541. cbSrcLength : DWORD ;
  542. cbSrcLengthUsed : DWORD ;
  543. dwSrcUser : DWORD ; // user instance data for src
  544. pbDst : PBYTE ;
  545. cbDstLength : DWORD ;
  546. cbDstLengthUsed : DWORD ;
  547. dwDstUser : DWORD ; // user instance data for dst
  548. dwReservedDriver : array [0..9] of DWORD; // driver reserved work space
  549. end;
  550. const
  551. ACMSTREAMHEADER_STATUSF_DONE = $00010000;
  552. ACMSTREAMHEADER_STATUSF_PREPARED = $00020000;
  553. ACMSTREAMHEADER_STATUSF_INQUEUE = $00100000;
  554. function acmStreamOpen(phas : PHACMSTREAM; had : HACMDRIVER; const pwfxSrc : TWAVEFORMATEX; const pwfxdst : TWAVEFORMATEX; pwfltr : PWAVEFILTER; dwCallback : DWORD; dwInstance : DWORD; fdwOpen : DWORD) : MMRESULT; stdcall;
  555. const
  556. ACM_STREAMOPENF_QUERY = $00000001;
  557. ACM_STREAMOPENF_ASYNC = $00000002;
  558. ACM_STREAMOPENF_NONREALTIME = $00000004;
  559. function acmStreamClose(has : HACMSTREAM; fdwClose : DWORD) : MMRESULT; stdcall;
  560. function acmStreamSize(has : HACMSTREAM; cbInput : DWORD; var pdwOutputByte : DWORD; fdwSize : DWORD) : MMRESULT; stdcall;
  561. const
  562. ACM_STREAMSIZEF_SOURCE = $00000000;
  563. ACM_STREAMSIZEF_DESTINATION = $00000001;
  564. ACM_STREAMSIZEF_QUERYMASK = $0000000F;
  565. function acmStreamReset(has : HACMSTREAM; fdwReset : DWORD) : MMRESULT; stdcall;
  566. function acmStreamMessage(has : HACMSTREAM; uMsg : UINT; lParam1 : LPARAM; lParam2 : LPARAM) : MMRESULT; stdcall;
  567. function acmStreamConvert(has : HACMSTREAM; var pash : TACMSTREAMHEADER; fdwConvert : DWORD) : MMRESULT; stdcall;
  568. const
  569. ACM_STREAMCONVERTF_BLOCKALIGN = $00000004;
  570. ACM_STREAMCONVERTF_START = $00000010;
  571. ACM_STREAMCONVERTF_END = $00000020;
  572. function acmStreamPrepareHeader(has : HACMSTREAM; var pash : TACMSTREAMHEADER; fdwPrepare : DWORD) : MMRESULT; stdcall;
  573. function acmStreamUnprepareHeader(has : HACMSTREAM; var pash : TACMSTREAMHEADER; fdwUnprepare : DWORD) : MMRESULT; stdcall;
  574. implementation
  575. const
  576. msacm32 = 'msacm32.dll';
  577. // acm
  578. function acmGetVersion; external msacm32 name 'acmGetVersion';
  579. function acmMetrics; external msacm32 name 'acmMetrics';
  580. // acmDriver
  581. function acmDriverEnum; external msacm32 name 'acmDriverEnum';
  582. function acmDriverID; external msacm32 name 'acmDriverID';
  583. function acmDriverAddA; external msacm32 name 'acmDriverAddA';
  584. function acmDriverAddW; external msacm32 name 'acmDriverAddW';
  585. function acmDriverAdd; external msacm32 name 'acmDriverAddA';
  586. function acmDriverRemove; external msacm32 name 'acmDriverRemove';
  587. function acmDriverOpen; external msacm32 name 'acmDriverOpen';
  588. function acmDriverClose; external msacm32 name 'acmDriverClose';
  589. function acmDriverMessage; external msacm32 name 'acmDriverMessage';
  590. function acmDriverPriority; external msacm32 name 'acmDriverPriority';
  591. function ACMDRIVERDETAILS_FCCTYPE_AUDIOCODE : FOURCC;
  592. begin
  593. Result := MMSystem.mmioStringToFOURCC('audc', 0);
  594. end;
  595. function acmDriverDetailsA; external msacm32 name 'acmDriverDetailsA';
  596. function acmDriverDetailsW; external msacm32 name 'acmDriverDetailsW';
  597. function acmDriverDetails; external msacm32 name 'acmDriverDetailsA';
  598. // acmFormat
  599. function acmFormatTagDetailsA; external msacm32 name 'acmFormatTagDetailsA';
  600. function acmFormatTagDetailsW; external msacm32 name 'acmFormatTagDetailsW';
  601. function acmFormatTagDetails; external msacm32 name 'acmFormatTagDetailsA';
  602. function acmFormatTagEnumA; external msacm32 name 'acmFormatTagEnumA';
  603. function acmFormatTagEnumW; external msacm32 name 'acmFormatTagEnumW';
  604. function acmFormatTagEnum; external msacm32 name 'acmFormatTagEnumA';
  605. function acmFormatDetailsA; external msacm32 name 'acmFormatDetailsA';
  606. function acmFormatDetailsW; external msacm32 name 'acmFormatDetailsW';
  607. function acmFormatDetails; external msacm32 name 'acmFormatDetailsA';
  608. function acmFormatEnumA; external msacm32 name 'acmFormatEnumA';
  609. function acmFormatEnumW; external msacm32 name 'acmFormatEnumW';
  610. function acmFormatEnum; external msacm32 name 'acmFormatEnumA';
  611. function acmFormatSuggest; external msacm32 name 'acmFormatSuggest';
  612. function acmFormatChooseA; external msacm32 name 'acmFormatChooseA';
  613. function acmFormatChooseW; external msacm32 name 'acmFormatChooseW';
  614. function acmFormatChoose; external msacm32 name 'acmFormatChooseA';
  615. // acmFilter
  616. function acmFilterTagDetailsA; external msacm32 name 'acmFilterTagDetailsA';
  617. function acmFilterTagDetailsW; external msacm32 name 'acmFilterTagDetailsW';
  618. function acmFilterTagDetails; external msacm32 name 'acmFilterTagDetailsA';
  619. function acmFilterTagEnumA; external msacm32 name 'acmFilterTagEnumA';
  620. function acmFilterTagEnumW; external msacm32 name 'acmFilterTagEnumW';
  621. function acmFilterTagEnum; external msacm32 name 'acmFilterTagEnumA';
  622. function acmFilterDetailsA; external msacm32 name 'acmFilterDetailsA';
  623. function acmFilterDetailsW; external msacm32 name 'acmFilterDetailsW';
  624. function acmFilterDetails; external msacm32 name 'acmFilterDetailsA';
  625. function acmFilterEnumA; external msacm32 name 'acmFilterEnumA';
  626. function acmFilterEnumW; external msacm32 name 'acmFilterEnumW';
  627. function acmFilterEnum; external msacm32 name 'acmFilterEnumA';
  628. function acmFilterChooseA; external msacm32 name 'acmFilterChooseA';
  629. function acmFilterChooseW; external msacm32 name 'acmFilterChooseW';
  630. function acmFilterChoose; external msacm32 name 'acmFilterChooseA';
  631. // acmStream
  632. function acmStreamOpen; external msacm32 name 'acmStreamOpen';
  633. function acmStreamClose; external msacm32 name 'acmStreamClose';
  634. function acmStreamSize; external msacm32 name 'acmStreamSize';
  635. function acmStreamReset; external msacm32 name 'acmStreamReset';
  636. function acmStreamMessage; external msacm32 name 'acmStreamMessage';
  637. function acmStreamConvert; external msacm32 name 'acmStreamConvert';
  638. function acmStreamPrepareHeader; external msacm32 name 'acmStreamPrepareHeader';
  639. function acmStreamUnprepareHeader; external msacm32 name 'acmStreamUnprepareHeader';
  640. end.