home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 May / CMCD0504.ISO / Software / Freeware / Programare / dspack / DSPACK231.exe / {app} / src / DirectX9 / DirectSound.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2003-06-01  |  101.4 KB  |  2,428 lines

  1. {******************************************************************************}
  2. {*                                                                            *}
  3. {*  Copyright (C) Microsoft Corporation.  All Rights Reserved.                *}
  4. {*                                                                            *}
  5. {*  Files:      dsound.h                                                      *}
  6. {*  Content:    DirectSound include file                                      *}
  7. {*                                                                            *}
  8. {*  DirectX 9.0 Delphi adaptation by Alexey Barkovoy                          *}
  9. {*  E-Mail: clootie@reactor.ru                                                *}
  10. {*                                                                            *}
  11. {*  Modified: 27-Apr-2003                                                     *}
  12. {*                                                                            *}
  13. {*  Compatible with :                                                         *}
  14. {*    DirectX 7.0 Object Pascal adaptation by                                 *}
  15. {*      Erik Unger, e-Mail: DelphiDirectX@next-reality.com                    *}
  16. {*                                                                            *}
  17. {*  Latest version can be downloaded from:                                    *}
  18. {*     http://clootie.narod.ru/delphi                                         *}
  19. {*                                                                            *}
  20. {******************************************************************************}
  21. {                                                                              }
  22. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  23. {                                                                              }
  24. { The contents of this file are used with permission, subject to the Mozilla   }
  25. { Public License Version 1.1 (the "License"); you may not use this file except }
  26. { in compliance with the License. You may obtain a copy of the License at      }
  27. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  28. {                                                                              }
  29. { Software distributed under the License is distributed on an "AS IS" basis,   }
  30. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  31. { the specific language governing rights and limitations under the License.    }
  32. {                                                                              }
  33. { Alternatively, the contents of this file may be used under the terms of the  }
  34. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  35. { provisions of the LGPL License are applicable instead of those above.        }
  36. { If you wish to allow use of your version of this file only under the terms   }
  37. { of the LGPL License and not to allow others to use your version of this file }
  38. { under the MPL, indicate your decision by deleting  the provisions above and  }
  39. { replace  them with the notice and other provisions required by the LGPL      }
  40. { License.  If you do not delete the provisions above, a recipient may use     }
  41. { your version of this file under either the MPL or the LGPL License.          }
  42. {                                                                              }
  43. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  44. {                                                                              }
  45. {******************************************************************************}
  46.  
  47. unit DirectSound;
  48.  
  49. interface
  50.  
  51. uses
  52.   Windows, MMSystem, DXTypes;
  53.  
  54. (*==========================================================================;
  55.  *
  56.  *  Copyright (c) Microsoft Corporation.  All rights reserved.
  57.  *
  58.  *  File:       dsound.h
  59.  *  Content:    DirectSound include file
  60.  *
  61.  **************************************************************************)
  62.  
  63. {$I DirectX.inc}
  64.  
  65. ////////////////////////////////////////////////////////////////////////
  66. // Global level dynamic loading support
  67. {$IFDEF DYNAMIC_LINK_ALL}
  68.   {$DEFINE DIRECTSOUND_DYNAMIC_LINK}
  69. {$ENDIF}
  70. {$IFDEF DYNAMIC_LINK_EXPLICIT_ALL}
  71.   {$DEFINE DIRECTSOUND_DYNAMIC_LINK_EXPLICIT}
  72. {$ENDIF}
  73.  
  74. // Remove "dots" below to force some kind of dynamic linking
  75. {.$DEFINE DIRECTSOUND_DYNAMIC_LINK}
  76. {.$DEFINE DIRECTSOUND_DYNAMIC_LINK_EXPLICIT}
  77.  
  78. ////////////////////////////////////////////////////////////////////////
  79. // Assume for what DirectSound version we will compile headers
  80. {$IFDEF DIRECTX7}
  81.   {$DEFINE DIRECTSOUND_VERSION_7}
  82. {$ENDIF}
  83. {$IFDEF DIRECTX8}
  84.   {$DEFINE DIRECTSOUND_VERSION_8}
  85. {$ENDIF}
  86. {$IFDEF DIRECTX9}
  87.   {$DEFINE DIRECTSOUND_VERSION_9}
  88. {$ENDIF}
  89.  
  90. {$IFNDEF DIRECTSOUND_VERSION_9}
  91.   {$IFNDEF DIRECTSOUND_VERSION_8}
  92.     {$IFNDEF DIRECTSOUND_VERSION_7}
  93. // Compiling for DirectSound9 by default
  94.        {$DEFINE DIRECTSOUND_VERSION_9}
  95.     {$ENDIF}
  96.   {$ENDIF}
  97. {$ENDIF}
  98.  
  99. ////////////////////////////////////////////////////////////////////////
  100. // Emit conditionals to C++Builder compiler
  101. {$IFDEF DIRECTSOUND_VERSION_7}
  102.   {$HPPEMIT '#define DIRECTSOUND_VERSION         0x0700'}
  103. {$ENDIF}
  104. {$IFDEF DIRECTSOUND_VERSION_8}
  105.   {$HPPEMIT '#define DIRECTSOUND_VERSION         0x0800'}
  106. {$ENDIF}
  107. {$IFDEF DIRECTSOUND_VERSION_9}
  108.   {$HPPEMIT '#define DIRECTSOUND_VERSION         0x0900'}
  109. {$ENDIF}
  110.  
  111. {$NOINCLUDE DXTypes}
  112. (*$HPPEMIT '#include "dsound.h"' *)
  113.  
  114.  
  115. ////////////////////////////////////////////////////////////////////////
  116. // Define symbols for '<=' comparision
  117. {$IFDEF DIRECTSOUND_VERSION_9}
  118.   {$DEFINE DIRECTSOUND_VERSION_8}
  119. {$ENDIF}
  120. {$IFDEF DIRECTSOUND_VERSION_8}
  121.   {$DEFINE DIRECTSOUND_VERSION_7}
  122. {$ENDIF}
  123.  
  124. { Type definitions shared with Direct3D }
  125.  
  126. type
  127.   D3DVALUE = DXTypes.D3DVALUE;
  128.   {$EXTERNALSYM D3DVALUE}
  129.   TD3DValue = DXTypes.TD3DValue;
  130.   {$NODEFINE TD3DValue}
  131.   PD3DValue = DXTypes.PD3DValue;
  132.   {$NODEFINE PD3DValue}
  133.  
  134.   D3DCOLOR = DXTypes.D3DCOLOR;
  135.   {$EXTERNALSYM D3DCOLOR}
  136.   TD3DColor = DXTypes.TD3DColor;
  137.   {$NODEFINE TD3DColor}
  138.  
  139.   _D3DVECTOR = DXTypes._D3DVECTOR;
  140.   {$EXTERNALSYM _D3DVECTOR}
  141.   D3DVECTOR = DXTypes.D3DVECTOR;
  142.   {$EXTERNALSYM D3DVECTOR}
  143.   TD3DVector = DXTypes.TD3DVector;
  144.   {$NODEFINE TD3DVector}
  145.   PD3DVector = DXTypes.PD3DVector;
  146.   {$NODEFINE PD3DVector}
  147.  
  148. {$HPPEMIT ''}
  149. {$HPPEMIT '#ifndef DX_SHARED_DEFINES_BCB'}
  150. {$HPPEMIT ''}
  151. {$HPPEMIT 'typedef D3DVALUE TD3DValue;'}
  152. {$HPPEMIT 'typedef D3DVALUE *PD3DValue;'}
  153. {$HPPEMIT ''}
  154. {$HPPEMIT '#ifndef D3DCOLOR_DEFINED_BCB'}
  155. {$HPPEMIT 'typedef D3DCOLOR TD3DColor;'}
  156. {$HPPEMIT '#define D3DCOLOR_DEFINED_BCB'}
  157. {$HPPEMIT '#endif'}
  158. {$HPPEMIT ''}
  159. {$HPPEMIT '#ifndef D3DVECTOR_DEFINED_BCB'}
  160. {$HPPEMIT 'typedef _D3DVECTOR TD3DVector;'}
  161. {$HPPEMIT 'typedef _D3DVECTOR *PD3DVector;'}
  162. {$HPPEMIT '#define D3DVECTOR_DEFINED_BCB'}
  163. {$HPPEMIT '#endif'}
  164. {$HPPEMIT ''}
  165. {$HPPEMIT '#define DX_SHARED_DEFINES_BCB'}
  166. {$HPPEMIT '#endif // DX_SHARED_DEFINES_BCB'}
  167. {$HPPEMIT ''}
  168.  
  169. const
  170.   _FACDS = $878;                { DirectSound's facility code }
  171.   {$EXTERNALSYM _FACDS}
  172.  
  173. // #define MAKE_DSHRESULT(code)  MAKE_HRESULT(1, _FACDS, code)
  174. function MAKE_DSHRESULT(Code: DWord): DWord;
  175. {$EXTERNALSYM MAKE_DSHRESULT}
  176.  
  177. const
  178.   MAKE_DSHRESULT_R     = (1 shl 31) or (_FACDS shl 16);
  179.  
  180. const
  181.   // DirectSound Component GUID {47D4D946-62E8-11CF-93BC-444553540000}
  182.   CLSID_DirectSound: TGUID = '{47d4d946-62e8-11cf-93bc-444553540000}';
  183.   {$EXTERNALSYM CLSID_DirectSound}
  184.  
  185.   // DirectSound 8.0 Component GUID {3901CC3F-84B5-4FA4-BA35-AA8172B8A09B}
  186.   CLSID_DirectSound8: TGUID = '{3901cc3f-84b5-4fa4-ba35-aa8172b8a09b}';
  187.   {$EXTERNALSYM CLSID_DirectSound8}
  188.  
  189.   // DirectSound Capture Component GUID {B0210780-89CD-11D0-AF08-00A0C925CD16}
  190.   CLSID_DirectSoundCapture: TGUID = '{b0210780-89cd-11d0-af08-00a0c925cd16}';
  191.   {$EXTERNALSYM CLSID_DirectSoundCapture}
  192.  
  193.   // DirectSound 8.0 Capture Component GUID {E4BCAC13-7F99-4908-9A8E-74E3BF24B6E1}
  194.   CLSID_DirectSoundCapture8: TGUID = '{e4bcac13-7f99-4908-9a8e-74e3bf24b6e1}';
  195.   {$EXTERNALSYM CLSID_DirectSoundCapture8}
  196.  
  197.   // DirectSound Full Duplex Component GUID {FEA4300C-7959-4147-B26A-2377B9E7A91D}
  198.   CLSID_DirectSoundFullDuplex: TGUID = '{fea4300c-7959-4147-b26a-2377b9e7a91d}';
  199.   {$EXTERNALSYM CLSID_DirectSoundFullDuplex}
  200.  
  201.  
  202.   // DirectSound default playback device GUID {DEF00000-9C6D-47ED-AAF1-4DDA8F2B5C03}
  203.   DSDEVID_DefaultPlayback: TGUID = '{def00000-9c6d-47ed-aaf1-4dda8f2b5c03}';
  204.   {$EXTERNALSYM DSDEVID_DefaultPlayback}
  205.  
  206.   // DirectSound default capture device GUID {DEF00001-9C6D-47ED-AAF1-4DDA8F2B5C03}
  207.   DSDEVID_DefaultCapture: TGUID = '{def00001-9c6d-47ed-aaf1-4dda8f2b5c03}';
  208.   {$EXTERNALSYM DSDEVID_DefaultCapture}
  209.  
  210.   // DirectSound default device for voice playback {DEF00002-9C6D-47ED-AAF1-4DDA8F2B5C03}
  211.   DSDEVID_DefaultVoicePlayback: TGUID = '{def00002-9c6d-47ed-aaf1-4dda8f2b5c03}';
  212.   {$EXTERNALSYM DSDEVID_DefaultVoicePlayback}
  213.  
  214.   // DirectSound default device for voice capture {DEF00003-9C6D-47ED-AAF1-4DDA8F2B5C03}
  215.   DSDEVID_DefaultVoiceCapture: TGUID = '{def00003-9c6d-47ed-aaf1-4dda8f2b5c03}';
  216.   {$EXTERNALSYM DSDEVID_DefaultVoiceCapture}
  217.  
  218.  
  219. //
  220. // Structures
  221. //
  222.  
  223. type
  224.   PDSCaps = ^TDSCaps;
  225.   _DSCAPS = packed record
  226.     dwSize                         : DWORD;
  227.     dwFlags                        : DWORD;
  228.     dwMinSecondarySampleRate       : DWORD;
  229.     dwMaxSecondarySampleRate       : DWORD;
  230.     dwPrimaryBuffers               : DWORD;
  231.     dwMaxHwMixingAllBuffers        : DWORD;
  232.     dwMaxHwMixingStaticBuffers     : DWORD;
  233.     dwMaxHwMixingStreamingBuffers  : DWORD;
  234.     dwFreeHwMixingAllBuffers       : DWORD;
  235.     dwFreeHwMixingStaticBuffers    : DWORD;
  236.     dwFreeHwMixingStreamingBuffers : DWORD;
  237.     dwMaxHw3DAllBuffers            : DWORD;
  238.     dwMaxHw3DStaticBuffers         : DWORD;
  239.     dwMaxHw3DStreamingBuffers      : DWORD;
  240.     dwFreeHw3DAllBuffers           : DWORD;
  241.     dwFreeHw3DStaticBuffers        : DWORD;
  242.     dwFreeHw3DStreamingBuffers     : DWORD;
  243.     dwTotalHwMemBytes              : DWORD;
  244.     dwFreeHwMemBytes               : DWORD;
  245.     dwMaxContigFreeHwMemBytes      : DWORD;
  246.     dwUnlockTransferRateHwBuffers  : DWORD;
  247.     dwPlayCpuOverheadSwBuffers     : DWORD;
  248.     dwReserved1                    : DWORD;
  249.     dwReserved2                    : DWORD;
  250.   end;
  251.   {$EXTERNALSYM _DSCAPS}
  252.   DSCAPS = _DSCAPS;
  253.   {$EXTERNALSYM DSCAPS}
  254.   TDSCaps = _DSCAPS;
  255.  
  256.   PDSBcaps = ^TDSBcaps;
  257.   _DSBCAPS = packed record
  258.     dwSize                : DWORD;
  259.     dwFlags               : DWORD;
  260.     dwBufferBytes         : DWORD;
  261.     dwUnlockTransferRate  : DWORD;
  262.     dwPlayCpuOverhead     : DWORD;
  263.   end;
  264.   {$EXTERNALSYM _DSBCAPS}
  265.   DSBCAPS = _DSBCAPS;
  266.   {$EXTERNALSYM DSBCAPS}
  267.   TDSBcaps = _DSBCAPS;
  268.  
  269. {$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
  270.   {$IFDEF WIN64}
  271.   DWORD_PTR = Int64;
  272.   {$ELSE}
  273.   DWORD_PTR = DWORD;
  274.   {$ENDIF}
  275.   {$NODEFINE DWORD_PTR}
  276.  
  277.   PDSEffectDesc = ^TDSEffectDesc;
  278.   _DSEFFECTDESC = packed record
  279.       dwSize        : DWORD;
  280.       dwFlags       : DWORD;
  281.       guidDSFXClass : TGUID;
  282.       dwReserved1   : DWORD_PTR;
  283.       dwReserved2   : DWORD_PTR;
  284.   end;
  285.   {$EXTERNALSYM _DSEFFECTDESC}
  286.   DSEFFECTDESC = _DSEFFECTDESC;
  287.   {$EXTERNALSYM DSEFFECTDESC}
  288.   TDSEffectDesc = _DSEFFECTDESC;
  289.  
  290. const
  291.   DSFX_LOCHARDWARE    = $00000001;
  292.   {$EXTERNALSYM DSFX_LOCHARDWARE}
  293.   DSFX_LOCSOFTWARE    = $00000002;
  294.   {$EXTERNALSYM DSFX_LOCSOFTWARE}
  295.  
  296.   DSFXR_PRESENT          = 0;
  297.   {$EXTERNALSYM DSFXR_PRESENT}
  298.   DSFXR_LOCHARDWARE      = 1;
  299.   {$EXTERNALSYM DSFXR_LOCHARDWARE}
  300.   DSFXR_LOCSOFTWARE      = 2;
  301.   {$EXTERNALSYM DSFXR_LOCSOFTWARE}
  302.   DSFXR_UNALLOCATED      = 3;
  303.   {$EXTERNALSYM DSFXR_UNALLOCATED}
  304.   DSFXR_FAILED           = 4;
  305.   {$EXTERNALSYM DSFXR_FAILED}
  306.   DSFXR_UNKNOWN          = 5;
  307.   {$EXTERNALSYM DSFXR_UNKNOWN}
  308.   DSFXR_SENDLOOP         = 6;
  309.   {$EXTERNALSYM DSFXR_SENDLOOP}
  310.  
  311. type
  312.   PDSCEffectDesc = ^TDSCEffectDesc;
  313.   _DSCEFFECTDESC = packed record
  314.     dwSize: DWORD;
  315.     dwFlags: DWORD;
  316.     guidDSCFXClass: TGUID;
  317.     guidDSCFXInstance: TGUID;
  318.     dwReserved1: DWORD;
  319.     dwReserved2: DWORD;
  320.   end;
  321.   {$EXTERNALSYM _DSCEFFECTDESC}
  322.   DSCEFFECTDESC = _DSCEFFECTDESC;
  323.   {$EXTERNALSYM DSCEFFECTDESC}
  324.   TDSCEffectDesc = _DSCEFFECTDESC;
  325.  
  326. const
  327.   DSCFX_LOCHARDWARE   = $00000001;
  328.   {$EXTERNALSYM DSCFX_LOCHARDWARE}
  329.   DSCFX_LOCSOFTWARE   = $00000002;
  330.   {$EXTERNALSYM DSCFX_LOCSOFTWARE}
  331.  
  332.   DSCFXR_LOCHARDWARE  = $00000010;
  333.   {$EXTERNALSYM DSCFXR_LOCHARDWARE}
  334.   DSCFXR_LOCSOFTWARE  = $00000020;
  335.   {$EXTERNALSYM DSCFXR_LOCSOFTWARE}
  336.  
  337. {$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
  338.  
  339. type
  340.   PDSBufferDesc = ^TDSBufferDesc;
  341.   _DSBUFFERDESC = packed record
  342.     dwSize: DWORD;
  343.     dwFlags: DWORD;
  344.     dwBufferBytes: DWORD;
  345.     dwReserved: DWORD;
  346.     lpwfxFormat: PWaveFormatEx;
  347. {$IFDEF DIRECTSOUND_VERSION_7} // #if DIRECTSOUND_VERSION >= 0x0700
  348.     guid3DAlgorithm: TGUID;
  349. {$ENDIF} // DIRECTSOUND_VERSION >= 0x0700
  350.   end;
  351.   {$EXTERNALSYM _DSBUFFERDESC}
  352.   DSBUFFERDESC = _DSBUFFERDESC;
  353.   {$EXTERNALSYM DSBUFFERDESC}
  354.   TDSBufferDesc = _DSBUFFERDESC;
  355.  
  356. // Older version of this structure:
  357.  
  358.   PDSBufferDesc1 = ^TDSBufferDesc1;
  359.   _DSBUFFERDESC1 = packed record
  360.     dwSize: DWORD;
  361.     dwFlags: DWORD;
  362.     dwBufferBytes: DWORD;
  363.     dwReserved: DWORD;
  364.     lpwfxFormat: PWaveFormatEx;
  365.   end;
  366.   {$EXTERNALSYM _DSBUFFERDESC1}
  367.   DSBUFFERDESC1 = _DSBUFFERDESC1;
  368.   {$EXTERNALSYM DSBUFFERDESC1}
  369.   TDSBufferDesc1 = _DSBUFFERDESC1;
  370.  
  371.   PDS3DBuffer = ^TDS3DBuffer;
  372.   _DS3DBUFFER = packed record
  373.     dwSize: DWORD;
  374.     vPosition: TD3DVector;
  375.     vVelocity: TD3DVector;
  376.     dwInsideConeAngle: DWORD;
  377.     dwOutsideConeAngle: DWORD;
  378.     vConeOrientation: TD3DVector;
  379.     lConeOutsideVolume: Longint;
  380.     flMinDistance: TD3DValue;
  381.     flMaxDistance: TD3DValue;
  382.     dwMode: DWORD;
  383.   end;
  384.   {$EXTERNALSYM _DS3DBUFFER}
  385.   DS3DBUFFER = _DS3DBUFFER;
  386.   {$EXTERNALSYM DS3DBUFFER}
  387.   TDS3DBuffer = _DS3DBUFFER;
  388.  
  389.   PDS3DListener = ^TDS3DListener;
  390.   _DS3DLISTENER = packed record
  391.     dwSize: DWORD;
  392.     vPosition: TD3DVector;
  393.     vVelocity: TD3DVector;
  394.     vOrientFront: TD3DVector;
  395.     vOrientTop: TD3DVector;
  396.     flDistanceFactor: TD3DValue;
  397.     flRolloffFactor: TD3DValue;
  398.     flDopplerFactor: TD3DValue;
  399.   end;
  400.   {$EXTERNALSYM _DS3DLISTENER}
  401.   DS3DLISTENER = _DS3DLISTENER;
  402.   {$EXTERNALSYM DS3DLISTENER}
  403.   TDS3DListener = _DS3DLISTENER;
  404.  
  405.   PDSCcaps = ^TDSCcaps;
  406.   _DSCCAPS = packed record
  407.     dwSize: DWORD;
  408.     dwFlags: DWORD;
  409.     dwFormats: DWORD;
  410.     dwChannels: DWORD;
  411.   end;
  412.   {$EXTERNALSYM _DSCCAPS}
  413.   DSCCAPS = _DSCCAPS;
  414.   {$EXTERNALSYM DSCCAPS}
  415.   TDSCcaps = _DSCCAPS;
  416.  
  417.   PDSCBufferDesc1 = ^TDSCBufferDesc1;
  418.   _DSCBUFFERDESC1 = packed record
  419.     dwSize: DWORD;
  420.     dwFlags: DWORD;
  421.     dwBufferBytes: DWORD;
  422.     dwReserved: DWORD;
  423.     lpwfxFormat: PWaveFormatEx;
  424.   end;
  425.   {$EXTERNALSYM _DSCBUFFERDESC1}
  426.   DSCBUFFERDESC1 = _DSCBUFFERDESC1;
  427.   {$EXTERNALSYM DSCBUFFERDESC1}
  428.   TDSCBufferDesc1 = _DSCBUFFERDESC1;
  429.  
  430.   PDSCBufferDesc = ^TDSCBufferDesc;
  431.   _DSCBUFFERDESC = packed record
  432.     dwSize: DWORD;
  433.     dwFlags: DWORD;
  434.     dwBufferBytes: DWORD;
  435.     dwReserved: DWORD;
  436.     lpwfxFormat: PWaveFormatEx;
  437. {$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
  438.     dwFXCount: DWORD;
  439.     lpDSCFXDesc: PDSCEffectDesc;
  440. {$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
  441.   end;
  442.   {$EXTERNALSYM _DSCBUFFERDESC}
  443.   DSCBUFFERDESC = _DSCBUFFERDESC;
  444.   {$EXTERNALSYM DSCBUFFERDESC}
  445.   TDSCBufferDesc = _DSCBUFFERDESC;
  446.  
  447.   PDSCBCaps = ^TDSCBCaps;
  448.   _DSCBCAPS = packed record
  449.     dwSize: DWORD;
  450.     dwFlags: DWORD;
  451.     dwBufferBytes: DWORD;
  452.     dwReserved: DWORD;
  453.   end;
  454.   {$EXTERNALSYM _DSCBCAPS}
  455.   DSCBCAPS = _DSCBCAPS;
  456.   {$EXTERNALSYM DSCBCAPS}
  457.   TDSCBCaps = _DSCBCAPS;
  458.  
  459.   PDSBPositionNotify = ^TDSBPositionNotify;
  460.   _DSBPOSITIONNOTIFY = packed record
  461.     dwOffset: DWORD;
  462.     hEventNotify: THandle;
  463.   end;
  464.   {$EXTERNALSYM _DSBPOSITIONNOTIFY}
  465.   DSBPOSITIONNOTIFY = _DSBPOSITIONNOTIFY;
  466.   {$EXTERNALSYM DSBPOSITIONNOTIFY}
  467.   TDSBPositionNotify = _DSBPOSITIONNOTIFY;
  468.  
  469.  
  470. type
  471.   PReferenceTime = ^TReferenceTime;
  472.   REFERENCE_TIME = LONGLONG;
  473.   {$EXTERNALSYM REFERENCE_TIME}
  474.   TReferenceTime = REFERENCE_TIME;
  475.  
  476. type
  477.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IReferenceClock);'}
  478.   {$EXTERNALSYM IReferenceClock}
  479.   IReferenceClock = interface(IUnknown)
  480.     ['{56a86897-0ad4-11ce-b03a-0020af0ba770}']
  481.     // IReferenceClock methods
  482.     function GetTime(out pTime: TReferenceTime): HResult; stdcall;
  483.     function AdviseTime(rtBaseTime, rtStreamTime: TReferenceTime; hEvent: THandle; out pdwAdviseCookie: DWORD): HResult; stdcall;
  484.     function AdvisePeriodic(const rtStartTime, rtPeriodTime: TReferenceTime; hSemaphore: THandle; out pdwAdviseCookie: DWORD): HResult; stdcall;
  485.     function Unadvise(dwAdviseCookie: DWORD): HResult; stdcall;
  486.   end;
  487.  
  488.   IID_IReferenceClock = IReferenceClock;
  489.   {$EXTERNALSYM IID_IReferenceClock}
  490.  
  491.  
  492.   IDirectSoundBuffer = interface;
  493.  
  494.   //
  495.   // IDirectSound
  496.   //
  497.  
  498.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSound);'}
  499.   {$EXTERNALSYM IDirectSound}
  500.   IDirectSound = interface(IUnknown)
  501.     ['{279AFA83-4981-11CE-A521-0020AF0BE560}']
  502.     // IDirectSound methods
  503.     function CreateSoundBuffer(const pcDSBufferDesc: TDSBufferDesc; out ppDSBuffer: IDirectSoundBuffer; pUnkOuter: IUnknown): HResult; stdcall;
  504.     function GetCaps(out pDSCaps: TDSCaps): HResult; stdcall;
  505.     function DuplicateSoundBuffer(pDSBufferOriginal: IDirectSoundBuffer; out ppDSBufferDuplicate: IDirectSoundBuffer): HResult; stdcall;
  506.     function SetCooperativeLevel(hwnd: HWND; dwLevel: DWORD): HResult; stdcall;
  507.     function Compact: HResult; stdcall;
  508.     function GetSpeakerConfig(out pdwSpeakerConfig: DWORD): HResult; stdcall;
  509.     function SetSpeakerConfig(dwSpeakerConfig: DWORD): HResult; stdcall;
  510.     function Initialize(pcGuidDevice: PGUID): HResult; stdcall;
  511.   end;
  512.  
  513.   IID_IDirectSound = IDirectSound;
  514.   {$EXTERNALSYM IID_IDirectSound}
  515.  
  516.  
  517. {$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
  518.  
  519.   //
  520.   // IDirectSound8
  521.   //
  522.  
  523.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSound8);'}
  524.   {$EXTERNALSYM IDirectSound8}
  525.   IDirectSound8 = interface(IDirectSound)
  526.     ['{C50A7E93-F395-4834-9EF6-7FA99DE50966}']
  527.     // IDirectSound8 methods
  528.     function VerifyCertification(pdwCertified: PDWORD): HResult; stdcall;
  529.   end;
  530.  
  531.   IID_IDirectSound8 = IDirectSound8;
  532.   {$EXTERNALSYM IID_IDirectSound8}
  533.  
  534.  
  535. {$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
  536.  
  537.   //
  538.   // IDirectSoundBuffer
  539.   //
  540.  
  541.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundBuffer);'}
  542.   {$EXTERNALSYM IDirectSoundBuffer}
  543.   IDirectSoundBuffer = interface(IUnknown)
  544.     ['{279AFA85-4981-11CE-A521-0020AF0BE560}']
  545.     // IDirectSoundBuffer methods
  546.     function GetCaps(var pDSBufferCaps: TDSBcaps): HResult; stdcall;
  547.     function GetCurrentPosition(pdwCurrentPlayCursor, pdwCurrentWriteCursor: PDWORD): HResult; stdcall;
  548.     function GetFormat(pwfxFormat: PWaveFormatEx; dwSizeAllocated: DWORD; pdwSizeWritten: PDWORD): HResult; stdcall;
  549.     function GetVolume(out plVolume: Longint): HResult; stdcall;
  550.     function GetPan(out plPan: Longint): HResult; stdcall;
  551.     function GetFrequency(out pdwFrequency: DWORD): HResult; stdcall;
  552.     function GetStatus(out pdwStatus: DWORD): HResult; stdcall;
  553.     function Initialize(pDirectSound: IDirectSound; const pcDSBufferDesc: TDSBufferDesc): HResult; stdcall;
  554.     function Lock(dwOffset, dwBytes: DWORD; out ppvAudioPtr1: Pointer; out pdwAudioBytes1: DWORD;
  555.       out ppvAudioPtr2: Pointer; out pdwAudioBytes2: DWORD; dwFlags: DWORD): HResult; stdcall;
  556.     function Play(dwReserved1, dwPriority, dwFlags: DWORD): HResult; stdcall;
  557.     function SetCurrentPosition(dwNewPosition: DWORD): HResult; stdcall;
  558.     function SetFormat(pcfxFormat: PWaveFormatEx): HResult; stdcall;
  559.     function SetVolume(lVolume: Longint): HResult; stdcall;
  560.     function SetPan(lPan: Longint): HResult; stdcall;
  561.     function SetFrequency(dwFrequency: DWORD): HResult; stdcall;
  562.     function Stop: HResult; stdcall;
  563.     function Unlock(pvAudioPtr1: Pointer; dwAudioBytes1: DWORD; pvAudioPtr2: Pointer; dwAudioBytes2: DWORD): HResult; stdcall;
  564.     function Restore: HResult; stdcall;
  565.   end;
  566.  
  567.   IID_IDirectSoundBuffer = IDirectSoundBuffer;
  568.   {$EXTERNALSYM IID_IDirectSoundBuffer}
  569.  
  570.  
  571. {$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
  572.  
  573.   //
  574.   // IDirectSoundBuffer8
  575.   //
  576.  
  577.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundBuffer8);'}
  578.   {$EXTERNALSYM IDirectSoundBuffer8}
  579.   IDirectSoundBuffer8 = interface(IDirectSoundBuffer)
  580.     ['{6825a449-7524-4d82-920f-50e36ab3ab1e}']
  581.     // IDirectSoundBuffer8 methods
  582.     function SetFX(dwEffectsCount: DWORD; pDSFXDesc: PDSEffectDesc; pdwResultCodes: PDWORD): HResult; stdcall;
  583.     function AcquireResources(dwFlags, dwEffectsCount, pdwResultCodes: PDWORD): HResult; stdcall;
  584.     function GetObjectInPath(const rguidObject: TGUID; dwIndex: DWORD; const rguidInterface: TGUID; out ppObject{IUnknown}): HResult; stdcall;
  585.   end;
  586.  
  587.   IID_IDirectSoundBuffer8 = IDirectSoundBuffer8;
  588.   {$EXTERNALSYM IID_IDirectSoundBuffer8}
  589.  
  590. const
  591.   // Special GUID meaning "select all objects" for use in GetObjectInPath()
  592.   GUID_All_Objects: TGUID = '{aa114de5-c262-4169-a1c8-23d698cc73b5}';
  593.   {$EXTERNALSYM GUID_All_Objects}
  594.  
  595.  
  596. type
  597. {$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
  598.  
  599.   //
  600.   // IDirectSound3DListener
  601.   //
  602.  
  603.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSound3DListener);'}
  604.   {$EXTERNALSYM IDirectSound3DListener}
  605.   IDirectSound3DListener = interface(IUnknown)
  606.     ['{279AFA84-4981-11CE-A521-0020AF0BE560}']
  607.     // IDirectSound3DListener methods
  608.     function GetAllParameters(var pListener: TDS3DListener): HResult; stdcall;
  609.     function GetDistanceFactor(out pflDistanceFactor: TD3DValue): HResult; stdcall;
  610.     function GetDopplerFactor(out pflDopplerFactor: TD3DValue): HResult; stdcall;
  611.     function GetOrientation(out pvOrientFront, pvOrientTop: TD3DVector): HResult; stdcall;
  612.     function GetPosition(out pvPosition: TD3DVector): HResult; stdcall;
  613.     function GetRolloffFactor(out pflRolloffFactor: TD3DValue): HResult; stdcall;
  614.     function GetVelocity(out pvVelocity: TD3DVector): HResult; stdcall;
  615.     function SetAllParameters(const pcListener: TDS3DListener; dwApply: DWORD): HResult; stdcall;
  616.     function SetDistanceFactor(flDistanceFactor: TD3DValue; dwApply: DWORD): HResult; stdcall;
  617.     function SetDopplerFactor(flDopplerFactor: TD3DValue; dwApply: DWORD): HResult; stdcall;
  618.     function SetOrientation(xFront, yFront, zFront: TD3DValue; xTop, yTop, zTop: TD3DValue; dwApply: DWORD): HResult; stdcall;
  619.     function SetPosition(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
  620.     function SetRolloffFactor(flRolloffFactor: TD3DValue; dwApply: DWORD): HResult; stdcall;
  621.     function SetVelocity(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
  622.     function CommitDeferredSettings: HResult; stdcall;
  623.   end;
  624.  
  625.   IID_IDirectSound3DListener = IDirectSound3DListener;
  626.   {$EXTERNALSYM IID_IDirectSound3DListener}
  627.  
  628.  
  629.   //
  630.   // IDirectSound3DBuffer
  631.   //
  632.  
  633.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSound3DBuffer);'}
  634.   {$EXTERNALSYM IDirectSound3DBuffer}
  635.   IDirectSound3DBuffer = interface(IUnknown)
  636.     ['{279AFA86-4981-11CE-A521-0020AF0BE560}']
  637.     // IDirectSound3DBuffer methods
  638.     function GetAllParameters(var pDs3dBuffer: TDS3DBuffer): HResult; stdcall;
  639.     function GetConeAngles(var pdwInsideConeAngle, pdwOutsideConeAngle: DWORD): HResult; stdcall;
  640.     function GetConeOrientation(out pvOrientation: TD3DVector): HResult; stdcall;
  641.     function GetConeOutsideVolume(out plConeOutsideVolume: Longint): HResult; stdcall;
  642.     function GetMaxDistance(out pflMaxDistance: TD3DValue): HResult; stdcall;
  643.     function GetMinDistance(out pflMinDistance: TD3DValue): HResult; stdcall;
  644.     function GetMode(out pdwMode: DWORD): HResult; stdcall;
  645.     function GetPosition(out pvPosition: TD3DVector): HResult; stdcall;
  646.     function GetVelocity(out pvVelocity: TD3DVector): HResult; stdcall;
  647.     function SetAllParameters(const pcDs3dBuffer: TDS3DBuffer; dwApply: DWORD): HResult; stdcall;
  648.     function SetConeAngles(dwInsideConeAngle, dwOutsideConeAngle: DWORD; dwApply: DWORD): HResult; stdcall;
  649.     function SetConeOrientation(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
  650.     function SetConeOutsideVolume(lConeOutsideVolume: Longint; dwApply: DWORD): HResult; stdcall;
  651.     function SetMaxDistance(flMaxDistance: TD3DValue; dwApply: DWORD): HResult; stdcall;
  652.     function SetMinDistance(flMinDistance: TD3DValue; dwApply: DWORD): HResult; stdcall;
  653.     function SetMode(dwMode: DWORD; dwApply: DWORD): HResult; stdcall;
  654.     function SetPosition(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
  655.     function SetVelocity(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
  656.   end;
  657.  
  658.   IID_IDirectSound3DBuffer = IDirectSound3DBuffer;
  659.   {$EXTERNALSYM IID_IDirectSound3DBuffer}
  660.  
  661.  
  662.   IDirectSoundCaptureBuffer = interface;
  663.  
  664.   //
  665.   // IDirectSoundCapture
  666.   //
  667.  
  668.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundCapture);'}
  669.   {$EXTERNALSYM IDirectSoundCapture}
  670.   IDirectSoundCapture = interface(IUnknown)
  671.     ['{b0210781-89cd-11d0-af08-00a0c925cd16}']
  672.     // IDirectSoundCapture methods
  673.     function CreateCaptureBuffer(const pcDSCBufferDesc: TDSCBufferDesc; out ppDSCBuffer: IDirectSoundCaptureBuffer; pUnkOuter: IUnknown): HResult; stdcall;
  674.     function GetCaps(var pDSCCaps: TDSCcaps): HResult; stdcall;
  675.     function Initialize(pcGuidDevice: PGUID): HResult; stdcall;
  676.   end;
  677.  
  678.   IID_IDirectSoundCapture = IDirectSoundCapture;
  679.   {$EXTERNALSYM IID_IDirectSoundCapture}
  680.  
  681.  
  682.   //
  683.   // IDirectSoundCaptureBuffer
  684.   //
  685.  
  686.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundCaptureBuffer);'}
  687.   {$EXTERNALSYM IDirectSoundCaptureBuffer}
  688.   IDirectSoundCaptureBuffer = interface(IUnknown)
  689.     ['{b0210782-89cd-11d0-af08-00a0c925cd16}']
  690.     // IDirectSoundCaptureBuffer methods
  691.     function GetCaps(var pDSCBCaps: TDSCBCaps): HResult; stdcall;
  692.     function GetCurrentPosition(pdwCapturePosition, pdwReadPosition: PDWORD): HResult; stdcall;
  693.     function GetFormat(pwfxFormat: PWaveFormatEx; dwSizeAllocated: DWORD; pdwSizeWritten: PDWORD): HResult; stdcall;
  694.     function GetStatus(pdwStatus: PDWORD): HResult; stdcall;
  695.     function Initialize(pDirectSoundCapture: IDirectSoundCapture; const pcDSCBufferDesc: TDSCBufferDesc): HResult; stdcall;
  696.     function Lock(dwOffset, dwBytes: DWORD; out ppvAudioPtr1: Pointer; out pdwAudioBytes1: DWORD; out ppvAudioPtr2: Pointer; out pdwAudioBytes2: DWORD; dwFlags: DWORD): HResult; stdcall;
  697.     function Start(dwFlags: DWORD): HResult; stdcall;
  698.     function Stop: HResult; stdcall;
  699.     function Unlock(pvAudioPtr1: Pointer; dwAudioBytes1: DWORD; pvAudioPtr2: Pointer; dwAudioBytes2: DWORD): HResult; stdcall;
  700.   end;
  701.  
  702.   IID_IDirectSoundCaptureBuffer = IDirectSoundCaptureBuffer;
  703.   {$EXTERNALSYM IID_IDirectSoundCaptureBuffer}
  704.  
  705.  
  706. {$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
  707.  
  708.   //
  709.   // IDirectSoundCaptureBuffer8
  710.   //
  711.  
  712.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundCaptureBuffer8);'}
  713.   {$EXTERNALSYM IDirectSoundCaptureBuffer8}
  714.   IDirectSoundCaptureBuffer8 = interface(IDirectSoundCaptureBuffer)
  715.     ['{00990df4-0dbb-4872-833e-6d303e80aeb6}']
  716.     // IDirectSoundCaptureBuffer8 methods
  717.     function GetObjectInPath(const rguidObject: TGUID; dwIndex: DWORD; const rguidInterface: TGUID; out ppObject{IUnknown}): HResult; stdcall;
  718.     function GetFXStatus(dwFXCount: DWORD; pdwFXStatus: PDWORD): HResult; stdcall;
  719.   end;
  720.  
  721.   IID_IDirectSoundCaptureBuffer8 = IDirectSoundCaptureBuffer8;
  722.   {$EXTERNALSYM IID_IDirectSoundCaptureBuffer8}
  723.  
  724. {$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
  725.  
  726.   //
  727.   // IDirectSoundNotify
  728.   //
  729.  
  730.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundNotify);'}
  731.   {$EXTERNALSYM IDirectSoundNotify}
  732.   IDirectSoundNotify = interface(IUnknown)
  733.     ['{b0210783-89cd-11d0-af08-00a0c925cd16}']
  734.     // IDirectSoundNotify methods
  735.     function SetNotificationPositions(dwPositionNotifies: DWORD; pcPositionNotifies: PDSBPositionNotify): HResult; stdcall;
  736.   end;
  737.  
  738.   IID_IDirectSoundNotify = IDirectSoundNotify;
  739.   {$EXTERNALSYM IID_IDirectSoundNotify}
  740.  
  741.  
  742.   //
  743.   // IKsPropertySet
  744.   //
  745.  
  746. const
  747.   KSPROPERTY_SUPPORT_GET  = $00000001;
  748.   {$EXTERNALSYM KSPROPERTY_SUPPORT_GET}
  749.   KSPROPERTY_SUPPORT_SET  = $00000002;
  750.   {$EXTERNALSYM KSPROPERTY_SUPPORT_SET}
  751.  
  752. type
  753.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IKsPropertySet);'}
  754.   {$EXTERNALSYM IKsPropertySet}
  755.   IKsPropertySet = interface(IUnknown)
  756.     ['{31efac30-515c-11d0-a9aa-00aa0061be93}']
  757.     // IKsPropertySet methods
  758.     function Get(const rguidPropSet: TGUID; ulId: ULONG; pInstanceData: Pointer; ulInstanceLength: ULONG; pPropertyData: Pointer; ulDataLength: ULONG; out pulBytesReturned: ULONG): HResult; stdcall;
  759.     function _Set(const rguidPropSet: TGUID; ulId: ULONG; pInstanceData: Pointer; ulInstanceLength: ULONG; pPropertyData: Pointer; ulDataLength: ULONG): HResult; stdcall;
  760.     function QuerySupport(rguidPropSet: TGUID; ulId: ULONG; out pulTypeSupport: ULONG): HResult; stdcall;
  761.   end;
  762.  
  763.   IID_IKsPropertySet = IKsPropertySet;
  764.   {$EXTERNALSYM IID_IKsPropertySet}
  765.  
  766. {$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
  767.  
  768.   //
  769.   // IDirectSoundFXGargle
  770.   //
  771.  
  772.   PDSFXGargle = ^TDSFXGargle;
  773.   _DSFXGargle = packed record
  774.     dwRateHz: DWORD;               // Rate of modulation in hz
  775.     dwWaveShape: DWORD;            // DSFXGARGLE_WAVE_xxx
  776.   end;
  777.   {$EXTERNALSYM _DSFXGargle}
  778.   DSFXGargle = _DSFXGargle;
  779.   {$EXTERNALSYM DSFXGargle}
  780.   TDSFXGargle = _DSFXGargle;
  781.  
  782. const
  783.   DSFXGARGLE_WAVE_TRIANGLE        = 0;
  784.   {$EXTERNALSYM DSFXGARGLE_WAVE_TRIANGLE}
  785.   DSFXGARGLE_WAVE_SQUARE          = 1;
  786.   {$EXTERNALSYM DSFXGARGLE_WAVE_SQUARE}
  787.  
  788.   DSFXGARGLE_RATEHZ_MIN           = 1;
  789.   {$EXTERNALSYM DSFXGARGLE_RATEHZ_MIN}
  790.   DSFXGARGLE_RATEHZ_MAX           = 1000;
  791.   {$EXTERNALSYM DSFXGARGLE_RATEHZ_MAX}
  792.  
  793. type
  794.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXGargle);'}
  795.   {$EXTERNALSYM IDirectSoundFXGargle}
  796.   IDirectSoundFXGargle = interface(IUnknown)
  797.     ['{d616f352-d622-11ce-aac5-0020af0b99a3}']
  798.     // IDirectSoundFXGargle methods
  799.     function SetAllParameters(const pcDsFxGargle: TDSFXGargle): HResult; stdcall;
  800.     function GetAllParameters(out pDsFxGargle: TDSFXGargle): HResult; stdcall;
  801.   end;
  802.  
  803.   IID_IDirectSoundFXGargle = IDirectSoundFXGargle;
  804.   {$EXTERNALSYM IID_IDirectSoundFXGargle}
  805.  
  806.  
  807.   //
  808.   // IDirectSoundFXChorus
  809.   //
  810.  
  811.   PDSFXChorus = ^TDSFXChorus;
  812.   _DSFXChorus = packed record
  813.     fWetDryMix: Single;
  814.     fDepth: Single;
  815.     fFeedback: Single;
  816.     fFrequency: Single;
  817.     lWaveform: Longint;          // LFO shape; DSFXCHORUS_WAVE_xxx
  818.     fDelay: Single;
  819.     lPhase: Longint;
  820.   end;
  821.   {$EXTERNALSYM _DSFXChorus}
  822.   DSFXChorus = _DSFXChorus;
  823.   {$EXTERNALSYM DSFXChorus}
  824.   TDSFXChorus = _DSFXChorus;
  825.  
  826. const
  827.   DSFXCHORUS_WAVE_TRIANGLE        = 0;
  828.   {$EXTERNALSYM DSFXCHORUS_WAVE_TRIANGLE}
  829.   DSFXCHORUS_WAVE_SIN             = 1;
  830.   {$EXTERNALSYM DSFXCHORUS_WAVE_SIN}
  831.  
  832.   DSFXCHORUS_WETDRYMIX_MIN        = 0.0;
  833.   {$EXTERNALSYM DSFXCHORUS_WETDRYMIX_MIN}
  834.   DSFXCHORUS_WETDRYMIX_MAX        = 100.0;
  835.   {$EXTERNALSYM DSFXCHORUS_WETDRYMIX_MAX}
  836.   DSFXCHORUS_DEPTH_MIN            = 0.0;
  837.   {$EXTERNALSYM DSFXCHORUS_DEPTH_MIN}
  838.   DSFXCHORUS_DEPTH_MAX            = 100.0;
  839.   {$EXTERNALSYM DSFXCHORUS_DEPTH_MAX}
  840.   DSFXCHORUS_FEEDBACK_MIN         = -99.0;
  841.   {$EXTERNALSYM DSFXCHORUS_FEEDBACK_MIN}
  842.   DSFXCHORUS_FEEDBACK_MAX         = 99.0;
  843.   {$EXTERNALSYM DSFXCHORUS_FEEDBACK_MAX}
  844.   DSFXCHORUS_FREQUENCY_MIN        = 0.0;
  845.   {$EXTERNALSYM DSFXCHORUS_FREQUENCY_MIN}
  846.   DSFXCHORUS_FREQUENCY_MAX        = 10.0;
  847.   {$EXTERNALSYM DSFXCHORUS_FREQUENCY_MAX}
  848.   DSFXCHORUS_DELAY_MIN            = 0.0;
  849.   {$EXTERNALSYM DSFXCHORUS_DELAY_MIN}
  850.   DSFXCHORUS_DELAY_MAX            = 20.0;
  851.   {$EXTERNALSYM DSFXCHORUS_DELAY_MAX}
  852.   DSFXCHORUS_PHASE_MIN            = 0;
  853.   {$EXTERNALSYM DSFXCHORUS_PHASE_MIN}
  854.   DSFXCHORUS_PHASE_MAX            = 4;
  855.   {$EXTERNALSYM DSFXCHORUS_PHASE_MAX}
  856.  
  857.   DSFXCHORUS_PHASE_NEG_180        = 0;
  858.   {$EXTERNALSYM DSFXCHORUS_PHASE_NEG_180}
  859.   DSFXCHORUS_PHASE_NEG_90         = 1;
  860.   {$EXTERNALSYM DSFXCHORUS_PHASE_NEG_90}
  861.   DSFXCHORUS_PHASE_ZERO           = 2;
  862.   {$EXTERNALSYM DSFXCHORUS_PHASE_ZERO}
  863.   DSFXCHORUS_PHASE_90             = 3;
  864.   {$EXTERNALSYM DSFXCHORUS_PHASE_90}
  865.   DSFXCHORUS_PHASE_180            = 4;
  866.   {$EXTERNALSYM DSFXCHORUS_PHASE_180}
  867.  
  868. type
  869.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXChorus);'}
  870.   {$EXTERNALSYM IDirectSoundFXChorus}
  871.   IDirectSoundFXChorus = interface(IUnknown)
  872.     ['{880842e3-145f-43e6-a934-a71806e50547}']
  873.     // IDirectSoundFXChorus methods
  874.     function SetAllParameters(const pcDsFxChorus: TDSFXChorus): HResult; stdcall;
  875.     function GetAllParameters(out pDsFxChorus: TDSFXChorus): HResult; stdcall;
  876.   end;
  877.  
  878.   IID_IDirectSoundFXChorus = IDirectSoundFXChorus;
  879.   {$EXTERNALSYM IID_IDirectSoundFXChorus}
  880.  
  881.  
  882.   //
  883.   // IDirectSoundFXFlanger
  884.   //
  885.  
  886.   PDSFXFlanger = ^TDSFXFlanger;
  887.   _DSFXFlanger = packed record
  888.     fWetDryMix: Single;
  889.     fDepth: Single;
  890.     fFeedback: Single;
  891.     fFrequency: Single;
  892.     lWaveform: Longint;
  893.     fDelay: Single;
  894.     lPhase: Longint;
  895.   end;
  896.   {$EXTERNALSYM _DSFXFlanger}
  897.   DSFXFlanger = _DSFXFlanger;
  898.   {$EXTERNALSYM DSFXFlanger}
  899.   TDSFXFlanger = _DSFXFlanger;
  900.  
  901. const
  902.   DSFXFLANGER_WAVE_TRIANGLE       = 0;
  903.   {$EXTERNALSYM DSFXFLANGER_WAVE_TRIANGLE}
  904.   DSFXFLANGER_WAVE_SIN            = 1;
  905.   {$EXTERNALSYM DSFXFLANGER_WAVE_SIN}
  906.  
  907.   DSFXFLANGER_WETDRYMIX_MIN       = 0.0;
  908.   {$EXTERNALSYM DSFXFLANGER_WETDRYMIX_MIN}
  909.   DSFXFLANGER_WETDRYMIX_MAX       = 100.0;
  910.   {$EXTERNALSYM DSFXFLANGER_WETDRYMIX_MAX}
  911.   DSFXFLANGER_FREQUENCY_MIN       = 0.0;
  912.   {$EXTERNALSYM DSFXFLANGER_FREQUENCY_MIN}
  913.   DSFXFLANGER_FREQUENCY_MAX       = 10.0;
  914.   {$EXTERNALSYM DSFXFLANGER_FREQUENCY_MAX}
  915.   DSFXFLANGER_DEPTH_MIN           = 0.0;
  916.   {$EXTERNALSYM DSFXFLANGER_DEPTH_MIN}
  917.   DSFXFLANGER_DEPTH_MAX           = 100.0;
  918.   {$EXTERNALSYM DSFXFLANGER_DEPTH_MAX}
  919.   DSFXFLANGER_PHASE_MIN           = 0;
  920.   {$EXTERNALSYM DSFXFLANGER_PHASE_MIN}
  921.   DSFXFLANGER_PHASE_MAX           = 4;
  922.   {$EXTERNALSYM DSFXFLANGER_PHASE_MAX}
  923.   DSFXFLANGER_FEEDBACK_MIN        = -99.0;
  924.   {$EXTERNALSYM DSFXFLANGER_FEEDBACK_MIN}
  925.   DSFXFLANGER_FEEDBACK_MAX        = 99.0;
  926.   {$EXTERNALSYM DSFXFLANGER_FEEDBACK_MAX}
  927.   DSFXFLANGER_DELAY_MIN           = 0.0;
  928.   {$EXTERNALSYM DSFXFLANGER_DELAY_MIN}
  929.   DSFXFLANGER_DELAY_MAX           = 4.0;
  930.   {$EXTERNALSYM DSFXFLANGER_DELAY_MAX}
  931.  
  932.   DSFXFLANGER_PHASE_NEG_180       = 0;
  933.   {$EXTERNALSYM DSFXFLANGER_PHASE_NEG_180}
  934.   DSFXFLANGER_PHASE_NEG_90        = 1;
  935.   {$EXTERNALSYM DSFXFLANGER_PHASE_NEG_90}
  936.   DSFXFLANGER_PHASE_ZERO          = 2;
  937.   {$EXTERNALSYM DSFXFLANGER_PHASE_ZERO}
  938.   DSFXFLANGER_PHASE_90            = 3;
  939.   {$EXTERNALSYM DSFXFLANGER_PHASE_90}
  940.   DSFXFLANGER_PHASE_180           = 4;
  941.   {$EXTERNALSYM DSFXFLANGER_PHASE_180}
  942.  
  943. type
  944.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXFlanger);'}
  945.   {$EXTERNALSYM IDirectSoundFXFlanger}
  946.   IDirectSoundFXFlanger = interface(IUnknown)
  947.     ['{903e9878-2c92-4072-9b2c-ea68f5396783}']
  948.     // IDirectSoundFXFlanger methods
  949.     function SetAllParameters(const pcDsFxFlanger: TDSFXFlanger): HResult; stdcall;
  950.     function GetAllParameters(out pDsFxFlanger: TDSFXFlanger): HResult; stdcall;
  951.   end;
  952.  
  953.   IID_IDirectSoundFXFlanger = IDirectSoundFXFlanger;
  954.   {$EXTERNALSYM IID_IDirectSoundFXFlanger}
  955.  
  956.  
  957.   //
  958.   // IDirectSoundFXEcho
  959.   //
  960.  
  961.   PDSFXEcho = ^TDSFXEcho;
  962.   _DSFXEcho = packed record
  963.     fWetDryMix: Single;
  964.     fFeedback: Single;
  965.     fLeftDelay: Single;
  966.     fRightDelay: Single;
  967.     lPanDelay: Longint;
  968.   end;
  969.   {$EXTERNALSYM _DSFXEcho}
  970.   DSFXEcho = _DSFXEcho;
  971.   {$EXTERNALSYM DSFXEcho}
  972.   TDSFXEcho = _DSFXEcho;
  973.  
  974. const
  975.   DSFXECHO_WETDRYMIX_MIN      = 0.0;
  976.   {$EXTERNALSYM DSFXECHO_WETDRYMIX_MIN}
  977.   DSFXECHO_WETDRYMIX_MAX      = 100.0;
  978.   {$EXTERNALSYM DSFXECHO_WETDRYMIX_MAX}
  979.   DSFXECHO_FEEDBACK_MIN       = 0.0;
  980.   {$EXTERNALSYM DSFXECHO_FEEDBACK_MIN}
  981.   DSFXECHO_FEEDBACK_MAX       = 100.0;
  982.   {$EXTERNALSYM DSFXECHO_FEEDBACK_MAX}
  983.   DSFXECHO_LEFTDELAY_MIN      = 1.0;
  984.   {$EXTERNALSYM DSFXECHO_LEFTDELAY_MIN}
  985.   DSFXECHO_LEFTDELAY_MAX      = 2000.0;
  986.   {$EXTERNALSYM DSFXECHO_LEFTDELAY_MAX}
  987.   DSFXECHO_RIGHTDELAY_MIN     = 1.0;
  988.   {$EXTERNALSYM DSFXECHO_RIGHTDELAY_MIN}
  989.   DSFXECHO_RIGHTDELAY_MAX     = 2000.0;
  990.   {$EXTERNALSYM DSFXECHO_RIGHTDELAY_MAX}
  991.   DSFXECHO_PANDELAY_MIN       = 0;
  992.   {$EXTERNALSYM DSFXECHO_PANDELAY_MIN}
  993.   DSFXECHO_PANDELAY_MAX       = 1;
  994.   {$EXTERNALSYM DSFXECHO_PANDELAY_MAX}
  995.  
  996. type
  997.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXEcho);'}
  998.   {$EXTERNALSYM IDirectSoundFXEcho}
  999.   IDirectSoundFXEcho = interface(IUnknown)
  1000.     ['{8bd28edf-50db-4e92-a2bd-445488d1ed42}']
  1001.     // IDirectSoundFXEcho methods
  1002.     function SetAllParameters(const pcDsFxEcho: TDSFXEcho): HResult; stdcall;
  1003.     function GetAllParameters(out pDsFxEcho: TDSFXEcho): HResult; stdcall;
  1004.   end;
  1005.  
  1006.   IID_IDirectSoundFXEcho = IDirectSoundFXEcho;
  1007.   {$EXTERNALSYM IID_IDirectSoundFXEcho}
  1008.  
  1009.  
  1010.   //
  1011.   // IDirectSoundFXDistortion
  1012.   //
  1013.  
  1014.   PDSFXDistortion = ^TDSFXDistortion;
  1015.   _DSFXDistortion = packed record
  1016.     fGain: Single;
  1017.     fEdge: Single;
  1018.     fPostEQCenterFrequency: Single;
  1019.     fPostEQBandwidth: Single;
  1020.     fPreLowpassCutoff: Single;
  1021.   end;
  1022.   {$EXTERNALSYM _DSFXDistortion}
  1023.   DSFXDistortion = _DSFXDistortion;
  1024.   {$EXTERNALSYM DSFXDistortion}
  1025.   TDSFXDistortion = _DSFXDistortion;
  1026.  
  1027. const
  1028.   DSFXDISTORTION_GAIN_MIN                     = -60.0;
  1029.   {$EXTERNALSYM DSFXDISTORTION_GAIN_MIN}
  1030.   DSFXDISTORTION_GAIN_MAX                     = 0.0;
  1031.   {$EXTERNALSYM DSFXDISTORTION_GAIN_MAX}
  1032.   DSFXDISTORTION_EDGE_MIN                     = 0.0;
  1033.   {$EXTERNALSYM DSFXDISTORTION_EDGE_MIN}
  1034.   DSFXDISTORTION_EDGE_MAX                     = 100.0;
  1035.   {$EXTERNALSYM DSFXDISTORTION_EDGE_MAX}
  1036.   DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN    = 100.0;
  1037.   {$EXTERNALSYM DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN}
  1038.   DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX    = 8000.0;
  1039.   {$EXTERNALSYM DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX}
  1040.   DSFXDISTORTION_POSTEQBANDWIDTH_MIN          = 100.0;
  1041.   {$EXTERNALSYM DSFXDISTORTION_POSTEQBANDWIDTH_MIN}
  1042.   DSFXDISTORTION_POSTEQBANDWIDTH_MAX          = 8000.0;
  1043.   {$EXTERNALSYM DSFXDISTORTION_POSTEQBANDWIDTH_MAX}
  1044.   DSFXDISTORTION_PRELOWPASSCUTOFF_MIN         = 100.0;
  1045.   {$EXTERNALSYM DSFXDISTORTION_PRELOWPASSCUTOFF_MIN}
  1046.   DSFXDISTORTION_PRELOWPASSCUTOFF_MAX         = 8000.0;
  1047.   {$EXTERNALSYM DSFXDISTORTION_PRELOWPASSCUTOFF_MAX}
  1048.  
  1049. type
  1050.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXDistortion);'}
  1051.   {$EXTERNALSYM IDirectSoundFXDistortion}
  1052.   IDirectSoundFXDistortion = interface(IUnknown)
  1053.     ['{8ecf4326-455f-4d8b-bda9-8d5d3e9e3e0b}']
  1054.     // IDirectSoundFXDistortion methods
  1055.     function SetAllParameters(const pcDsFxDistortion: TDSFXDistortion): HResult; stdcall;
  1056.     function GetAllParameters(out pDsFxDistortion: TDSFXDistortion): HResult; stdcall;
  1057.   end;
  1058.  
  1059.   IID_IDirectSoundFXDistortion = IDirectSoundFXDistortion;
  1060.   {$EXTERNALSYM IID_IDirectSoundFXDistortion}
  1061.  
  1062.  
  1063.   //
  1064.   // IDirectSoundFXCompressor
  1065.   //
  1066.  
  1067.   PDSFXCompressor = ^TDSFXCompressor;
  1068.   _DSFXCompressor = packed record
  1069.     fGain: Single;
  1070.     fAttack: Single;
  1071.     fRelease: Single;
  1072.     fThreshold: Single;
  1073.     fRatio: Single;
  1074.     fPredelay: Single;
  1075.   end;
  1076.   {$EXTERNALSYM _DSFXCompressor}
  1077.   DSFXCompressor = _DSFXCompressor;
  1078.   {$EXTERNALSYM DSFXCompressor}
  1079.   TDSFXCompressor = _DSFXCompressor;
  1080.  
  1081. const
  1082.   DSFXCOMPRESSOR_GAIN_MIN             = -60.0;
  1083.   {$EXTERNALSYM DSFXCOMPRESSOR_GAIN_MIN}
  1084.   DSFXCOMPRESSOR_GAIN_MAX             = 60.0;
  1085.   {$EXTERNALSYM DSFXCOMPRESSOR_GAIN_MAX}
  1086.   DSFXCOMPRESSOR_ATTACK_MIN           = 0.01;
  1087.   {$EXTERNALSYM DSFXCOMPRESSOR_ATTACK_MIN}
  1088.   DSFXCOMPRESSOR_ATTACK_MAX           = 500.0;
  1089.   {$EXTERNALSYM DSFXCOMPRESSOR_ATTACK_MAX}
  1090.   DSFXCOMPRESSOR_RELEASE_MIN          = 50.0;
  1091.   {$EXTERNALSYM DSFXCOMPRESSOR_RELEASE_MIN}
  1092.   DSFXCOMPRESSOR_RELEASE_MAX          = 3000.0;
  1093.   {$EXTERNALSYM DSFXCOMPRESSOR_RELEASE_MAX}
  1094.   DSFXCOMPRESSOR_THRESHOLD_MIN        = -60.0;
  1095.   {$EXTERNALSYM DSFXCOMPRESSOR_THRESHOLD_MIN}
  1096.   DSFXCOMPRESSOR_THRESHOLD_MAX        = 0.0;
  1097.   {$EXTERNALSYM DSFXCOMPRESSOR_THRESHOLD_MAX}
  1098.   DSFXCOMPRESSOR_RATIO_MIN            = 1.0;
  1099.   {$EXTERNALSYM DSFXCOMPRESSOR_RATIO_MIN}
  1100.   DSFXCOMPRESSOR_RATIO_MAX            = 100.0;
  1101.   {$EXTERNALSYM DSFXCOMPRESSOR_RATIO_MAX}
  1102.   DSFXCOMPRESSOR_PREDELAY_MIN         = 0.0;
  1103.   {$EXTERNALSYM DSFXCOMPRESSOR_PREDELAY_MIN}
  1104.   DSFXCOMPRESSOR_PREDELAY_MAX         = 4.0;
  1105.   {$EXTERNALSYM DSFXCOMPRESSOR_PREDELAY_MAX}
  1106.  
  1107. type
  1108.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXCompressor);'}
  1109.   {$EXTERNALSYM IDirectSoundFXCompressor}
  1110.   IDirectSoundFXCompressor = interface(IUnknown)
  1111.     ['{4bbd1154-62f6-4e2c-a15c-d3b6c417f7a0}']
  1112.     // IDirectSoundFXCompressor methods
  1113.     function SetAllParameters(const pcDsFxCompressor: TDSFXCompressor): HResult; stdcall;
  1114.     function GetAllParameters(out pDsFxCompressor: TDSFXCompressor): HResult; stdcall;
  1115.   end;
  1116.  
  1117.   IID_IDirectSoundFXCompressor = IDirectSoundFXCompressor;
  1118.   {$EXTERNALSYM IID_IDirectSoundFXCompressor}
  1119.  
  1120.  
  1121.   //
  1122.   // IDirectSoundFXParamEq
  1123.   //
  1124.  
  1125.   PDSFXParamEq = ^TDSFXParamEq;
  1126.   _DSFXParamEq = packed record
  1127.     fCenter: Single;
  1128.     fBandwidth: Single;
  1129.     fGain: Single;
  1130.   end;
  1131.   {$EXTERNALSYM _DSFXParamEq}
  1132.   DSFXParamEq = _DSFXParamEq;
  1133.   {$EXTERNALSYM DSFXParamEq}
  1134.   TDSFXParamEq = _DSFXParamEq;
  1135.  
  1136. const
  1137.   DSFXPARAMEQ_CENTER_MIN      = 80.0;
  1138.   {$EXTERNALSYM DSFXPARAMEQ_CENTER_MIN}
  1139.   DSFXPARAMEQ_CENTER_MAX      = 16000.0;
  1140.   {$EXTERNALSYM DSFXPARAMEQ_CENTER_MAX}
  1141.   DSFXPARAMEQ_BANDWIDTH_MIN   = 1.0;
  1142.   {$EXTERNALSYM DSFXPARAMEQ_BANDWIDTH_MIN}
  1143.   DSFXPARAMEQ_BANDWIDTH_MAX   = 36.0;
  1144.   {$EXTERNALSYM DSFXPARAMEQ_BANDWIDTH_MAX}
  1145.   DSFXPARAMEQ_GAIN_MIN        = -15.0;
  1146.   {$EXTERNALSYM DSFXPARAMEQ_GAIN_MIN}
  1147.   DSFXPARAMEQ_GAIN_MAX        = 15.0;
  1148.   {$EXTERNALSYM DSFXPARAMEQ_GAIN_MAX}
  1149.  
  1150. type
  1151.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXParamEq);'}
  1152.   {$EXTERNALSYM IDirectSoundFXParamEq}
  1153.   IDirectSoundFXParamEq = interface(IUnknown)
  1154.     ['{c03ca9fe-fe90-4204-8078-82334cd177da}']
  1155.     // IDirectSoundFXParamEq methods
  1156.     function SetAllParameters(const pcDsFxParamEq: TDSFXParamEq): HResult; stdcall;
  1157.     function GetAllParameters(out pDsFxParamEq: TDSFXParamEq): HResult; stdcall;
  1158.   end;
  1159.  
  1160.   IID_IDirectSoundFXParamEq = IDirectSoundFXParamEq;
  1161.   {$EXTERNALSYM IID_IDirectSoundFXParamEq}
  1162.  
  1163.  
  1164.   //
  1165.   // IDirectSoundFXI3DL2Reverb
  1166.   //
  1167.  
  1168.   PDSFXI3DL2Reverb = ^TDSFXI3DL2Reverb;
  1169.   _DSFXI3DL2Reverb = packed record
  1170.     lRoom: Longint;                  // [-10000, 0]      default: -1000 mB
  1171.     lRoomHF: Longint;                // [-10000, 0]      default: 0 mB
  1172.     flRoomRolloffFactor: Single;     // [0.0, 10.0]      default: 0.0
  1173.     flDecayTime: Single;             // [0.1, 20.0]      default: 1.49s
  1174.     flDecayHFRatio: Single;          // [0.1, 2.0]       default: 0.83
  1175.     lReflections: Longint;           // [-10000, 1000]   default: -2602 mB
  1176.     flReflectionsDelay: Single;      // [0.0, 0.3]       default: 0.007 s
  1177.     lReverb: Longint;                // [-10000, 2000]   default: 200 mB
  1178.     flReverbDelay: Single;           // [0.0, 0.1]       default: 0.011 s
  1179.     flDiffusion: Single;             // [0.0, 100.0]     default: 100.0 %
  1180.     flDensity: Single;               // [0.0, 100.0]     default: 100.0 %
  1181.     flHFReference: Single;           // [20.0, 20000.0]  default: 5000.0 Hz
  1182.   end;
  1183.   {$EXTERNALSYM _DSFXI3DL2Reverb}
  1184.   DSFXI3DL2Reverb = _DSFXI3DL2Reverb;
  1185.   {$EXTERNALSYM DSFXI3DL2Reverb}
  1186.   TDSFXI3DL2Reverb = _DSFXI3DL2Reverb;
  1187.  
  1188. const
  1189.   DSFX_I3DL2REVERB_ROOM_MIN                   = (-10000);
  1190.   {$EXTERNALSYM DSFX_I3DL2REVERB_ROOM_MIN}
  1191.   DSFX_I3DL2REVERB_ROOM_MAX                   = 0;
  1192.   {$EXTERNALSYM DSFX_I3DL2REVERB_ROOM_MAX}
  1193.   DSFX_I3DL2REVERB_ROOM_DEFAULT               = (-1000);
  1194.   {$EXTERNALSYM DSFX_I3DL2REVERB_ROOM_DEFAULT}
  1195.  
  1196.   DSFX_I3DL2REVERB_ROOMHF_MIN                 = (-10000);
  1197.   {$EXTERNALSYM DSFX_I3DL2REVERB_ROOMHF_MIN}
  1198.   DSFX_I3DL2REVERB_ROOMHF_MAX                 = 0;
  1199.   {$EXTERNALSYM DSFX_I3DL2REVERB_ROOMHF_MAX}
  1200.   DSFX_I3DL2REVERB_ROOMHF_DEFAULT             = (-100);
  1201.   {$EXTERNALSYM DSFX_I3DL2REVERB_ROOMHF_DEFAULT}
  1202.  
  1203.   DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN      = 0.0;
  1204.   {$EXTERNALSYM DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN}
  1205.   DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX      = 10.0;
  1206.   {$EXTERNALSYM DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX}
  1207.   DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT  = 0.0;
  1208.   {$EXTERNALSYM DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT}
  1209.  
  1210.   DSFX_I3DL2REVERB_DECAYTIME_MIN              = 0.1;
  1211.   {$EXTERNALSYM DSFX_I3DL2REVERB_DECAYTIME_MIN}
  1212.   DSFX_I3DL2REVERB_DECAYTIME_MAX              = 20.0;
  1213.   {$EXTERNALSYM DSFX_I3DL2REVERB_DECAYTIME_MAX}
  1214.   DSFX_I3DL2REVERB_DECAYTIME_DEFAULT          = 1.49;
  1215.   {$EXTERNALSYM DSFX_I3DL2REVERB_DECAYTIME_DEFAULT}
  1216.  
  1217.   DSFX_I3DL2REVERB_DECAYHFRATIO_MIN           = 0.1;
  1218.   {$EXTERNALSYM DSFX_I3DL2REVERB_DECAYHFRATIO_MIN}
  1219.   DSFX_I3DL2REVERB_DECAYHFRATIO_MAX           = 2.0;
  1220.   {$EXTERNALSYM DSFX_I3DL2REVERB_DECAYHFRATIO_MAX}
  1221.   DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT       = 0.83;
  1222.   {$EXTERNALSYM DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT}
  1223.  
  1224.   DSFX_I3DL2REVERB_REFLECTIONS_MIN            = (-10000);
  1225.   {$EXTERNALSYM DSFX_I3DL2REVERB_REFLECTIONS_MIN}
  1226.   DSFX_I3DL2REVERB_REFLECTIONS_MAX            = 1000;
  1227.   {$EXTERNALSYM DSFX_I3DL2REVERB_REFLECTIONS_MAX}
  1228.   DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT        = (-2602);
  1229.   {$EXTERNALSYM DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT}
  1230.  
  1231.   DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN       = 0.0;
  1232.   {$EXTERNALSYM DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN}
  1233.   DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX       = 0.3;
  1234.   {$EXTERNALSYM DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX}
  1235.   DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT   = 0.007;
  1236.   {$EXTERNALSYM DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT}
  1237.  
  1238.   DSFX_I3DL2REVERB_REVERB_MIN                 = (-10000);
  1239.   {$EXTERNALSYM DSFX_I3DL2REVERB_REVERB_MIN}
  1240.   DSFX_I3DL2REVERB_REVERB_MAX                 = 2000;
  1241.   {$EXTERNALSYM DSFX_I3DL2REVERB_REVERB_MAX}
  1242.   DSFX_I3DL2REVERB_REVERB_DEFAULT             = (200);
  1243.   {$EXTERNALSYM DSFX_I3DL2REVERB_REVERB_DEFAULT}
  1244.  
  1245.   DSFX_I3DL2REVERB_REVERBDELAY_MIN            = 0.0;
  1246.   {$EXTERNALSYM DSFX_I3DL2REVERB_REVERBDELAY_MIN}
  1247.   DSFX_I3DL2REVERB_REVERBDELAY_MAX            = 0.1;
  1248.   {$EXTERNALSYM DSFX_I3DL2REVERB_REVERBDELAY_MAX}
  1249.   DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT        = 0.011;
  1250.   {$EXTERNALSYM DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT}
  1251.  
  1252.   DSFX_I3DL2REVERB_DIFFUSION_MIN              = 0.0;
  1253.   {$EXTERNALSYM DSFX_I3DL2REVERB_DIFFUSION_MIN}
  1254.   DSFX_I3DL2REVERB_DIFFUSION_MAX              = 100.0;
  1255.   {$EXTERNALSYM DSFX_I3DL2REVERB_DIFFUSION_MAX}
  1256.   DSFX_I3DL2REVERB_DIFFUSION_DEFAULT          = 100.0;
  1257.   {$EXTERNALSYM DSFX_I3DL2REVERB_DIFFUSION_DEFAULT}
  1258.  
  1259.   DSFX_I3DL2REVERB_DENSITY_MIN                = 0.0;
  1260.   {$EXTERNALSYM DSFX_I3DL2REVERB_DENSITY_MIN}
  1261.   DSFX_I3DL2REVERB_DENSITY_MAX                = 100.0;
  1262.   {$EXTERNALSYM DSFX_I3DL2REVERB_DENSITY_MAX}
  1263.   DSFX_I3DL2REVERB_DENSITY_DEFAULT            = 100.0;
  1264.   {$EXTERNALSYM DSFX_I3DL2REVERB_DENSITY_DEFAULT}
  1265.  
  1266.   DSFX_I3DL2REVERB_HFREFERENCE_MIN            = 20.0;
  1267.   {$EXTERNALSYM DSFX_I3DL2REVERB_HFREFERENCE_MIN}
  1268.   DSFX_I3DL2REVERB_HFREFERENCE_MAX            = 20000.0;
  1269.   {$EXTERNALSYM DSFX_I3DL2REVERB_HFREFERENCE_MAX}
  1270.   DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT        = 5000.0;
  1271.   {$EXTERNALSYM DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT}
  1272.  
  1273.   DSFX_I3DL2REVERB_QUALITY_MIN                = 0;
  1274.   {$EXTERNALSYM DSFX_I3DL2REVERB_QUALITY_MIN}
  1275.   DSFX_I3DL2REVERB_QUALITY_MAX                = 3;
  1276.   {$EXTERNALSYM DSFX_I3DL2REVERB_QUALITY_MAX}
  1277.   DSFX_I3DL2REVERB_QUALITY_DEFAULT            = 2;
  1278.   {$EXTERNALSYM DSFX_I3DL2REVERB_QUALITY_DEFAULT}
  1279.  
  1280. type
  1281.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXI3DL2Reverb);'}
  1282.   {$EXTERNALSYM IDirectSoundFXI3DL2Reverb}
  1283.   IDirectSoundFXI3DL2Reverb = interface(IUnknown)
  1284.     ['{4b166a6a-0d66-43f3-80e3-ee6280dee1a4}']
  1285.     // IDirectSoundFXI3DL2Reverb methods
  1286.     function SetAllParameters(const pcDsFxI3DL2Reverb: TDSFXI3DL2Reverb): HResult; stdcall;
  1287.     function GetAllParameters(out pDsFxI3DL2Reverb: TDSFXI3DL2Reverb): HResult; stdcall;
  1288.     function SetPreset(dwPreset: DWORD): HResult; stdcall;
  1289.     function GetPreset(out pdwPreset: DWORD): HResult; stdcall;
  1290.     function SetQuality(lQuality: Longint): HResult; stdcall;
  1291.     function GetQuality(out plQuality: Longint): HResult; stdcall;
  1292.   end;
  1293.  
  1294.   IID_IDirectSoundFXI3DL2Reverb = IDirectSoundFXI3DL2Reverb;
  1295.   {$EXTERNALSYM IID_IDirectSoundFXI3DL2Reverb}
  1296.  
  1297.  
  1298.   //
  1299.   // IDirectSoundFXWavesReverb
  1300.   //
  1301.  
  1302.   PDSFXWavesReverb = ^TDSFXWavesReverb;
  1303.   _DSFXWavesReverb = packed record
  1304.     fInGain: Single;                // [-96.0,0.0]            default: 0.0 dB
  1305.     fReverbMix: Single;             // [-96.0,0.0]            default: 0.0 db
  1306.     fReverbTime: Single;            // [0.001,3000.0]         default: 1000.0 ms
  1307.     fHighFreqRTRatio: Single;       // [0.001,0.999]          default: 0.001
  1308.   end;
  1309.   {$EXTERNALSYM _DSFXWavesReverb}
  1310.   DSFXWavesReverb = _DSFXWavesReverb;
  1311.   {$EXTERNALSYM DSFXWavesReverb}
  1312.   TDSFXWavesReverb = _DSFXWavesReverb;
  1313.  
  1314. const
  1315.   DSFX_WAVESREVERB_INGAIN_MIN                 = -96.0;
  1316.   {$EXTERNALSYM DSFX_WAVESREVERB_INGAIN_MIN}
  1317.   DSFX_WAVESREVERB_INGAIN_MAX                 = 0.0;
  1318.   {$EXTERNALSYM DSFX_WAVESREVERB_INGAIN_MAX}
  1319.   DSFX_WAVESREVERB_INGAIN_DEFAULT             = 0.0;
  1320.   {$EXTERNALSYM DSFX_WAVESREVERB_INGAIN_DEFAULT}
  1321.   DSFX_WAVESREVERB_REVERBMIX_MIN              = -96.0;
  1322.   {$EXTERNALSYM DSFX_WAVESREVERB_REVERBMIX_MIN}
  1323.   DSFX_WAVESREVERB_REVERBMIX_MAX              = 0.0;
  1324.   {$EXTERNALSYM DSFX_WAVESREVERB_REVERBMIX_MAX}
  1325.   DSFX_WAVESREVERB_REVERBMIX_DEFAULT          = 0.0;
  1326.   {$EXTERNALSYM DSFX_WAVESREVERB_REVERBMIX_DEFAULT}
  1327.   DSFX_WAVESREVERB_REVERBTIME_MIN             = 0.001;
  1328.   {$EXTERNALSYM DSFX_WAVESREVERB_REVERBTIME_MIN}
  1329.   DSFX_WAVESREVERB_REVERBTIME_MAX             = 3000.0;
  1330.   {$EXTERNALSYM DSFX_WAVESREVERB_REVERBTIME_MAX}
  1331.   DSFX_WAVESREVERB_REVERBTIME_DEFAULT         = 1000.0;
  1332.   {$EXTERNALSYM DSFX_WAVESREVERB_REVERBTIME_DEFAULT}
  1333.   DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN        = 0.001;
  1334.   {$EXTERNALSYM DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN}
  1335.   DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX        = 0.999;
  1336.   {$EXTERNALSYM DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX}
  1337.   DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT    = 0.001;
  1338.   {$EXTERNALSYM DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT}
  1339.  
  1340. type
  1341.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXWavesReverb);'}
  1342.   {$EXTERNALSYM IDirectSoundFXWavesReverb}
  1343.   IDirectSoundFXWavesReverb = interface(IUnknown)
  1344.     ['{46858c3a-0dc6-45e3-b760-d4eef16cb325}']
  1345.     // IDirectSoundFXWavesReverb methods
  1346.     function SetAllParameters(const pcDsFxWavesReverb: TDSFXWavesReverb): HResult; stdcall;
  1347.     function GetAllParameters(out pDsFxWavesReverb: TDSFXWavesReverb): HResult; stdcall;
  1348.   end;
  1349.  
  1350.   IID_IDirectSoundFXWavesReverb = IDirectSoundFXWavesReverb;
  1351.   {$EXTERNALSYM IID_IDirectSoundFXWavesReverb}
  1352.  
  1353.   
  1354.   //
  1355.   // IDirectSoundCaptureFXAec
  1356.   //
  1357.  
  1358.   PDSCFXAec = ^TDSCFXAec;
  1359.   _DSCFXAec = packed record
  1360.     fEnable: BOOL;
  1361.     fNoiseFill: BOOL;
  1362.     dwMode: DWORD;
  1363.   end;
  1364.   {$EXTERNALSYM _DSCFXAec}
  1365.   DSCFXAec = _DSCFXAec;
  1366.   {$EXTERNALSYM DSCFXAec}
  1367.   TDSCFXAec = _DSCFXAec;
  1368.  
  1369. const
  1370.   // These match the AEC_MODE_* constants in the DDK's ksmedia.h file
  1371.   DSCFX_AEC_MODE_PASS_THROUGH                     = $0;
  1372.   {$EXTERNALSYM DSCFX_AEC_MODE_PASS_THROUGH}
  1373.   DSCFX_AEC_MODE_HALF_DUPLEX                      = $1;
  1374.   {$EXTERNALSYM DSCFX_AEC_MODE_HALF_DUPLEX}
  1375.   DSCFX_AEC_MODE_FULL_DUPLEX                      = $2;
  1376.   {$EXTERNALSYM DSCFX_AEC_MODE_FULL_DUPLEX}
  1377.  
  1378.   // These match the AEC_STATUS_* constants in ksmedia.h
  1379.   DSCFX_AEC_STATUS_HISTORY_UNINITIALIZED          = $0;
  1380.   {$EXTERNALSYM DSCFX_AEC_STATUS_HISTORY_UNINITIALIZED}
  1381.   DSCFX_AEC_STATUS_HISTORY_CONTINUOUSLY_CONVERGED = $1;
  1382.   {$EXTERNALSYM DSCFX_AEC_STATUS_HISTORY_CONTINUOUSLY_CONVERGED}
  1383.   DSCFX_AEC_STATUS_HISTORY_PREVIOUSLY_DIVERGED    = $2;
  1384.   {$EXTERNALSYM DSCFX_AEC_STATUS_HISTORY_PREVIOUSLY_DIVERGED}
  1385.   DSCFX_AEC_STATUS_CURRENTLY_CONVERGED            = $8;
  1386.   {$EXTERNALSYM DSCFX_AEC_STATUS_CURRENTLY_CONVERGED}
  1387.  
  1388. type
  1389.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundCaptureFXAec);'}
  1390.   {$EXTERNALSYM IDirectSoundCaptureFXAec}
  1391.   IDirectSoundCaptureFXAec = interface(IUnknown)
  1392.     ['{ad74143d-903d-4ab7-8066-28d363036d65}']
  1393.     // IDirectSoundCaptureFXAec methods
  1394.     function SetAllParameters(const pDscFxAec: TDSCFXAec): HResult; stdcall;
  1395.     function GetAllParameters(out pDscFxAec: TDSCFXAec): HResult; stdcall;
  1396.     function GetStatus(out pdwStatus: DWORD): HResult; stdcall;
  1397.     function Reset: HResult; stdcall;
  1398.   end;
  1399.  
  1400.   IID_IDirectSoundCaptureFXAec = IDirectSoundCaptureFXAec;
  1401.   {$EXTERNALSYM IID_IDirectSoundCaptureFXAec}
  1402.  
  1403.  
  1404.   //
  1405.   // IDirectSoundCaptureFXNoiseSuppress
  1406.   //
  1407.  
  1408.   PDSCFXNoiseSuppress = ^TDSCFXNoiseSuppress;
  1409.   _DSCFXNoiseSuppress = packed record
  1410.     fEnable:    BOOL;
  1411.   end;
  1412.   {$EXTERNALSYM _DSCFXNoiseSuppress}
  1413.   DSCFXNoiseSuppress = _DSCFXNoiseSuppress;
  1414.   {$EXTERNALSYM DSCFXNoiseSuppress}
  1415.   TDSCFXNoiseSuppress = _DSCFXNoiseSuppress;
  1416.  
  1417.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundCaptureFXNoiseSuppress);'}
  1418.   {$EXTERNALSYM IDirectSoundCaptureFXNoiseSuppress}
  1419.   IDirectSoundCaptureFXNoiseSuppress = interface(IUnknown)
  1420.     ['{ed311e41-fbae-4175-9625-cd0854f693ca}']
  1421.     // IDirectSoundCaptureFXNoiseSuppress methods
  1422.     function SetAllParameters(const pcDscFxNoiseSuppress: TDSCFXNoiseSuppress): HResult; stdcall;
  1423.     function GetAllParameters(out pDscFxNoiseSuppress: TDSCFXNoiseSuppress): HResult; stdcall;
  1424.     function Reset: HResult; stdcall;
  1425.   end;
  1426.  
  1427.   IID_IDirectSoundCaptureFXNoiseSuppress = IDirectSoundCaptureFXNoiseSuppress;
  1428.   {$EXTERNALSYM IID_IDirectSoundCaptureFXNoiseSuppress}
  1429.  
  1430.  
  1431.   //
  1432.   // IDirectSoundFullDuplex
  1433.   //
  1434.  
  1435.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFullDuplex);'}
  1436.   {$EXTERNALSYM IDirectSoundFullDuplex}
  1437.   IDirectSoundFullDuplex = interface(IUnknown)
  1438.     ['{edcb4c7a-daab-4216-a42e-6c50596ddc1d}']
  1439.     // IDirectSoundFullDuplex methods
  1440.     function Initialize(pCaptureGuid, pRenderGuid: PGUID;
  1441.       const lpDscBufferDesc: TDSCBufferDesc; const lpDsBufferDesc: TDSBufferDesc;
  1442.       hWnd: HWND; dwLevel: DWORD;
  1443.       out lplpDirectSoundCaptureBuffer8: IDirectSoundCaptureBuffer8;
  1444.       out lplpDirectSoundBuffer8: IDirectSoundBuffer8): HResult; stdcall;
  1445.   end;
  1446.  
  1447.   IID_IDirectSoundFullDuplex = IDirectSoundFullDuplex;
  1448.   {$EXTERNALSYM IID_IDirectSoundFullDuplex}
  1449.  
  1450.  
  1451. {$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
  1452.  
  1453. //
  1454. // DirectSound 8.0 interfaces.
  1455. //
  1456.  
  1457. {$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
  1458. // IDirectSound8, IDirectSoundBuffer8 and IDirectSoundCaptureBuffer8 are the
  1459. // only DirectSound 7.0 interfaces with changed functionality in version 8.0.
  1460. // The other level 8 interfaces as equivalent to their level 7 counterparts:
  1461. type
  1462.   IDirectSoundCapture8            = IDirectSoundCapture;
  1463.   {$EXTERNALSYM IDirectSoundCapture8}
  1464.   IDirectSound3DListener8         = IDirectSound3DListener;
  1465.   {$EXTERNALSYM IDirectSound3DListener8}
  1466.   IDirectSound3DBuffer8           = IDirectSound3DBuffer;
  1467.   {$EXTERNALSYM IDirectSound3DBuffer8}
  1468.   IDirectSoundNotify8             = IDirectSoundNotify;
  1469.   {$EXTERNALSYM IDirectSoundNotify8}
  1470.   IDirectSoundFXGargle8           = IDirectSoundFXGargle;
  1471.   {$EXTERNALSYM IDirectSoundFXGargle8}
  1472.   IDirectSoundFXChorus8           = IDirectSoundFXChorus;
  1473.   {$EXTERNALSYM IDirectSoundFXChorus8}
  1474.   IDirectSoundFXFlanger8          = IDirectSoundFXFlanger;
  1475.   {$EXTERNALSYM IDirectSoundFXFlanger8}
  1476.   IDirectSoundFXEcho8             = IDirectSoundFXEcho;
  1477.   {$EXTERNALSYM IDirectSoundFXEcho8}
  1478.   IDirectSoundFXDistortion8       = IDirectSoundFXDistortion;
  1479.   {$EXTERNALSYM IDirectSoundFXDistortion8}
  1480.   IDirectSoundFXCompressor8       = IDirectSoundFXCompressor;
  1481.   {$EXTERNALSYM IDirectSoundFXCompressor8}
  1482.   IDirectSoundFXParamEq8          = IDirectSoundFXParamEq;
  1483.   {$EXTERNALSYM IDirectSoundFXParamEq8}
  1484.   IDirectSoundFXWavesReverb8      = IDirectSoundFXWavesReverb;
  1485.   {$EXTERNALSYM IDirectSoundFXWavesReverb8}
  1486.   IDirectSoundFXI3DL2Reverb8      = IDirectSoundFXI3DL2Reverb;
  1487.   {$EXTERNALSYM IDirectSoundFXI3DL2Reverb8}
  1488.   IDirectSoundCaptureFXAec8       = IDirectSoundCaptureFXAec;
  1489.   {$EXTERNALSYM IDirectSoundCaptureFXAec8}
  1490.   IDirectSoundCaptureFXNoiseSuppress8 = IDirectSoundCaptureFXNoiseSuppress;
  1491.   {$EXTERNALSYM IDirectSoundCaptureFXNoiseSuppress8}
  1492.   IDirectSoundFullDuplex8         = IDirectSoundFullDuplex;
  1493.   {$EXTERNALSYM IDirectSoundFullDuplex8}
  1494.  
  1495.   //
  1496.   // IID definitions for the unchanged DirectSound 8.0 interfaces
  1497.   //
  1498.  
  1499.   IID_IDirectSoundCapture8            = IID_IDirectSoundCapture;
  1500.   {$EXTERNALSYM IID_IDirectSoundCapture8}
  1501.   IID_IDirectSound3DListener8         = IID_IDirectSound3DListener;
  1502.   {$EXTERNALSYM IID_IDirectSound3DListener8}
  1503.   IID_IDirectSound3DBuffer8           = IID_IDirectSound3DBuffer;
  1504.   {$EXTERNALSYM IID_IDirectSound3DBuffer8}
  1505.   IID_IDirectSoundNotify8             = IID_IDirectSoundNotify;
  1506.   {$EXTERNALSYM IID_IDirectSoundNotify8}
  1507.   IID_IDirectSoundFXGargle8           = IID_IDirectSoundFXGargle;
  1508.   {$EXTERNALSYM IID_IDirectSoundFXGargle8}
  1509.   IID_IDirectSoundFXChorus8           = IID_IDirectSoundFXChorus;
  1510.   {$EXTERNALSYM IID_IDirectSoundFXChorus8}
  1511.   IID_IDirectSoundFXFlanger8          = IID_IDirectSoundFXFlanger;
  1512.   {$EXTERNALSYM IID_IDirectSoundFXFlanger8}
  1513.   IID_IDirectSoundFXEcho8             = IID_IDirectSoundFXEcho;
  1514.   {$EXTERNALSYM IID_IDirectSoundFXEcho8}
  1515.   IID_IDirectSoundFXDistortion8       = IID_IDirectSoundFXDistortion;
  1516.   {$EXTERNALSYM IID_IDirectSoundFXDistortion8}
  1517.   IID_IDirectSoundFXCompressor8       = IID_IDirectSoundFXCompressor;
  1518.   {$EXTERNALSYM IID_IDirectSoundFXCompressor8}
  1519.   IID_IDirectSoundFXParamEq8          = IID_IDirectSoundFXParamEq;
  1520.   {$EXTERNALSYM IID_IDirectSoundFXParamEq8}
  1521.   IID_IDirectSoundFXWavesReverb8      = IID_IDirectSoundFXWavesReverb;
  1522.   {$EXTERNALSYM IID_IDirectSoundFXWavesReverb8}
  1523.   IID_IDirectSoundFXI3DL2Reverb8      = IID_IDirectSoundFXI3DL2Reverb;
  1524.   {$EXTERNALSYM IID_IDirectSoundFXI3DL2Reverb8}
  1525.   IID_IDirectSoundCaptureFXAec8       = IID_IDirectSoundCaptureFXAec;
  1526.   {$EXTERNALSYM IID_IDirectSoundCaptureFXAec8}
  1527.   IID_IDirectSoundCaptureFXNoiseSuppress8 = IID_IDirectSoundCaptureFXNoiseSuppress;
  1528.   {$EXTERNALSYM IID_IDirectSoundCaptureFXNoiseSuppress8}
  1529.   IID_IDirectSoundFullDuplex8         = IID_IDirectSoundFullDuplex;
  1530.   {$EXTERNALSYM IID_IDirectSoundFullDuplex8}
  1531. {$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
  1532.  
  1533. const
  1534.   //
  1535.   // Return Codes
  1536.   //
  1537.  
  1538.   // The function completed successfully
  1539.   DS_OK                           = S_OK;
  1540.   {$EXTERNALSYM DS_OK}
  1541.  
  1542.   // The call succeeded, but we had to substitute the 3D algorithm
  1543.   DS_NO_VIRTUALIZATION            = (0 shl 31) or (_FACDS shl 16) or 10; // MAKE_HRESULT(0, _FACDS, 10)
  1544.   {$EXTERNALSYM DS_NO_VIRTUALIZATION}
  1545.  
  1546.   // The call failed because resources (such as a priority level)
  1547.   // were already being used by another caller
  1548.   DSERR_ALLOCATED                 = MAKE_DSHRESULT_R or 10; // MAKE_DSHRESULT(10)
  1549.   {$EXTERNALSYM DSERR_ALLOCATED}
  1550.  
  1551.   // The control (vol, pan, etc.) requested by the caller is not available
  1552.   DSERR_CONTROLUNAVAIL            = MAKE_DSHRESULT_R or 30; // MAKE_DSHRESULT(30)
  1553.   {$EXTERNALSYM DSERR_CONTROLUNAVAIL}
  1554.  
  1555.   // An invalid parameter was passed to the returning function
  1556.   DSERR_INVALIDPARAM              = E_INVALIDARG;
  1557.   {$EXTERNALSYM DSERR_INVALIDPARAM}
  1558.  
  1559.   // This call is not valid for the current state of this object
  1560.   DSERR_INVALIDCALL               = MAKE_DSHRESULT_R or 50; // MAKE_DSHRESULT(50)
  1561.   {$EXTERNALSYM DSERR_INVALIDCALL}
  1562.  
  1563.   // An undetermined error occurred inside the DirectSound subsystem
  1564.   DSERR_GENERIC                   = E_FAIL;
  1565.   {$EXTERNALSYM DSERR_GENERIC}
  1566.  
  1567.   // The caller does not have the priority level required for the function to
  1568.   // succeed
  1569.   DSERR_PRIOLEVELNEEDED           = MAKE_DSHRESULT_R or 70; // MAKE_DSHRESULT(70)
  1570.   {$EXTERNALSYM DSERR_PRIOLEVELNEEDED}
  1571.  
  1572.   // Not enough free memory is available to complete the operation
  1573.   DSERR_OUTOFMEMORY               = E_OUTOFMEMORY;
  1574.   {$EXTERNALSYM DSERR_OUTOFMEMORY}
  1575.  
  1576.   // The specified WAVE format is not supported
  1577.   DSERR_BADFORMAT                 = MAKE_DSHRESULT_R or 100; // MAKE_DSHRESULT(100)
  1578.   {$EXTERNALSYM DSERR_BADFORMAT}
  1579.  
  1580.   // The function called is not supported at this time
  1581.   DSERR_UNSUPPORTED               = E_NOTIMPL;
  1582.   {$EXTERNALSYM DSERR_UNSUPPORTED}
  1583.  
  1584.   // No sound driver is available for use
  1585.   DSERR_NODRIVER                  = MAKE_DSHRESULT_R or 120; // MAKE_DSHRESULT(120)
  1586.   {$EXTERNALSYM DSERR_NODRIVER}
  1587.  
  1588.   // This object is already initialized
  1589.   DSERR_ALREADYINITIALIZED        = MAKE_DSHRESULT_R or 130; // MAKE_DSHRESULT(130)
  1590.   {$EXTERNALSYM DSERR_ALREADYINITIALIZED}
  1591.  
  1592.   // This object does not support aggregation
  1593.   DSERR_NOAGGREGATION             = CLASS_E_NOAGGREGATION;
  1594.   {$EXTERNALSYM DSERR_NOAGGREGATION}
  1595.  
  1596.   // The buffer memory has been lost, and must be restored
  1597.   DSERR_BUFFERLOST                = MAKE_DSHRESULT_R or 150; // MAKE_DSHRESULT(150)
  1598.   {$EXTERNALSYM DSERR_BUFFERLOST}
  1599.  
  1600.   // Another app has a higher priority level, preventing this call from
  1601.   // succeeding
  1602.   DSERR_OTHERAPPHASPRIO           = MAKE_DSHRESULT_R or 160; // MAKE_DSHRESULT(160)
  1603.   {$EXTERNALSYM DSERR_OTHERAPPHASPRIO}
  1604.  
  1605.   // This object has not been initialized
  1606.   DSERR_UNINITIALIZED             = MAKE_DSHRESULT_R or 170; // MAKE_DSHRESULT(170)
  1607.   {$EXTERNALSYM DSERR_UNINITIALIZED}
  1608.  
  1609.   // The requested COM interface is not available
  1610.   DSERR_NOINTERFACE               = E_NOINTERFACE;
  1611.   {$EXTERNALSYM DSERR_NOINTERFACE}
  1612.  
  1613.   // Access is denied
  1614.   DSERR_ACCESSDENIED              = E_ACCESSDENIED;
  1615.   {$EXTERNALSYM DSERR_ACCESSDENIED}
  1616.  
  1617.   // Tried to create a DSBCAPS_CTRLFX buffer shorter than DSBSIZE_FX_MIN milliseconds
  1618.   DSERR_BUFFERTOOSMALL            = MAKE_DSHRESULT_R or 180; // MAKE_DSHRESULT(180)
  1619.   {$EXTERNALSYM DSERR_BUFFERTOOSMALL}
  1620.  
  1621.   // Attempt to use DirectSound 8 functionality on an older DirectSound object
  1622.   DSERR_DS8_REQUIRED              = MAKE_DSHRESULT_R or 190; // MAKE_DSHRESULT(190)
  1623.   {$EXTERNALSYM DSERR_DS8_REQUIRED}
  1624.  
  1625.   // A circular loop of send effects was detected
  1626.   DSERR_SENDLOOP                  = MAKE_DSHRESULT_R or 200; // MAKE_DSHRESULT(200)
  1627.   {$EXTERNALSYM DSERR_SENDLOOP}
  1628.  
  1629.   // The GUID specified in an audiopath file does not match a valid MIXIN buffer
  1630.   DSERR_BADSENDBUFFERGUID         = MAKE_DSHRESULT_R or 210; // MAKE_DSHRESULT(210)
  1631.   {$EXTERNALSYM DSERR_BADSENDBUFFERGUID}
  1632.  
  1633.   // The object requested was not found (numerically equal to DMUS_E_NOT_FOUND)
  1634.   DSERR_OBJECTNOTFOUND            = MAKE_DSHRESULT_R or 4449; // MAKE_DSHRESULT(4449)
  1635.   {$EXTERNALSYM DSERR_OBJECTNOTFOUND}
  1636.  
  1637.   // The effects requested could not be found on the system, or they were found
  1638.   // but in the wrong order, or in the wrong hardware/software locations.
  1639.   DSERR_FXUNAVAILABLE             = MAKE_DSHRESULT_R or 220; // MAKE_DSHRESULT(220)
  1640.   {$EXTERNALSYM DSERR_FXUNAVAILABLE}
  1641.  
  1642.   //
  1643.   // Flags
  1644.   //
  1645.  
  1646.   DSCAPS_PRIMARYMONO          = $00000001;
  1647.   {$EXTERNALSYM DSCAPS_PRIMARYMONO}
  1648.   DSCAPS_PRIMARYSTEREO        = $00000002;
  1649.   {$EXTERNALSYM DSCAPS_PRIMARYSTEREO}
  1650.   DSCAPS_PRIMARY8BIT          = $00000004;
  1651.   {$EXTERNALSYM DSCAPS_PRIMARY8BIT}
  1652.   DSCAPS_PRIMARY16BIT         = $00000008;
  1653.   {$EXTERNALSYM DSCAPS_PRIMARY16BIT}
  1654.   DSCAPS_CONTINUOUSRATE       = $00000010;
  1655.   {$EXTERNALSYM DSCAPS_CONTINUOUSRATE}
  1656.   DSCAPS_EMULDRIVER           = $00000020;
  1657.   {$EXTERNALSYM DSCAPS_EMULDRIVER}
  1658.   DSCAPS_CERTIFIED            = $00000040;
  1659.   {$EXTERNALSYM DSCAPS_CERTIFIED}
  1660.   DSCAPS_SECONDARYMONO        = $00000100;
  1661.   {$EXTERNALSYM DSCAPS_SECONDARYMONO}
  1662.   DSCAPS_SECONDARYSTEREO      = $00000200;
  1663.   {$EXTERNALSYM DSCAPS_SECONDARYSTEREO}
  1664.   DSCAPS_SECONDARY8BIT        = $00000400;
  1665.   {$EXTERNALSYM DSCAPS_SECONDARY8BIT}
  1666.   DSCAPS_SECONDARY16BIT       = $00000800;
  1667.   {$EXTERNALSYM DSCAPS_SECONDARY16BIT}
  1668.  
  1669.   DSSCL_NORMAL                = $00000001;
  1670.   {$EXTERNALSYM DSSCL_NORMAL}
  1671.   DSSCL_PRIORITY              = $00000002;
  1672.   {$EXTERNALSYM DSSCL_PRIORITY}
  1673.   DSSCL_EXCLUSIVE             = $00000003;
  1674.   {$EXTERNALSYM DSSCL_EXCLUSIVE}
  1675.   DSSCL_WRITEPRIMARY          = $00000004;
  1676.   {$EXTERNALSYM DSSCL_WRITEPRIMARY}
  1677.  
  1678.   DSSPEAKER_DIRECTOUT         = $00000000;
  1679.   {$EXTERNALSYM DSSPEAKER_DIRECTOUT}
  1680.   DSSPEAKER_HEADPHONE         = $00000001;
  1681.   {$EXTERNALSYM DSSPEAKER_HEADPHONE}
  1682.   DSSPEAKER_MONO              = $00000002;
  1683.   {$EXTERNALSYM DSSPEAKER_MONO}
  1684.   DSSPEAKER_QUAD              = $00000003;
  1685.   {$EXTERNALSYM DSSPEAKER_QUAD}
  1686.   DSSPEAKER_STEREO            = $00000004;
  1687.   {$EXTERNALSYM DSSPEAKER_STEREO}
  1688.   DSSPEAKER_SURROUND          = $00000005;
  1689.   {$EXTERNALSYM DSSPEAKER_SURROUND}
  1690.   DSSPEAKER_5POINT1           = $00000006;
  1691.   {$EXTERNALSYM DSSPEAKER_5POINT1}
  1692.   DSSPEAKER_7POINT1           = $00000007;
  1693.   {$EXTERNALSYM DSSPEAKER_7POINT1}
  1694.  
  1695.   DSSPEAKER_GEOMETRY_MIN      = $00000005;  //   5 degrees
  1696.   {$EXTERNALSYM DSSPEAKER_GEOMETRY_MIN}
  1697.   DSSPEAKER_GEOMETRY_NARROW   = $0000000A;  //  10 degrees
  1698.   {$EXTERNALSYM DSSPEAKER_GEOMETRY_NARROW}
  1699.   DSSPEAKER_GEOMETRY_WIDE     = $00000014;  //  20 degrees
  1700.   {$EXTERNALSYM DSSPEAKER_GEOMETRY_WIDE}
  1701.   DSSPEAKER_GEOMETRY_MAX      = $000000B4;  // 180 degrees
  1702.   {$EXTERNALSYM DSSPEAKER_GEOMETRY_MAX}
  1703.  
  1704. // #define DSSPEAKER_COMBINED(c, g)    ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16))
  1705. function DSSPEAKER_COMBINED(c, g: DWORD): DWORD;
  1706. {$EXTERNALSYM DSSPEAKER_COMBINED}
  1707. // #define DSSPEAKER_CONFIG(a)         ((BYTE)(a))
  1708. function DSSPEAKER_CONFIG(a: Cardinal): Byte;
  1709. {$EXTERNALSYM DSSPEAKER_CONFIG}
  1710. // #define DSSPEAKER_GEOMETRY(a)       ((BYTE)(((DWORD)(a) >> 16) & 0x00FF))
  1711. function DSSPEAKER_GEOMETRY(a: Cardinal): Byte;
  1712. {$EXTERNALSYM DSSPEAKER_GEOMETRY}
  1713.  
  1714. const
  1715.   DSBCAPS_PRIMARYBUFFER       = $00000001;
  1716.   {$EXTERNALSYM DSBCAPS_PRIMARYBUFFER}
  1717.   DSBCAPS_STATIC              = $00000002;
  1718.   {$EXTERNALSYM DSBCAPS_STATIC}
  1719.   DSBCAPS_LOCHARDWARE         = $00000004;
  1720.   {$EXTERNALSYM DSBCAPS_LOCHARDWARE}
  1721.   DSBCAPS_LOCSOFTWARE         = $00000008;
  1722.   {$EXTERNALSYM DSBCAPS_LOCSOFTWARE}
  1723.   DSBCAPS_CTRL3D              = $00000010;
  1724.   {$EXTERNALSYM DSBCAPS_CTRL3D}
  1725.   DSBCAPS_CTRLFREQUENCY       = $00000020;
  1726.   {$EXTERNALSYM DSBCAPS_CTRLFREQUENCY}
  1727.   DSBCAPS_CTRLPAN             = $00000040;
  1728.   {$EXTERNALSYM DSBCAPS_CTRLPAN}
  1729.   DSBCAPS_CTRLVOLUME          = $00000080;
  1730.   {$EXTERNALSYM DSBCAPS_CTRLVOLUME}
  1731.   DSBCAPS_CTRLPOSITIONNOTIFY  = $00000100;
  1732.   {$EXTERNALSYM DSBCAPS_CTRLPOSITIONNOTIFY}
  1733.   DSBCAPS_CTRLFX              = $00000200;
  1734.   {$EXTERNALSYM DSBCAPS_CTRLFX}
  1735.   DSBCAPS_STICKYFOCUS         = $00004000;
  1736.   {$EXTERNALSYM DSBCAPS_STICKYFOCUS}
  1737.   DSBCAPS_GLOBALFOCUS         = $00008000;
  1738.   {$EXTERNALSYM DSBCAPS_GLOBALFOCUS}
  1739.   DSBCAPS_GETCURRENTPOSITION2 = $00010000;
  1740.   {$EXTERNALSYM DSBCAPS_GETCURRENTPOSITION2}
  1741.   DSBCAPS_MUTE3DATMAXDISTANCE = $00020000;
  1742.   {$EXTERNALSYM DSBCAPS_MUTE3DATMAXDISTANCE}
  1743.   DSBCAPS_LOCDEFER            = $00040000;
  1744.   {$EXTERNALSYM DSBCAPS_LOCDEFER}
  1745.  
  1746.   DSBPLAY_LOOPING             = $00000001;
  1747.   {$EXTERNALSYM DSBPLAY_LOOPING}
  1748.   DSBPLAY_LOCHARDWARE         = $00000002;
  1749.   {$EXTERNALSYM DSBPLAY_LOCHARDWARE}
  1750.   DSBPLAY_LOCSOFTWARE         = $00000004;
  1751.   {$EXTERNALSYM DSBPLAY_LOCSOFTWARE}
  1752.   DSBPLAY_TERMINATEBY_TIME    = $00000008;
  1753.   {$EXTERNALSYM DSBPLAY_TERMINATEBY_TIME}
  1754.   DSBPLAY_TERMINATEBY_DISTANCE    = $000000010;
  1755.   {$EXTERNALSYM DSBPLAY_TERMINATEBY_DISTANCE}
  1756.   DSBPLAY_TERMINATEBY_PRIORITY    = $000000020;
  1757.   {$EXTERNALSYM DSBPLAY_TERMINATEBY_PRIORITY}
  1758.  
  1759.   DSBSTATUS_PLAYING           = $00000001;
  1760.   {$EXTERNALSYM DSBSTATUS_PLAYING}
  1761.   DSBSTATUS_BUFFERLOST        = $00000002;
  1762.   {$EXTERNALSYM DSBSTATUS_BUFFERLOST}
  1763.   DSBSTATUS_LOOPING           = $00000004;
  1764.   {$EXTERNALSYM DSBSTATUS_LOOPING}
  1765.   DSBSTATUS_LOCHARDWARE       = $00000008;
  1766.   {$EXTERNALSYM DSBSTATUS_LOCHARDWARE}
  1767.   DSBSTATUS_LOCSOFTWARE       = $00000010;
  1768.   {$EXTERNALSYM DSBSTATUS_LOCSOFTWARE}
  1769.   DSBSTATUS_TERMINATED        = $00000020;
  1770.   {$EXTERNALSYM DSBSTATUS_TERMINATED}
  1771.  
  1772.   DSBLOCK_FROMWRITECURSOR     = $00000001;
  1773.   {$EXTERNALSYM DSBLOCK_FROMWRITECURSOR}
  1774.   DSBLOCK_ENTIREBUFFER        = $00000002;
  1775.   {$EXTERNALSYM DSBLOCK_ENTIREBUFFER}
  1776.  
  1777.   DSBFREQUENCY_ORIGINAL       = 0;
  1778.   {$EXTERNALSYM DSBFREQUENCY_ORIGINAL}
  1779.   DSBFREQUENCY_MIN            = 100;
  1780.   {$EXTERNALSYM DSBFREQUENCY_MIN}
  1781. {$IFDEF DIRECTSOUND_VERSION_9} // #if DIRECTSOUND_VERSION >= 0x0900
  1782.   DSBFREQUENCY_MAX            = 200000;
  1783.   {$EXTERNALSYM DSBFREQUENCY_MAX}
  1784. {$ELSE}
  1785.   DSBFREQUENCY_MAX            = 100000;
  1786.   {$EXTERNALSYM DSBFREQUENCY_MAX}
  1787. {$ENDIF}
  1788.  
  1789.   DSBPAN_LEFT                 = -10000;
  1790.   {$EXTERNALSYM DSBPAN_LEFT}
  1791.   DSBPAN_CENTER               = 0;
  1792.   {$EXTERNALSYM DSBPAN_CENTER}
  1793.   DSBPAN_RIGHT                = 10000;
  1794.   {$EXTERNALSYM DSBPAN_RIGHT}
  1795.  
  1796.   DSBVOLUME_MIN               = -10000;
  1797.   {$EXTERNALSYM DSBVOLUME_MIN}
  1798.   DSBVOLUME_MAX               = 0;
  1799.   {$EXTERNALSYM DSBVOLUME_MAX}
  1800.  
  1801.   DSBSIZE_MIN                 = 4;
  1802.   {$EXTERNALSYM DSBSIZE_MIN}
  1803.   DSBSIZE_MAX                 = $0FFFFFFF;
  1804.   {$EXTERNALSYM DSBSIZE_MAX}
  1805.   DSBSIZE_FX_MIN              = 150;  // NOTE: Milliseconds, not bytes
  1806.   {$EXTERNALSYM DSBSIZE_FX_MIN}
  1807.  
  1808.   DS3DMODE_NORMAL             = $00000000;
  1809.   {$EXTERNALSYM DS3DMODE_NORMAL}
  1810.   DS3DMODE_HEADRELATIVE       = $00000001;
  1811.   {$EXTERNALSYM DS3DMODE_HEADRELATIVE}
  1812.   DS3DMODE_DISABLE            = $00000002;
  1813.   {$EXTERNALSYM DS3DMODE_DISABLE}
  1814.  
  1815.   DS3D_IMMEDIATE              = $00000000;
  1816.   {$EXTERNALSYM DS3D_IMMEDIATE}
  1817.   DS3D_DEFERRED               = $00000001;
  1818.   {$EXTERNALSYM DS3D_DEFERRED}
  1819. var
  1820.   // Forced to define as 'var' cos pascal compiler treats all consts as Double
  1821.   DS3D_MINDISTANCEFACTOR: Single = 1.175494351e-38; // FLT_MIN;
  1822.   {$EXTERNALSYM DS3D_MINDISTANCEFACTOR}
  1823.   DS3D_MAXDISTANCEFACTOR: Single = 3.402823466e+38; // FLT_MAX;
  1824.   {$EXTERNALSYM DS3D_MAXDISTANCEFACTOR}
  1825. const
  1826.   DS3D_DEFAULTDISTANCEFACTOR  = 1.0;
  1827.   {$EXTERNALSYM DS3D_DEFAULTDISTANCEFACTOR}
  1828.  
  1829.   DS3D_MINROLLOFFFACTOR       = 0.0;
  1830.   {$EXTERNALSYM DS3D_MINROLLOFFFACTOR}
  1831.   DS3D_MAXROLLOFFFACTOR       = 10.0;
  1832.   {$EXTERNALSYM DS3D_MAXROLLOFFFACTOR}
  1833.   DS3D_DEFAULTROLLOFFFACTOR   = 1.0;
  1834.   {$EXTERNALSYM DS3D_DEFAULTROLLOFFFACTOR}
  1835.  
  1836.   DS3D_MINDOPPLERFACTOR       = 0.0;
  1837.   {$EXTERNALSYM DS3D_MINDOPPLERFACTOR}
  1838.   DS3D_MAXDOPPLERFACTOR       = 10.0;
  1839.   {$EXTERNALSYM DS3D_MAXDOPPLERFACTOR}
  1840.   DS3D_DEFAULTDOPPLERFACTOR   = 1.0;
  1841.   {$EXTERNALSYM DS3D_DEFAULTDOPPLERFACTOR}
  1842.  
  1843.   DS3D_DEFAULTMINDISTANCE     = 1.0;
  1844.   {$EXTERNALSYM DS3D_DEFAULTMINDISTANCE}
  1845.   DS3D_DEFAULTMAXDISTANCE     = 1000000000.0;
  1846.   {$EXTERNALSYM DS3D_DEFAULTMAXDISTANCE}
  1847.  
  1848.   DS3D_MINCONEANGLE           = 0;
  1849.   {$EXTERNALSYM DS3D_MINCONEANGLE}
  1850.   DS3D_MAXCONEANGLE           = 360;
  1851.   {$EXTERNALSYM DS3D_MAXCONEANGLE}
  1852.   DS3D_DEFAULTCONEANGLE       = 360;
  1853.   {$EXTERNALSYM DS3D_DEFAULTCONEANGLE}
  1854.  
  1855.   DS3D_DEFAULTCONEOUTSIDEVOLUME = DSBVOLUME_MAX;
  1856.   {$EXTERNALSYM DS3D_DEFAULTCONEOUTSIDEVOLUME}
  1857.  
  1858.   // IDirectSoundCapture attributes
  1859.  
  1860.   DSCCAPS_EMULDRIVER          = DSCAPS_EMULDRIVER;
  1861.   {$EXTERNALSYM DSCCAPS_EMULDRIVER}
  1862.   DSCCAPS_CERTIFIED           = DSCAPS_CERTIFIED;
  1863.   {$EXTERNALSYM DSCCAPS_CERTIFIED}
  1864.   DSCCAPS_MULTIPLECAPTURE     = $00000001;
  1865.   {$EXTERNALSYM DSCCAPS_MULTIPLECAPTURE}
  1866.  
  1867.   // IDirectSoundCaptureBuffer attributes
  1868.  
  1869.   DSCBCAPS_WAVEMAPPED         = $80000000;
  1870.   {$EXTERNALSYM DSCBCAPS_WAVEMAPPED}
  1871.  
  1872. {$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
  1873.   DSCBCAPS_CTRLFX             = $00000200;
  1874.   {$EXTERNALSYM DSCBCAPS_CTRLFX}
  1875. {$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
  1876.  
  1877.  
  1878.   DSCBLOCK_ENTIREBUFFER       = $00000001;
  1879.   {$EXTERNALSYM DSCBLOCK_ENTIREBUFFER}
  1880.  
  1881.   DSCBSTATUS_CAPTURING        = $00000001;
  1882.   {$EXTERNALSYM DSCBSTATUS_CAPTURING}
  1883.   DSCBSTATUS_LOOPING          = $00000002;
  1884.   {$EXTERNALSYM DSCBSTATUS_LOOPING}
  1885.  
  1886.   DSCBSTART_LOOPING           = $00000001;
  1887.   {$EXTERNALSYM DSCBSTART_LOOPING}
  1888.  
  1889.   DSBPN_OFFSETSTOP            = $FFFFFFFF;
  1890.   {$EXTERNALSYM DSBPN_OFFSETSTOP}
  1891.  
  1892.   DS_CERTIFIED                = $00000000;
  1893.   {$EXTERNALSYM DS_CERTIFIED}
  1894.   DS_UNCERTIFIED              = $00000001;
  1895.   {$EXTERNALSYM DS_UNCERTIFIED}
  1896.  
  1897.  
  1898.   //
  1899.   // Flags for the I3DL2 effects
  1900.   //
  1901.  
  1902.   //
  1903.   // I3DL2 Material Presets
  1904.   //
  1905.  
  1906.   DSFX_I3DL2_MATERIAL_PRESET_SINGLEWINDOW = 0;
  1907.   {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_SINGLEWINDOW}
  1908.   DSFX_I3DL2_MATERIAL_PRESET_DOUBLEWINDOW = 1;
  1909.   {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_DOUBLEWINDOW}
  1910.   DSFX_I3DL2_MATERIAL_PRESET_THINDOOR     = 2;
  1911.   {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_THINDOOR}
  1912.   DSFX_I3DL2_MATERIAL_PRESET_THICKDOOR    = 3;
  1913.   {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_THICKDOOR}
  1914.   DSFX_I3DL2_MATERIAL_PRESET_WOODWALL     = 4;
  1915.   {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_WOODWALL}
  1916.   DSFX_I3DL2_MATERIAL_PRESET_BRICKWALL    = 5;
  1917.   {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_BRICKWALL}
  1918.   DSFX_I3DL2_MATERIAL_PRESET_STONEWALL    = 6;
  1919.   {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_STONEWALL}
  1920.   DSFX_I3DL2_MATERIAL_PRESET_CURTAIN      = 7;
  1921.   {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_CURTAIN}
  1922.  
  1923. //Translator: have not found where these defines are used
  1924. {
  1925. #define I3DL2_MATERIAL_PRESET_SINGLEWINDOW    -2800,0.71f
  1926. #define I3DL2_MATERIAL_PRESET_DOUBLEWINDOW    -5000,0.40f
  1927. #define I3DL2_MATERIAL_PRESET_THINDOOR        -1800,0.66f
  1928. #define I3DL2_MATERIAL_PRESET_THICKDOOR       -4400,0.64f
  1929. #define I3DL2_MATERIAL_PRESET_WOODWALL        -4000,0.50f
  1930. #define I3DL2_MATERIAL_PRESET_BRICKWALL       -5000,0.60f
  1931. #define I3DL2_MATERIAL_PRESET_STONEWALL       -6000,0.68f
  1932. #define I3DL2_MATERIAL_PRESET_CURTAIN         -1200,0.15f
  1933. }
  1934.  
  1935.   DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT         = 0;
  1936.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT}
  1937.   DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC         = 1;
  1938.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC}
  1939.   DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL      = 2;
  1940.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL}
  1941.   DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM            = 3;
  1942.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM}
  1943.   DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM        = 4;
  1944.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM}
  1945.   DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM      = 5;
  1946.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM}
  1947.   DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM       = 6;
  1948.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM}
  1949.   DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM      = 7;
  1950.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM}
  1951.   DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL     = 8;
  1952.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL}
  1953.   DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE            = 9;
  1954.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE}
  1955.   DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA           = 10;
  1956.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA}
  1957.   DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR          = 11;
  1958.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR}
  1959.   DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY = 12;
  1960.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY}
  1961.   DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY         = 13;
  1962.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY}
  1963.   DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR   = 14;
  1964.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR}
  1965.   DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY           = 15;
  1966.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY}
  1967.   DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST          = 16;
  1968.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST}
  1969.   DSFX_I3DL2_ENVIRONMENT_PRESET_CITY            = 17;
  1970.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_CITY}
  1971.   DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS       = 18;
  1972.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS}
  1973.   DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY          = 19;
  1974.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY}
  1975.   DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN           = 20;
  1976.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN}
  1977.   DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT      = 21;
  1978.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT}
  1979.   DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE       = 22;
  1980.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE}
  1981.   DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER      = 23;
  1982.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER}
  1983.   DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM       = 24;
  1984.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM}
  1985.   DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM      = 25;
  1986.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM}
  1987.   DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM       = 26;
  1988.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM}
  1989.   DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL      = 27;
  1990.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL}
  1991.   DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL       = 28;
  1992.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL}
  1993.   DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE           = 29;
  1994.   {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE}
  1995.  
  1996.   //
  1997.   // I3DL2 Reverberation Presets Values
  1998.   //
  1999.  
  2000.   I3DL2_ENVIRONMENT_PRESET_DEFAULT         : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -100; flRoomRolloffFactor: 0.0; flDecayTime: 1.49; flDecayHFRatio: 0.83; lReflections: -2602; flReflectionsDelay: 0.007; lReverb:   200; flReverbDelay: 0.011; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2001.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_DEFAULT}
  2002.   I3DL2_ENVIRONMENT_PRESET_GENERIC         : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -100; flRoomRolloffFactor: 0.0; flDecayTime: 1.49; flDecayHFRatio: 0.83; lReflections: -2602; flReflectionsDelay: 0.007; lReverb:   200; flReverbDelay: 0.011; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2003.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_GENERIC}
  2004.   I3DL2_ENVIRONMENT_PRESET_PADDEDCELL      : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF: -6000; flRoomRolloffFactor: 0.0; flDecayTime: 0.17; flDecayHFRatio: 0.10; lReflections: -1204; flReflectionsDelay: 0.001; lReverb:   207; flReverbDelay: 0.002; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2005.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_PADDEDCELL}
  2006.   I3DL2_ENVIRONMENT_PRESET_ROOM            : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -454; flRoomRolloffFactor: 0.0; flDecayTime: 0.40; flDecayHFRatio: 0.83; lReflections: -1646; flReflectionsDelay: 0.002; lReverb:    53; flReverbDelay: 0.003; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2007.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_ROOM}
  2008.   I3DL2_ENVIRONMENT_PRESET_BATHROOM        : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF: -1200; flRoomRolloffFactor: 0.0; flDecayTime: 1.49; flDecayHFRatio: 0.54; lReflections:  -370; flReflectionsDelay: 0.007; lReverb:  1030; flReverbDelay: 0.011; flDiffusion: 100.0; flDensity:  60.0; flHFReference: 5000.0);
  2009.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_BATHROOM}
  2010.   I3DL2_ENVIRONMENT_PRESET_LIVINGROOM      : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF: -6000; flRoomRolloffFactor: 0.0; flDecayTime: 0.50; flDecayHFRatio: 0.10; lReflections: -1376; flReflectionsDelay: 0.003; lReverb: -1104; flReverbDelay: 0.004; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2011.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_LIVINGROOM}
  2012.   I3DL2_ENVIRONMENT_PRESET_STONEROOM       : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -300; flRoomRolloffFactor: 0.0; flDecayTime: 2.31; flDecayHFRatio: 0.64; lReflections:  -711; flReflectionsDelay: 0.012; lReverb:    83; flReverbDelay: 0.017; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2013.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_STONEROOM}
  2014.   I3DL2_ENVIRONMENT_PRESET_AUDITORIUM      : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -476; flRoomRolloffFactor: 0.0; flDecayTime: 4.32; flDecayHFRatio: 0.59; lReflections:  -789; flReflectionsDelay: 0.020; lReverb:  -289; flReverbDelay: 0.030; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2015.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_AUDITORIUM}
  2016.   I3DL2_ENVIRONMENT_PRESET_CONCERTHALL     : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -500; flRoomRolloffFactor: 0.0; flDecayTime: 3.92; flDecayHFRatio: 0.70; lReflections: -1230; flReflectionsDelay: 0.020; lReverb:    -2; flReverbDelay: 0.029; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2017.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_CONCERTHALL}
  2018.   I3DL2_ENVIRONMENT_PRESET_CAVE            : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:     0; flRoomRolloffFactor: 0.0; flDecayTime: 2.91; flDecayHFRatio: 1.30; lReflections:  -602; flReflectionsDelay: 0.015; lReverb:  -302; flReverbDelay: 0.022; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2019.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_CAVE}
  2020.   I3DL2_ENVIRONMENT_PRESET_ARENA           : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -698; flRoomRolloffFactor: 0.0; flDecayTime: 7.24; flDecayHFRatio: 0.33; lReflections: -1166; flReflectionsDelay: 0.020; lReverb:    16; flReverbDelay: 0.030; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2021.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_ARENA}
  2022.   I3DL2_ENVIRONMENT_PRESET_HANGAR          : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF: -1000; flRoomRolloffFactor: 0.0; flDecayTime:10.05; flDecayHFRatio: 0.23; lReflections:  -602; flReflectionsDelay: 0.020; lReverb:   198; flReverbDelay: 0.030; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2023.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_HANGAR}
  2024.   I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF: -4000; flRoomRolloffFactor: 0.0; flDecayTime: 0.30; flDecayHFRatio: 0.10; lReflections: -1831; flReflectionsDelay: 0.002; lReverb: -1630; flReverbDelay: 0.030; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2025.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY}
  2026.   I3DL2_ENVIRONMENT_PRESET_HALLWAY         : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -300; flRoomRolloffFactor: 0.0; flDecayTime: 1.49; flDecayHFRatio: 0.59; lReflections: -1219; flReflectionsDelay: 0.007; lReverb:   441; flReverbDelay: 0.011; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2027.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_HALLWAY}
  2028.   I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR   : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -237; flRoomRolloffFactor: 0.0; flDecayTime: 2.70; flDecayHFRatio: 0.79; lReflections: -1214; flReflectionsDelay: 0.013; lReverb:   395; flReverbDelay: 0.020; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2029.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR}
  2030.   I3DL2_ENVIRONMENT_PRESET_ALLEY           : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -270; flRoomRolloffFactor: 0.0; flDecayTime: 1.49; flDecayHFRatio: 0.86; lReflections: -1204; flReflectionsDelay: 0.007; lReverb:    -4; flReverbDelay: 0.011; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2031.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_ALLEY}
  2032.   I3DL2_ENVIRONMENT_PRESET_FOREST          : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF: -3300; flRoomRolloffFactor: 0.0; flDecayTime: 1.49; flDecayHFRatio: 0.54; lReflections: -2560; flReflectionsDelay: 0.162; lReverb:  -613; flReverbDelay: 0.088; flDiffusion:  79.0; flDensity: 100.0; flHFReference: 5000.0);
  2033.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_FOREST}
  2034.   I3DL2_ENVIRONMENT_PRESET_CITY            : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -800; flRoomRolloffFactor: 0.0; flDecayTime: 1.49; flDecayHFRatio: 0.67; lReflections: -2273; flReflectionsDelay: 0.007; lReverb: -2217; flReverbDelay: 0.011; flDiffusion:  50.0; flDensity: 100.0; flHFReference: 5000.0);
  2035.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_CITY}
  2036.   I3DL2_ENVIRONMENT_PRESET_MOUNTAINS       : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF: -2500; flRoomRolloffFactor: 0.0; flDecayTime: 1.49; flDecayHFRatio: 0.21; lReflections: -2780; flReflectionsDelay: 0.300; lReverb: -2014; flReverbDelay: 0.100; flDiffusion:  27.0; flDensity: 100.0; flHFReference: 5000.0);
  2037.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_MOUNTAINS}
  2038.   I3DL2_ENVIRONMENT_PRESET_QUARRY          : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF: -1000; flRoomRolloffFactor: 0.0; flDecayTime: 1.49; flDecayHFRatio: 0.83; lReflections:-10000; flReflectionsDelay: 0.061; lReverb:   500; flReverbDelay: 0.025; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2039.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_QUARRY}
  2040.   I3DL2_ENVIRONMENT_PRESET_PLAIN           : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF: -2000; flRoomRolloffFactor: 0.0; flDecayTime: 1.49; flDecayHFRatio: 0.50; lReflections: -2466; flReflectionsDelay: 0.179; lReverb: -2514; flReverbDelay: 0.100; flDiffusion:  21.0; flDensity: 100.0; flHFReference: 5000.0);
  2041.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_PLAIN}
  2042.   I3DL2_ENVIRONMENT_PRESET_PARKINGLOT      : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:     0; flRoomRolloffFactor: 0.0; flDecayTime: 1.65; flDecayHFRatio: 1.50; lReflections: -1363; flReflectionsDelay: 0.008; lReverb: -1153; flReverbDelay: 0.012; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2043.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_PARKINGLOT}
  2044.   I3DL2_ENVIRONMENT_PRESET_SEWERPIPE       : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF: -1000; flRoomRolloffFactor: 0.0; flDecayTime: 2.81; flDecayHFRatio: 0.14; lReflections:   429; flReflectionsDelay: 0.014; lReverb:   648; flReverbDelay: 0.021; flDiffusion:  80.0; flDensity:  60.0; flHFReference: 5000.0);
  2045.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_SEWERPIPE}
  2046.   I3DL2_ENVIRONMENT_PRESET_UNDERWATER      : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF: -4000; flRoomRolloffFactor: 0.0; flDecayTime: 1.49; flDecayHFRatio: 0.10; lReflections:  -449; flReflectionsDelay: 0.007; lReverb:  1700; flReverbDelay: 0.011; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2047.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_UNDERWATER}
  2048.  
  2049.   //
  2050.   // Examples simulating 'musical' reverb presets
  2051.   //
  2052.   // Name       Decay time   Description
  2053.   // Small Room    1.1s      A small size room with a length of 5m or so.
  2054.   // Medium Room   1.3s      A medium size room with a length of 10m or so.
  2055.   // Large Room    1.5s      A large size room suitable for live performances.
  2056.   // Medium Hall   1.8s      A medium size concert hall.
  2057.   // Large Hall    1.8s      A large size concert hall suitable for a full orchestra.
  2058.   // Plate         1.3s      A plate reverb simulation.
  2059.   //
  2060.  
  2061.   I3DL2_ENVIRONMENT_PRESET_SMALLROOM       : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -600; flRoomRolloffFactor: 0.0; flDecayTime: 1.10; flDecayHFRatio: 0.83; lReflections:  -400; flReflectionsDelay: 0.005; lReverb:   500; flReverbDelay: 0.010; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2062.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_SMALLROOM}
  2063.   I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM      : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -600; flRoomRolloffFactor: 0.0; flDecayTime: 1.30; flDecayHFRatio: 0.83; lReflections: -1000; flReflectionsDelay: 0.010; lReverb:  -200; flReverbDelay: 0.020; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2064.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM}
  2065.   I3DL2_ENVIRONMENT_PRESET_LARGEROOM       : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -600; flRoomRolloffFactor: 0.0; flDecayTime: 1.50; flDecayHFRatio: 0.83; lReflections: -1600; flReflectionsDelay: 0.020; lReverb: -1000; flReverbDelay: 0.040; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2066.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_LARGEROOM}
  2067.   I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL      : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -600; flRoomRolloffFactor: 0.0; flDecayTime: 1.80; flDecayHFRatio: 0.70; lReflections: -1300; flReflectionsDelay: 0.015; lReverb:  -800; flReverbDelay: 0.030; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2068.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL}
  2069.   I3DL2_ENVIRONMENT_PRESET_LARGEHALL       : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -600; flRoomRolloffFactor: 0.0; flDecayTime: 1.80; flDecayHFRatio: 0.70; lReflections: -2000; flReflectionsDelay: 0.030; lReverb: -1400; flReverbDelay: 0.060; flDiffusion: 100.0; flDensity: 100.0; flHFReference: 5000.0);
  2070.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_LARGEHALL}
  2071.   I3DL2_ENVIRONMENT_PRESET_PLATE           : TDSFXI3DL2Reverb = (lRoom: -1000; lRoomHF:  -200; flRoomRolloffFactor: 0.0; flDecayTime: 1.30; flDecayHFRatio: 0.90; lReflections:     0; flReflectionsDelay: 0.002; lReverb:     0; flReverbDelay: 0.010; flDiffusion: 100.0; flDensity:  75.0; flHFReference: 5000.0);
  2072.   {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_PLATE}
  2073.  
  2074.   //
  2075.   // DirectSound3D Algorithms
  2076.   //
  2077.  
  2078.   // Default DirectSound3D algorithm {00000000-0000-0000-0000-000000000000}
  2079.   DS3DALG_DEFAULT : TGUID = '{00000000-0000-0000-0000-000000000000}'; // GUID_NULL;
  2080.   {$EXTERNALSYM DS3DALG_DEFAULT}
  2081.  
  2082.   // No virtualization (Pan3D) {C241333F-1C1B-11d2-94F5-00C04FC28ACA}
  2083.   DS3DALG_NO_VIRTUALIZATION: TGUID = '{c241333f-1c1b-11d2-94f5-00c04fc28aca}';
  2084.   {$EXTERNALSYM DS3DALG_NO_VIRTUALIZATION}
  2085.  
  2086.   // High-quality HRTF algorithm {C2413340-1C1B-11d2-94F5-00C04FC28ACA}
  2087.   DS3DALG_HRTF_FULL: TGUID = '{c2413340-1c1b-11d2-94f5-00c04fc28aca}';
  2088.   {$EXTERNALSYM DS3DALG_HRTF_FULL}
  2089.  
  2090.   // Lower-quality HRTF algorithm {C2413342-1C1B-11d2-94F5-00C04FC28ACA}
  2091.   DS3DALG_HRTF_LIGHT: TGUID = '{c2413342-1c1b-11d2-94f5-00c04fc28aca}';
  2092.   {$EXTERNALSYM DS3DALG_HRTF_LIGHT}
  2093.  
  2094.  
  2095. {$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
  2096.  
  2097.   //
  2098.   // DirectSound Internal Effect Algorithms
  2099.   //
  2100.  
  2101.  
  2102.   // Gargle {DAFD8210-5711-4B91-9FE3-F75B7AE279BF}
  2103.   GUID_DSFX_STANDARD_GARGLE: TGUID = '{dafd8210-5711-4b91-9fe3-f75b7ae279bf}';
  2104.   {$EXTERNALSYM GUID_DSFX_STANDARD_GARGLE}
  2105.  
  2106.   // Chorus {EFE6629C-81F7-4281-BD91-C9D604A95AF6}
  2107.   GUID_DSFX_STANDARD_CHORUS: TGUID = '{efe6629c-81f7-4281-bd91-c9d604a95af6}';
  2108.   {$EXTERNALSYM GUID_DSFX_STANDARD_CHORUS}
  2109.  
  2110.   // Flanger {EFCA3D92-DFD8-4672-A603-7420894BAD98}
  2111.   GUID_DSFX_STANDARD_FLANGER: TGUID = '{efca3d92-dfd8-4672-a603-7420894bad98}';
  2112.   {$EXTERNALSYM GUID_DSFX_STANDARD_FLANGER}
  2113.  
  2114.   // Echo/Delay {EF3E932C-D40B-4F51-8CCF-3F98F1B29D5D}
  2115.   GUID_DSFX_STANDARD_ECHO: TGUID = '{ef3e932c-d40b-4f51-8ccf-3f98f1b29d5d}';
  2116.   {$EXTERNALSYM GUID_DSFX_STANDARD_ECHO}
  2117.  
  2118.   // Distortion {EF114C90-CD1D-484E-96E5-09CFAF912A21}
  2119.   GUID_DSFX_STANDARD_DISTORTION: TGUID = '{ef114c90-cd1d-484e-96e5-09cfaf912a21}';
  2120.   {$EXTERNALSYM GUID_DSFX_STANDARD_DISTORTION}
  2121.  
  2122.   // Compressor/Limiter {EF011F79-4000-406D-87AF-BFFB3FC39D57}
  2123.   GUID_DSFX_STANDARD_COMPRESSOR: TGUID = '{ef011f79-4000-406d-87af-bffb3fc39d57}';
  2124.   {$EXTERNALSYM GUID_DSFX_STANDARD_COMPRESSOR}
  2125.  
  2126.   // Parametric Equalization {120CED89-3BF4-4173-A132-3CB406CF3231}
  2127.   GUID_DSFX_STANDARD_PARAMEQ: TGUID = '{120ced89-3bf4-4173-a132-3cb406cf3231}';
  2128.   {$EXTERNALSYM GUID_DSFX_STANDARD_PARAMEQ}
  2129.  
  2130.   // I3DL2 Environmental Reverberation: Reverb (Listener) Effect {EF985E71-D5C7-42D4-BA4D-2D073E2E96F4}
  2131.   GUID_DSFX_STANDARD_I3DL2REVERB: TGUID = '{ef985e71-d5c7-42d4-ba4d-2d073e2e96f4}';
  2132.   {$EXTERNALSYM GUID_DSFX_STANDARD_I3DL2REVERB}
  2133.  
  2134.   // Waves Reverberation {87FC0268-9A55-4360-95AA-004A1D9DE26C}
  2135.   GUID_DSFX_WAVES_REVERB: TGUID = '{87fc0268-9a55-4360-95aa-004a1d9de26c}';
  2136.   {$EXTERNALSYM GUID_DSFX_WAVES_REVERB}
  2137.  
  2138.   //
  2139.   // DirectSound Capture Effect Algorithms
  2140.   //
  2141.  
  2142.  
  2143.   // Acoustic Echo Canceller {BF963D80-C559-11D0-8A2B-00A0C9255AC1}
  2144.   // Matches KSNODETYPE_ACOUSTIC_ECHO_CANCEL in ksmedia.h
  2145.   GUID_DSCFX_CLASS_AEC: TGUID = '{BF963D80-C559-11D0-8A2B-00A0C9255AC1}';
  2146.   {$EXTERNALSYM GUID_DSCFX_CLASS_AEC}
  2147.  
  2148.   // Microsoft AEC {CDEBB919-379A-488a-8765-F53CFD36DE40}
  2149.   GUID_DSCFX_MS_AEC: TGUID = '{cdebb919-379a-488a-8765-f53cfd36de40}';
  2150.   {$EXTERNALSYM GUID_DSCFX_MS_AEC}
  2151.  
  2152.   // System AEC {1C22C56D-9879-4f5b-A389-27996DDC2810}
  2153.   GUID_DSCFX_SYSTEM_AEC: TGUID = '{1c22c56d-9879-4f5b-a389-27996ddc2810}';
  2154.   {$EXTERNALSYM GUID_DSCFX_SYSTEM_AEC}
  2155.  
  2156.   // Noise Supression {E07F903F-62FD-4e60-8CDD-DEA7236665B5}
  2157.   // Matches KSNODETYPE_NOISE_SUPPRESS in post Windows ME DDK's ksmedia.h
  2158.   GUID_DSCFX_CLASS_NS: TGUID = '{e07f903f-62fd-4e60-8cdd-dea7236665b5}';
  2159.   {$EXTERNALSYM GUID_DSCFX_CLASS_NS}
  2160.  
  2161.   // Microsoft Noise Suppresion {11C5C73B-66E9-4ba1-A0BA-E814C6EED92D}
  2162.   GUID_DSCFX_MS_NS: TGUID = '{11c5c73b-66e9-4ba1-a0ba-e814c6eed92d}';
  2163.   {$EXTERNALSYM GUID_DSCFX_MS_NS}
  2164.  
  2165.   // System Noise Suppresion {5AB0882E-7274-4516-877D-4EEE99BA4FD0}
  2166.   GUID_DSCFX_SYSTEM_NS: TGUID = '{5ab0882e-7274-4516-877d-4eee99ba4fd0}';
  2167.   {$EXTERNALSYM GUID_DSCFX_SYSTEM_NS}
  2168.  
  2169. {$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
  2170.  
  2171.  
  2172.  
  2173. //
  2174. // DirectSound API
  2175. //
  2176.  
  2177. type
  2178.   TDSEnumCallbackA = function(lpGuid: PGUID; lpcstrDescription, lpcstrModule: PAnsiChar;
  2179.     lpContext: Pointer): BOOL; stdcall;
  2180.   {$NODEFINE TDSEnumCallbackA}
  2181.   TDSEnumCallbackW = function(lpGuid: PGUID; lpcstrDescription, lpcstrModule: PWideChar;
  2182.     lpContext: Pointer): BOOL; stdcall;
  2183.   {$NODEFINE TDSEnumCallbackW}
  2184. {$IFDEF UNICODE}
  2185.   TDSEnumCallback = TDSEnumCallbackW;
  2186. {$ELSE}
  2187.   TDSEnumCallback = TDSEnumCallbackA;
  2188. {$ENDIF}
  2189.   {$NODEFINE TDSEnumCallback}
  2190.   {$HPPEMIT 'typedef LPDSENUMCALLBACKA TDSEnumCallbackA;'}
  2191.   {$HPPEMIT 'typedef LPDSENUMCALLBACKW TDSEnumCallbackW;'}
  2192.   {$HPPEMIT 'typedef LPDSENUMCALLBACK TDSEnumCallback;'}
  2193.  
  2194. const
  2195.   DirectSoundDll = 'dsound.dll';
  2196.  
  2197. function DirectSoundLoaded: Boolean;
  2198. function UnLoadDirectSound: Boolean;
  2199. function LoadDirectSound: Boolean;
  2200.  
  2201. {$IFDEF DIRECTSOUND_DYNAMIC_LINK}
  2202. var
  2203.   DirectSoundCreate: function(lpGuid: PGUID; out ppDS: IDirectSound; pUnkOuter: IUnknown): HResult; stdcall;
  2204.   {$EXTERNALSYM DirectSoundCreate}
  2205.   DirectSoundEnumerateW: function(lpDSEnumCallback: TDSEnumCallbackW; lpContext: Pointer): HResult; stdcall;
  2206.   {$EXTERNALSYM DirectSoundEnumerateW}
  2207.   DirectSoundEnumerateA: function(lpDSEnumCallback: TDSEnumCallbackA; lpContext: Pointer): HResult; stdcall;
  2208.   {$EXTERNALSYM DirectSoundEnumerateA}
  2209.   DirectSoundEnumerate: function(lpDSEnumCallback: TDSEnumCallback; lpContext: Pointer): HResult; stdcall;
  2210.   {$EXTERNALSYM DirectSoundEnumerate}
  2211.  
  2212.   DirectSoundCaptureCreate: function(lpGUID: PGUID; out lplpDSC: IDirectSoundCapture; pUnkOuter: IUnknown): HResult; stdcall;
  2213.   {$EXTERNALSYM DirectSoundCaptureCreate}
  2214.   DirectSoundCaptureEnumerateW: function(lpDSEnumCallback: TDSEnumCallbackW; lpContext: Pointer): HResult; stdcall;
  2215.   {$EXTERNALSYM DirectSoundCaptureEnumerateW}
  2216.   DirectSoundCaptureEnumerateA: function(lpDSEnumCallback: TDSEnumCallbackA; lpContext: Pointer): HResult; stdcall;
  2217.   {$EXTERNALSYM DirectSoundCaptureEnumerateA}
  2218.   DirectSoundCaptureEnumerate: function(lpDSEnumCallback: TDSEnumCallback; lpContext: Pointer): HResult; stdcall;
  2219.   {$EXTERNALSYM DirectSoundCaptureEnumerate}
  2220.  
  2221. //#if DIRECTSOUND_VERSION >= 0x0800
  2222. type
  2223.   TDirectSoundFullDuplexCreateFunc = function(pcGuidCaptureDevice, pcGuidRenderDevice: PGUID;
  2224.     const pcDSCBufferDesc: TDSCBufferDesc; const pcDSBufferDesc: TDSBufferDesc;
  2225.     hWnd: hWnd; dwLevel: DWORD; out ppDSFD: IDirectSoundFullDuplex8;
  2226.     out ppDSCBuffer8: IDirectSoundCaptureBuffer8; out ppDSBuffer8: IDirectSoundBuffer8;
  2227.     pUnkOuter: IUnknown): HResult; stdcall;
  2228.  
  2229. var
  2230.   DirectSoundCreate8: function(pcGuidDevice: PGUID; out ppDS8: IDirectSound8; pUnkOuter: IUnknown): HResult; stdcall;
  2231.   {$EXTERNALSYM DirectSoundCreate8}
  2232.   DirectSoundCaptureCreate8: function(pcGuidDevice: PGUID; out ppDSC8: IDirectSoundCapture8; pUnkOuter: IUnknown): HResult; stdcall;
  2233.   {$EXTERNALSYM DirectSoundCaptureCreate8}
  2234.   DirectSoundFullDuplexCreate: TDirectSoundFullDuplexCreateFunc;
  2235.   {$EXTERNALSYM DirectSoundFullDuplexCreate}
  2236.   DirectSoundFullDuplexCreate8: TDirectSoundFullDuplexCreateFunc;
  2237.   {$EXTERNALSYM DirectSoundFullDuplexCreate8}
  2238.  
  2239.   GetDeviceID: function(pGuidSrc, pGuidDest: PGUID): HResult; stdcall;
  2240.   {$EXTERNALSYM GetDeviceID}
  2241. //#endif // DIRECTSOUND_VERSION >= 0x0800
  2242.  
  2243. {$ELSE}
  2244. function DirectSoundCreate(lpGuid: PGUID; out ppDS: IDirectSound; pUnkOuter: IUnknown): HResult; stdcall; external DirectSoundDLL;
  2245. {$EXTERNALSYM DirectSoundCreate}
  2246. function DirectSoundEnumerateW(lpDSEnumCallback: TDSEnumCallbackW; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundEnumerateW';
  2247. {$EXTERNALSYM DirectSoundEnumerateW}
  2248. function DirectSoundEnumerateA(lpDSEnumCallback: TDSEnumCallbackA; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundEnumerateA';
  2249. {$EXTERNALSYM DirectSoundEnumerateA}
  2250. {$IFDEF UNICODE}
  2251. function DirectSoundEnumerate(lpDSEnumCallback: TDSEnumCallback; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundEnumerateW';
  2252. {$ELSE}
  2253. function DirectSoundEnumerate(lpDSEnumCallback: TDSEnumCallback; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundEnumerateA';
  2254. {$ENDIF}
  2255. {$EXTERNALSYM DirectSoundEnumerate}
  2256.  
  2257. function DirectSoundCaptureCreate(lpGUID: PGUID; out lplpDSC: IDirectSoundCapture; pUnkOuter: IUnknown): HResult; stdcall; external DirectSoundDLL;
  2258. {$EXTERNALSYM DirectSoundCaptureCreate}
  2259. function DirectSoundCaptureEnumerateW(lpDSEnumCallback: TDSEnumCallbackW; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundCaptureEnumerateW';
  2260. {$EXTERNALSYM DirectSoundCaptureEnumerateW}
  2261. function DirectSoundCaptureEnumerateA(lpDSEnumCallback: TDSEnumCallbackA; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundCaptureEnumerateA';
  2262. {$EXTERNALSYM DirectSoundCaptureEnumerateA}
  2263. {$IFDEF UNICODE}
  2264. function DirectSoundCaptureEnumerate(lpDSEnumCallback: TDSEnumCallback; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundCaptureEnumerateW';
  2265. {$ELSE}
  2266. function DirectSoundCaptureEnumerate(lpDSEnumCallback: TDSEnumCallback; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundCaptureEnumerateA';
  2267. {$ENDIF}
  2268. {$EXTERNALSYM DirectSoundCaptureEnumerate}
  2269.  
  2270. //#if DIRECTSOUND_VERSION >= 0x0800
  2271. function DirectSoundCreate8(pcGuidDevice: PGUID; out ppDS8: IDirectSound8; pUnkOuter: IUnknown): HResult; stdcall; external DirectSoundDLL;
  2272. {$EXTERNALSYM DirectSoundCreate8}
  2273. function DirectSoundCaptureCreate8(pcGuidDevice: PGUID; out ppDSC8: IDirectSoundCapture8; pUnkOuter: IUnknown): HResult; stdcall; external DirectSoundDLL;
  2274. {$EXTERNALSYM DirectSoundCaptureCreate8}
  2275. function DirectSoundFullDuplexCreate(pcGuidCaptureDevice, pcGuidRenderDevice: PGUID;
  2276.   const pcDSCBufferDesc: TDSCBufferDesc; const pcDSBufferDesc: TDSBufferDesc;
  2277.   hWnd: hWnd; dwLevel: DWORD; out ppDSFD: IDirectSoundFullDuplex8;
  2278.   out ppDSCBuffer8: IDirectSoundCaptureBuffer8; out ppDSBuffer8: IDirectSoundBuffer8;
  2279.   pUnkOuter: IUnknown): HResult; stdcall; external DirectSoundDLL;
  2280. {$EXTERNALSYM DirectSoundFullDuplexCreate}
  2281. function DirectSoundFullDuplexCreate8(pcGuidCaptureDevice, pcGuidRenderDevice: PGUID;
  2282.   const pcDSCBufferDesc: TDSCBufferDesc; const pcDSBufferDesc: TDSBufferDesc;
  2283.   hWnd: hWnd; dwLevel: DWORD; out ppDSFD: IDirectSoundFullDuplex8;
  2284.   out ppDSCBuffer8: IDirectSoundCaptureBuffer8; out ppDSBuffer8: IDirectSoundBuffer8;
  2285.   pUnkOuter: IUnknown): HResult; stdcall; external DirectSoundDLL;
  2286. {$EXTERNALSYM DirectSoundFullDuplexCreate8}
  2287.  
  2288. function GetDeviceID(pGuidSrc, pGuidDest: PGUID): HResult; stdcall; external DirectSoundDLL;
  2289. {$EXTERNALSYM GetDeviceID}
  2290. //#endif // DIRECTSOUND_VERSION >= 0x0800
  2291.  
  2292. {$ENDIF}
  2293.  
  2294.  
  2295. implementation
  2296.  
  2297. // #define MAKE_DSHRESULT(code)  MAKE_HRESULT(1, _FACDS, code)
  2298. function MAKE_DSHRESULT(Code: DWord): DWord;
  2299. begin
  2300.   Result:= DWord((1 shl 31) or (_FACDS shl 16)) or Code;
  2301. end;
  2302.  
  2303. // #define DSSPEAKER_COMBINED(c, g)    ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16))
  2304. function DSSPEAKER_COMBINED(c, g: DWORD): DWORD;
  2305. begin
  2306.   Result:= Byte(c) or (DWORD(Byte(g)) shl 16);
  2307. end;
  2308.  
  2309. // #define DSSPEAKER_CONFIG(a)         ((BYTE)(a))
  2310. function DSSPEAKER_CONFIG(a: Cardinal): Byte;
  2311. begin
  2312.   Result:= Byte(a);
  2313. end;
  2314.  
  2315. // #define DSSPEAKER_GEOMETRY(a)       ((BYTE)(((DWORD)(a) >> 16) & 0x00FF))
  2316. function DSSPEAKER_GEOMETRY(a: Cardinal): Byte;
  2317. begin
  2318.   Result:= Byte((DWORD(a) shr 16) and $00FF);
  2319. end;
  2320.  
  2321.  
  2322. {$IFDEF DIRECTSOUND_DYNAMIC_LINK}
  2323. var
  2324.   DirectSoundLib: THandle = 0;
  2325.  
  2326. function DirectSoundLoaded: Boolean;
  2327. begin
  2328.   Result:= (DirectSoundLib <> 0);
  2329. end;
  2330.  
  2331. function UnLoadDirectSound: Boolean;
  2332. begin
  2333.   Result:= True;
  2334.   if (DirectSoundLib <> 0) then
  2335.   begin
  2336.     Result:= Result and FreeLibrary(DirectSoundLib);
  2337.  
  2338.     DirectSoundCreate:= nil;
  2339.     DirectSoundEnumerateW:= nil;
  2340.     DirectSoundEnumerateA:= nil;
  2341.     DirectSoundEnumerate:= nil;
  2342.  
  2343.     DirectSoundCaptureCreate:= nil;
  2344.     DirectSoundCaptureEnumerateW:= nil;
  2345.     DirectSoundCaptureEnumerateA:= nil;
  2346.     DirectSoundCaptureEnumerate:= nil;
  2347.  
  2348.     //#if DIRECTSOUND_VERSION >= 0x0800
  2349.     DirectSoundCreate8:= nil;
  2350.     DirectSoundCaptureCreate8:= nil;
  2351.     DirectSoundFullDuplexCreate:= nil;
  2352.     DirectSoundFullDuplexCreate8:= nil;
  2353.  
  2354.     GetDeviceID:= nil;
  2355.  
  2356.     DirectSoundLib:= 0;
  2357.   end;
  2358. end;
  2359.  
  2360. function LoadDirectSound: Boolean;
  2361. begin
  2362.   Result:= DirectSoundLoaded;
  2363.   if (not Result) then
  2364.   begin
  2365.     DirectSoundLib:= LoadLibrary(DirectSoundDll);
  2366.     if (DirectSoundLib<>0) then
  2367.     begin
  2368.       DirectSoundCreate:= GetProcAddress(DirectSoundLib, 'DirectSoundCreate');
  2369.       DirectSoundEnumerateW:= GetProcAddress(DirectSoundLib, 'DirectSoundEnumerateW');
  2370.       DirectSoundEnumerateA:= GetProcAddress(DirectSoundLib, 'DirectSoundEnumerateA');
  2371.       {$IFDEF UNICODE}
  2372.       DirectSoundEnumerate:= GetProcAddress(DirectSoundLib, 'DirectSoundEnumerateW');
  2373.       {$ELSE}
  2374.       DirectSoundEnumerate:= GetProcAddress(DirectSoundLib, 'DirectSoundEnumerateA');
  2375.       {$ENDIF}
  2376.  
  2377.       DirectSoundCaptureCreate:= GetProcAddress(DirectSoundLib, 'DirectSoundCaptureCreate');
  2378.       DirectSoundCaptureEnumerateW:= GetProcAddress(DirectSoundLib, 'DirectSoundCaptureEnumerateW');
  2379.       DirectSoundCaptureEnumerateA:= GetProcAddress(DirectSoundLib, 'DirectSoundCaptureEnumerateA');
  2380.       {$IFDEF UNICODE}
  2381.       DirectSoundCaptureEnumerate:= GetProcAddress(DirectSoundLib, 'DirectSoundCaptureEnumerateW');
  2382.       {$ELSE}
  2383.       DirectSoundCaptureEnumerate:= GetProcAddress(DirectSoundLib, 'DirectSoundCaptureEnumerateA');
  2384.       {$ENDIF}
  2385.  
  2386.       //#if DIRECTSOUND_VERSION >= 0x0800
  2387.       DirectSoundCreate8:= GetProcAddress(DirectSoundLib, 'DirectSoundCreate8');
  2388.       DirectSoundCaptureCreate8:= GetProcAddress(DirectSoundLib, 'DirectSoundCaptureCreate8');
  2389.       DirectSoundFullDuplexCreate:= GetProcAddress(DirectSoundLib, 'DirectSoundFullDuplexCreate');
  2390.       DirectSoundFullDuplexCreate8:= GetProcAddress(DirectSoundLib, 'DirectSoundFullDuplexCreate');
  2391.  
  2392.       GetDeviceID:= GetProcAddress(DirectSoundLib, 'GetDeviceID');
  2393.       //#endif // DIRECTSOUND_VERSION >= 0x0800
  2394.     end;
  2395.     
  2396.     Result:= Assigned(DirectSoundCreate);
  2397.     if not Result then UnLoadDirectSound;
  2398.   end;
  2399. end;
  2400. {$ELSE}
  2401. function DirectSoundLoaded: Boolean;
  2402. begin // Stub function for static linking
  2403.   Result:= True;
  2404. end;
  2405.  
  2406. function UnLoadDirectSound: Boolean;
  2407. begin // Stub function for static linking
  2408.   Result:= True; // should emulate "normal" behaviour
  2409. end;
  2410.  
  2411. function LoadDirectSound: Boolean;
  2412. begin // Stub function for static linking
  2413.   Result:= True;
  2414. end;
  2415.  
  2416. {$ENDIF}
  2417.  
  2418. {$IFDEF DIRECTSOUND_DYNAMIC_LINK}
  2419. initialization
  2420. {$IFNDEF DIRECTSOUND_DYNAMIC_LINK_EXPLICIT}
  2421.   LoadDirectSound;
  2422. {$ENDIF}
  2423. finalization
  2424.   UnLoadDirectSound;
  2425. {$ENDIF}
  2426. end.
  2427.  
  2428.