home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 December / Chip_2001-12_cd1.bin / zkuste / delphi / kompon / d56 / CMDXCAP.ZIP / DirectSound.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2001-03-25  |  67.3 KB  |  1,547 lines

  1. (*==========================================================================;
  2.  *
  3.  *  Copyright (C) 1995-1997 Microsoft Corporation.  All Rights Reserved.
  4.  *
  5.  *  File:       dsound.h  piece of ksmedia.h
  6.  *  Content:    DirectSound include file
  7.  *
  8.  *
  9.  *  DirectX 7.0 Delphi adaptation by Erik Unger
  10.  *  DirectX 8.0 Delphi adaptation by Ivo Steinmann
  11.  *
  12.  *  Modified: 26-Nov-2000
  13.  *
  14.  *  Download: http://www.delphi-jedi.org/DelphiGraphics/
  15.  *  E-Mail: isteinmann@bluewin.ch
  16.  *
  17.  ***************************************************************************)
  18.  
  19. (*==========================================================================;
  20.  * History :
  21.  *
  22.  * 25-Mar-2001 (Tim Baumgarten) : Changed "lpDSCFXDesc : TDSCEffectDesc" to "lpDSCFXDesc : PDSCEffectDesc" in TDSCBufferDesc_DX8
  23.  * 26-Nov-2000 (Tim Baumgarten) : Returncodes are now typecasted with HResult
  24.  *
  25.  ***************************************************************************)
  26.  
  27. unit DirectSound;
  28.  
  29. {$MINENUMSIZE 4}
  30. {$ALIGN ON}
  31.  
  32. //{$DEFINE DIRECTX6}
  33. //{$DEFINE DIRECTX7}
  34.  
  35. interface
  36.  
  37. uses
  38.   Windows,
  39.   MMSystem,
  40.   DirectXGraphics;
  41.  
  42. var
  43.   DSoundDLL : HMODULE;
  44.  
  45. (*==========================================================================;
  46.  * Library : dsound.h
  47.  ***************************************************************************)
  48.  
  49. //
  50. // Forward declarations for interfaces.
  51. // 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined
  52. //
  53. type
  54.   IDirectSound = interface;
  55.   IDirectSoundBuffer = interface;
  56.   IDirectSound3DListener = interface;
  57.   IDirectSound3DBuffer = interface;
  58.   IDirectSoundCapture = interface;
  59.   IDirectSoundCaptureBuffer = interface;
  60.   IDirectSoundNotify = interface;
  61.   IKsPropertySet = interface;
  62.  
  63. // DirectSound 8.0 Interfaces
  64.   IDirectSound8 = interface;
  65.   IDirectSoundBuffer8 = interface;
  66.   IDirectSoundCaptureBuffer8 = interface;
  67.   IDirectSoundCaptureFXAec8 = interface;
  68.   IDirectSoundCaptureFXNoiseSuppress8 = interface;
  69.   IDirectSoundFullDuplex8 = interface;
  70.   IDirectSoundFXGargle8 = interface;
  71.   IDirectSoundFXChorus8 = interface;
  72.   IDirectSoundFXFlanger8 = interface;
  73.   IDirectSoundFXEcho8 = interface;
  74.   IDirectSoundFXDistortion8 = interface;
  75.   IDirectSoundFXCompressor8 = interface;
  76.   IDirectSoundFXParamEq8 = interface;
  77.   IDirectSoundFXWavesReverb8 = interface;
  78.   IDirectSoundFXI3DL2Reverb8 = interface;
  79.  
  80.  
  81. //
  82. // Structures
  83. //
  84.  
  85.   TD3DValue = single;
  86.  
  87.   PDS3DBuffer = ^TDS3DBuffer;
  88.   TDS3DBuffer = packed record
  89.     dwSize             : DWORD;
  90.     vPosition          : TD3DVector;
  91.     vVelocity          : TD3DVector;
  92.     dwInsideConeAngle  : DWORD;
  93.     dwOutsideConeAngle : DWORD;
  94.     vConeOrientation   : TD3DVector;
  95.     lConeOutsideVolume : LongInt;
  96.     flMinDistance      : TD3DValue;
  97.     flMaxDistance      : TD3DValue;
  98.     dwMode             : DWORD;
  99.   end;
  100.   TCDS3DBuffer = ^TDS3DBuffer;
  101.  
  102.   PDS3DListener = ^TDS3DListener;
  103.   TDS3DListener = packed record
  104.     dwSize           : DWORD;
  105.     vPosition        : TD3DVector;
  106.     vVelocity        : TD3DVector;
  107.     vOrientFront     : TD3DVector;
  108.     vOrientTop       : TD3DVector;
  109.     flDistanceFactor : TD3DValue;
  110.     flRolloffFactor  : TD3DValue;
  111.     flDopplerFactor  : TD3DValue;
  112.   end;
  113.   PCDS3DListener = ^TDS3DListener;
  114.  
  115.   PDSBCaps = ^TDSBCaps;
  116.   TDSBCaps = packed record
  117.     dwSize               : DWORD;
  118.     dwFlags              : DWORD;
  119.     dwBufferBytes        : DWORD;
  120.     dwUnlockTransferRate : DWORD;
  121.     dwPlayCpuOverhead    : DWORD;
  122.   end;
  123.   PCDSBCaps = ^TDSBCaps;
  124.  
  125.   PDSBPositionNotify = ^TDSBPositionNotify;
  126.   TDSBPositionNotify = packed record
  127.     dwOffset     : DWORD;
  128.     hEventNotify : THandle;
  129.   end;
  130.   PCDSBPositionNotify = ^TDSBPositionNotify;
  131.  
  132.   TDSBufferDesc_DX6 = packed record
  133.     dwSize        : DWORD;
  134.     dwFlags       : DWORD;
  135.     dwBufferBytes : DWORD;
  136.     dwReserved    : DWORD;
  137.     lpwfxFormat   : PWaveFormatEx;
  138.   end;
  139.  
  140.   TDSBufferDesc1 = TDSBufferDesc_DX6;
  141.   PDSBufferDesc1 = ^TDSBufferDesc1;
  142.   PCDSBufferDesc1 = PDSBufferDesc1;
  143.  
  144.   TDSBufferDesc_DX7 = packed record
  145.     dwSize          : DWORD;
  146.     dwFlags         : DWORD;
  147.     dwBufferBytes   : DWORD;
  148.     dwReserved      : DWORD;
  149.     lpwfxFormat     : PWaveFormatEx;
  150.     guid3DAlgorithm : TGUID;
  151.   end;
  152.  
  153.   TDSBufferDesc_DX8 = packed record
  154.     dwSize          : DWORD;
  155.     dwFlags         : DWORD;
  156.     dwBufferBytes   : DWORD;
  157.     dwReserved      : DWORD;
  158.     lpwfxFormat     : PWaveFormatEx;
  159.     guid3DAlgorithm : TGUID;
  160.   end;
  161.  
  162. {$IFDEF DIRECTX6}
  163.   TDSBufferDesc = TDSBufferDesc_DX6;
  164. {$ELSE}
  165.   {$IFDEF DIRECTX7}
  166.     TDSBufferDesc = TDSBufferDesc_DX7;
  167.   {$ELSE}
  168.     TDSBufferDesc = TDSBufferDesc_DX8;
  169.   {$ENDIF}
  170. {$ENDIF}
  171.  
  172.   PDSBufferDesc = ^TDSBufferDesc;
  173.   PCDSBufferDesc = PDSBufferDesc;
  174.  
  175.   PDSCaps = ^TDSCaps;
  176.   TDSCaps = packed record
  177.     dwSize                        : DWORD;
  178.     dwFlags                       : DWORD;
  179.     dwMinSecondarySampleRate      : DWORD;
  180.     dwMaxSecondarySampleRate      : DWORD;
  181.     dwPrimaryBuffers              : DWORD;
  182.     dwMaxHwMixingAllBuffers       : DWORD;
  183.     dwMaxHwMixingStaticBuffers    : DWORD;
  184.     dwMaxHwMixingStreamingBuffers : DWORD;
  185.     dwFreeHwMixingAllBuffers      : DWORD;
  186.     dwFreeHwMixingStaticBuffers   : DWORD;
  187.     dwFreeHwMixingStreamingBuffers: DWORD;
  188.     dwMaxHw3DAllBuffers           : DWORD;
  189.     dwMaxHw3DStaticBuffers        : DWORD;
  190.     dwMaxHw3DStreamingBuffers     : DWORD;
  191.     dwFreeHw3DAllBuffers          : DWORD;
  192.     dwFreeHw3DStaticBuffers       : DWORD;
  193.     dwFreeHw3DStreamingBuffers    : DWORD;
  194.     dwTotalHwMemBytes             : DWORD;
  195.     dwFreeHwMemBytes              : DWORD;
  196.     dwMaxContigFreeHwMemBytes     : DWORD;
  197.     dwUnlockTransferRateHwBuffers : DWORD;
  198.     dwPlayCpuOverheadSwBuffers    : DWORD;
  199.     dwReserved1                   : DWORD;
  200.     dwReserved2                   : DWORD;
  201.   end;
  202.   PCDSCaps = ^TDSCaps;
  203.  
  204.   PDSCBCaps = ^TDSCBCaps;
  205.   TDSCBCaps = packed record
  206.     dwSize        : DWORD;
  207.     dwFlags       : DWORD;
  208.     dwBufferBytes : DWORD;
  209.     dwReserved    : DWORD;
  210.   end;
  211.   PCDSCBCaps = ^TDSCBCaps;
  212.  
  213.   PDSCEffectDesc = ^TDSCEffectDesc;
  214.   TDSCEffectDesc = packed record
  215.     dwSize            : DWORD;
  216.     dwFlags           : DWORD;
  217.     guidDSCFXClass    : TGUID;
  218.     guidDSCFXInstance : TGUID;
  219.     dwReserved1       : DWORD;
  220.     dwReserved2       : DWORD;
  221.   end;
  222.   TCDSCEffectDesc = PDSCEffectDesc;
  223.  
  224.   TDSCBufferDesc_DX7 = packed record
  225.     dwSize        : DWORD;
  226.     dwFlags       : DWORD;
  227.     dwBufferBytes : DWORD;
  228.     dwReserved    : DWORD;
  229.     lpwfxFormat   : PWaveFormatEx;
  230.   end;
  231.   TDSCBufferDesc_DX6 = TDSCBufferDesc_DX7;
  232.  
  233.   TDSCBufferDesc_DX8 = packed record
  234.     dwSize        : DWORD;
  235.     dwFlags       : DWORD;
  236.     dwBufferBytes : DWORD;
  237.     dwReserved    : DWORD;
  238.     lpwfxFormat   : PWaveFormatEx;
  239.     dwFXCount     : DWORD;
  240.     lpDSCFXDesc   : PDSCEffectDesc;
  241.   end;
  242.  
  243. {$IFDEF DIRECTX6}
  244.   TDSCBufferDesc = TDSCBufferDesc_DX6;
  245. {$ELSE}
  246.   {$IFDEF DIRECTX7}
  247.     TDSCBufferDesc = TDSCBufferDesc_DX7;
  248.   {$ELSE}
  249.     TDSCBufferDesc = TDSCBufferDesc_DX8;
  250.   {$ENDIF}
  251. {$ENDIF}
  252.  
  253.   PDSCBufferDesc = ^TDSCBufferDesc;
  254.   PCDSCBufferDesc = ^TDSCBufferDesc;
  255.  
  256.   PDSCCaps = ^TDSCCaps;
  257.   TDSCCaps = packed record
  258.     dwSize     : DWORD;
  259.     dwFlags    : DWORD;
  260.     dwFormats  : DWORD;
  261.     dwChannels : DWORD;
  262.   end;
  263.   PCDSCCaps = ^TDSCCaps;
  264.  
  265.   PDSCFXAec = ^TDSCFXAec;
  266.   TDSCFXAec = packed record
  267.     fEnable : BOOL;
  268.     fReset  : BOOL;
  269.   end;
  270.   PCDSCFXAec = ^TDSCFXAec;
  271.  
  272.   PDSCFXNoiseSuppress = ^TDSCFXNoiseSuppress;
  273.   TDSCFXNoiseSuppress = packed record
  274.     fEnable : BOOL;
  275.     fReset  : BOOL;
  276.   end;
  277.   PCDSCFXNoiseSuppress = ^TDSCFXNoiseSuppress;
  278.  
  279.   PDSEffectDesc = ^TDSEffectDesc;
  280.   TDSEffectDesc = packed record
  281.     dwSize        : DWORD;
  282.     dwFlags       : DWORD;
  283.     guidDSFXClass : TGUID;
  284.     dwReserved1   : DWORD;
  285.     dwReserved2   : DWORD;
  286.   end;
  287.   PCDSEffectDesc = ^TDSEffectDesc;
  288.  
  289.   PDSFXI3DL2Reverb = ^TDSFXI3DL2Reverb;
  290.   TDSFXI3DL2Reverb = packed record
  291.     lRoom               : Longint;    // [-10000, 0]      default: -1000 mB
  292.     lRoomHF             : Longint;    // [-10000, 0]      default: 0 mB
  293.     flRoomRolloffFactor : single;     // [0.0, 10.0]      default: 0.0
  294.     flDecayTime         : single;     // [0.1, 20.0]      default: 1.49s
  295.     flDecayHFRatio      : single;     // [0.1, 2.0]       default: 0.83
  296.     lReflections        : Longint;    // [-10000, 1000]   default: -2602 mB
  297.     flReflectionsDelay  : single;     // [0.0, 0.3]       default: 0.007 s
  298.     lReverb             : Longint;    // [-10000, 2000]   default: 200 mB
  299.     flReverbDelay       : single;     // [0.0, 0.1]       default: 0.011 s
  300.     flDiffusion         : single;     // [0.0, 100.0]     default: 100.0 %
  301.     flDensity           : single;     // [0.0, 100.0]     default: 100.0 %
  302.     flHFReference       : single;     // [20.0, 20000.0]  default: 5000.0 Hz
  303.   end;
  304.   PCDSFXI3DL2Reverb = ^TDSFXI3DL2Reverb;
  305.  
  306.   PDSFXChorus = ^TDSFXChorus;
  307.   TDSFXChorus = packed record
  308.     fWetDryMix : single;
  309.     fDepth     : single;
  310.     fFeedback  : single;
  311.     fFrequency : single;
  312.     lWaveform  : Longint;          // LFO shape; DSFXCHORUS_WAVE_xxx
  313.     fDelay     : single;
  314.     lPhase     : Longint;
  315.   end;
  316.   PCDSFXChorus = ^TDSFXChorus;
  317.  
  318.   PDSFXCompressor = ^TDSFXCompressor;
  319.   TDSFXCompressor = packed record
  320.     fGain      : single;
  321.     fAttack    : single;
  322.     fRelease   : single;
  323.     fThreshold : single;
  324.     fRatio     : single;
  325.     fPredelay  : single;
  326.   end;
  327.   PCDSFXCompressor = ^TDSFXCompressor;
  328.  
  329.   PDSFXDistortion = ^TDSFXDistortion;
  330.   TDSFXDistortion = packed record
  331.     fGain                  : single;
  332.     fEdge                  : single;
  333.     fPostEQCenterFrequency : single;
  334.     fPostEQBandwidth       : single;
  335.     fPreLowpassCutoff      : single;
  336.   end;
  337.   PCDSFXDistortion = ^TDSFXDistortion;
  338.  
  339.   PDSFXEcho = ^TDSFXEcho;
  340.   TDSFXEcho = packed record
  341.     fWetDryMix  : single;
  342.     fFeedback   : single;
  343.     fLeftDelay  : single;
  344.     fRightDelay : single;
  345.     lPanDelay   : Longint;
  346.   end;
  347.   PCDSFXEcho = ^TDSFXEcho;
  348.  
  349.   PDSFXFlanger = ^TDSFXFlanger;
  350.   TDSFXFlanger = packed record
  351.     fWetDryMix : single;
  352.     fDepth     : single;
  353.     fFeedback  : single;
  354.     fFrequency : single;
  355.     lWaveform  : Longint;
  356.     fDelay     : single;
  357.     lPhase     : Longint;
  358.   end;
  359.   PCDSFXFlanger = ^TDSFXFlanger;
  360.  
  361.   PDSFXGargle = ^TDSFXGargle;
  362.   TDSFXGargle = packed record
  363.     dwRateHz    : DWORD;            // Rate of modulation in hz
  364.     dwWaveShape : DWORD;            // DSFXGARGLE_WAVE_xxx
  365.   end;
  366.   PCDSFXGargle = ^TDSFXGargle;
  367.  
  368.   PDSFXParamEq = ^TDSFXParamEq;
  369.   TDSFXParamEq = packed record
  370.     fCenter    : single;
  371.     fBandwidth : single;
  372.     fGain      : single;
  373.   end;
  374.   PCDSFXParamEq = ^TDSFXParamEq;
  375.  
  376.   PDSFXWavesReverb = ^TDSFXWavesReverb;
  377.   TDSFXWavesReverb = packed record
  378.     fInGain          : single;       // [-96.0,0.0]            default: 0.0 dB
  379.     fReverbMix       : single;       // [-96.0,0.0]            default: 0.0 db
  380.     fReverbTime      : single;       // [0.001,3000.0]         default: 1000.0 ms
  381.     fHighFreqRTRatio : single;       // [0.001,0.999]          default: 0.001
  382.   end;
  383.   PCDSFXWavesReverb = ^TDSFXWavesReverb;
  384.  
  385.   TDSFXI3DL2EnvironmentPreset = (
  386.     DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT,
  387.     DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC,
  388.     DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL,
  389.     DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM,
  390.     DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM,
  391.     DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM,
  392.     DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM,
  393.     DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM,
  394.     DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL,
  395.     DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE,
  396.     DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA,
  397.     DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR,
  398.     DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY,
  399.     DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY,
  400.     DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR,
  401.     DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY,
  402.     DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST,
  403.     DSFX_I3DL2_ENVIRONMENT_PRESET_CITY,
  404.     DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS,
  405.     DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY,
  406.     DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN,
  407.     DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT,
  408.     DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE,
  409.     DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER,
  410.     DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM,
  411.     DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM,
  412.     DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM,
  413.     DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL,
  414.     DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL,
  415.     DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE
  416.   );
  417.  
  418.   TDSFXI3DL2MaterialPreset = (
  419.     DSFX_I3DL2_MATERIAL_PRESET_SINGLEWINDOW,
  420.     DSFX_I3DL2_MATERIAL_PRESET_DOUBLEWINDOW,
  421.     DSFX_I3DL2_MATERIAL_PRESET_THINDOOR,
  422.     DSFX_I3DL2_MATERIAL_PRESET_THICKDOOR,
  423.     DSFX_I3DL2_MATERIAL_PRESET_WOODWALL,
  424.     DSFX_I3DL2_MATERIAL_PRESET_BRICKWALL,
  425.     DSFX_I3DL2_MATERIAL_PRESET_STONEWALL,
  426.     DSFX_I3DL2_MATERIAL_PRESET_CURTAIN
  427.   );
  428.  
  429. //
  430. // DirectSound API
  431. //
  432.   TDSEnumCallbackW = function (lpGuid: PGUID; lpstrDescription: PWideChar;
  433.       lpstrModule: PWideChar; lpContext: Pointer) : BOOL; stdcall;
  434.   TDSEnumCallbackA = function (lpGuid: PGUID; lpstrDescription: PAnsiChar;
  435.       lpstrModule: PAnsiChar; lpContext: Pointer) : BOOL; stdcall;
  436. {$IFDEF UNICODE}
  437.   TDSEnumCallback = TDSEnumCallbackW;
  438. {$ELSE}
  439.   TDSEnumCallback = TDSEnumCallbackA;
  440. {$ENDIF}
  441.  
  442. //
  443. // IDirectSound
  444. //
  445.   PIDirectSound = ^IDirectSound;
  446.   IDirectSound = interface (IUnknown)
  447.     ['{279AFA83-4981-11CE-A521-0020AF0BE560}']
  448.     // IDirectSound methods
  449.     function CreateSoundBuffer(const lpDSBufferDesc: TDSBufferDesc;
  450.         out lpIDirectSoundBuffer: IDirectSoundBuffer;
  451.         pUnkOuter: IUnknown) : HResult; stdcall;
  452.     function GetCaps(var lpDSCaps: TDSCaps) : HResult; stdcall;
  453.     function DuplicateSoundBuffer(lpDsbOriginal: IDirectSoundBuffer;
  454.         out lpDsbDuplicate: IDirectSoundBuffer) : HResult; stdcall;
  455.     function SetCooperativeLevel(hwnd: HWND; dwLevel: DWORD) : HResult; stdcall;
  456.     function Compact: HResult; stdcall;
  457.     function GetSpeakerConfig(var lpdwSpeakerConfig: DWORD) : HResult; stdcall;
  458.     function SetSpeakerConfig(dwSpeakerConfig: DWORD) : HResult; stdcall;
  459.     function Initialize(lpGuid: PGUID) : HResult; stdcall;
  460.   end;
  461.  
  462. //
  463. // IDirectSound8
  464. //
  465.   IDirectSound8 = interface (IDirectSound)
  466.     ['{C50A7E93-F395-4834-9EF6-7FA99DE50966}']
  467.     // IDirectSound8 methods
  468.     function VerifyCertification(out pdwCertified: DWORD): HResult; stdcall;
  469.   end;
  470.  
  471. //
  472. // IDirectSoundBuffer
  473. //
  474.   IDirectSoundBuffer = interface (IUnknown)
  475.     ['{279AFA85-4981-11CE-A521-0020AF0BE560}']
  476.     // IDirectSoundBuffer methods
  477.     function GetCaps(var lpDSCaps: TDSBCaps) : HResult; stdcall;
  478.     function GetCurrentPosition
  479.         (lpdwCapturePosition, lpdwReadPosition : PDWORD) : HResult; stdcall;
  480.     function GetFormat(lpwfxFormat: PWaveFormatEx; dwSizeAllocated: DWORD;
  481.         lpdwSizeWritten: PDWORD) : HResult; stdcall;
  482.     function GetVolume(var lplVolume: integer) : HResult; stdcall;
  483.     function GetPan(var lplPan: integer) : HResult; stdcall;
  484.     function GetFrequency(var lpdwFrequency: DWORD) : HResult; stdcall;
  485.     function GetStatus(var lpdwStatus: DWORD) : HResult; stdcall;
  486.     function Initialize(lpDirectSound: IDirectSound;
  487.         const lpcDSBufferDesc: TDSBufferDesc) : HResult; stdcall;
  488.     function Lock(dwWriteCursor, dwWriteBytes: DWORD;
  489.         var lplpvAudioPtr1: Pointer; var lpdwAudioBytes1: DWORD;
  490.         var lplpvAudioPtr2: Pointer; var lpdwAudioBytes2: DWORD;
  491.         dwFlags: DWORD) : HResult; stdcall;
  492.     function Play(dwReserved1,dwReserved2,dwFlags: DWORD) : HResult; stdcall;
  493.     function SetCurrentPosition(dwPosition: DWORD) : HResult; stdcall;
  494.     function SetFormat(const lpcfxFormat: TWaveFormatEx) : HResult; stdcall;
  495.     function SetVolume(lVolume: integer) : HResult; stdcall;
  496.     function SetPan(lPan: integer) : HResult; stdcall;
  497.     function SetFrequency(dwFrequency: DWORD) : HResult; stdcall;
  498.     function Stop: HResult; stdcall;
  499.     function Unlock(lpvAudioPtr1: Pointer; dwAudioBytes1: DWORD;
  500.         lpvAudioPtr2: Pointer; dwAudioBytes2: DWORD) : HResult; stdcall;
  501.     function Restore: HResult; stdcall;
  502.   end;
  503.  
  504. //
  505. // IDirectSoundBuffer8
  506. //
  507.   IDirectSoundBuffer8 = interface (IDirectSoundBuffer)
  508.     ['{6825a449-7524-4d82-920f-50e36ab3ab1e}']
  509.     // IDirectSoundBuffer8 methods
  510.     function SetFX(dwEffectsCount: DWORD; pDSFXDesc: PDSEffectDesc;
  511.         pdwResultCodes: PDWORD): HResult; stdcall;
  512.     function AcquireResources(dwFlags, dwEffectsCount: DWORD;
  513.         pdwResultCodes: PDWORD): HResult; stdcall;
  514.     function GetObjectInPath(const rguidObject: TGUID; dwIndex: DWORD;
  515.         const rguidInterface: TGUID; out ppObject): HResult; stdcall;
  516.   end;
  517.  
  518. //
  519. // IDirectSound3DListener
  520. //
  521.   IDirectSound3DListener = interface (IUnknown)
  522.     ['{279AFA84-4981-11CE-A521-0020AF0BE560}']
  523.     // IDirectSound3DListener methods
  524.     function GetAllParameters(var lpListener: TDS3DListener) : HResult; stdcall;
  525.     function GetDistanceFactor(var lpflDistanceFactor: TD3DValue) : HResult; stdcall;
  526.     function GetDopplerFactor(var lpflDopplerFactor: TD3DValue) : HResult; stdcall;
  527.     function GetOrientation
  528.         (var lpvOrientFront, lpvOrientTop: TD3DVector) : HResult; stdcall;
  529.     function GetPosition(var lpvPosition: TD3DVector) : HResult; stdcall;
  530.     function GetRolloffFactor(var lpflRolloffFactor: TD3DValue) : HResult; stdcall;
  531.     function GetVelocity(var lpvVelocity: TD3DVector) : HResult; stdcall;
  532.     function SetAllParameters
  533.         (const lpcListener: TDS3DListener; dwApply: DWORD) : HResult; stdcall;
  534.     function SetDistanceFactor
  535.         (flDistanceFactor: TD3DValue; dwApply: DWORD) : HResult; stdcall;
  536.     function SetDopplerFactor
  537.         (flDopplerFactor: TD3DValue; dwApply: DWORD) : HResult; stdcall;
  538.     function SetOrientation(xFront, yFront, zFront, xTop, yTop, zTop: TD3DValue;
  539.         dwApply: DWORD) : HResult; stdcall;
  540.     function SetPosition(x, y, z: TD3DValue; dwApply: DWORD) : HResult; stdcall;
  541.     function SetRolloffFactor
  542.         (flRolloffFactor: TD3DValue; dwApply: DWORD) : HResult; stdcall;
  543.     function SetVelocity(x, y, z: TD3DValue; dwApply: DWORD) : HResult; stdcall;
  544.     function CommitDeferredSettings: HResult; stdcall;
  545.   end;
  546.  
  547. //
  548. // IDirectSound3DListener8
  549. //
  550.   IDirectSound3DListener8 = IDirectSound3DListener;
  551.  
  552. //
  553. // IDirectSound3DBuffer
  554. //
  555.   IDirectSound3DBuffer = interface (IUnknown)
  556.     ['{279AFA86-4981-11CE-A521-0020AF0BE560}']
  557.     // IDirectSoundBuffer3D methods
  558.     function GetAllParameters(var lpDs3dBuffer: TDS3DBuffer) : HResult; stdcall;
  559.     function GetConeAngles
  560.         (var lpdwInsideConeAngle, lpdwOutsideConeAngle: DWORD) : HResult; stdcall;
  561.     function GetConeOrientation(var lpvOrientation: TD3DVector) : HResult; stdcall;
  562.     function GetConeOutsideVolume(var lplConeOutsideVolume: integer) : HResult; stdcall;
  563.     function GetMaxDistance(var lpflMaxDistance: TD3DValue) : HResult; stdcall;
  564.     function GetMinDistance(var lpflMinDistance: TD3DValue) : HResult; stdcall;
  565.     function GetMode(var lpdwMode: DWORD) : HResult; stdcall;
  566.     function GetPosition(var lpvPosition: TD3DVector) : HResult; stdcall;
  567.     function GetVelocity(var lpvVelocity: TD3DVector) : HResult; stdcall;
  568.     function SetAllParameters
  569.         (const lpcDs3dBuffer: TDS3DBuffer; dwApply: DWORD) : HResult; stdcall;
  570.     function SetConeAngles
  571.         (dwInsideConeAngle, dwOutsideConeAngle, dwApply: DWORD) : HResult; stdcall;
  572.     function SetConeOrientation(x, y, z: TD3DValue; dwApply: DWORD) : HResult; stdcall;
  573.     function SetConeOutsideVolume
  574.         (lConeOutsideVolume: LongInt; dwApply: DWORD) : HResult; stdcall;
  575.     function SetMaxDistance(flMaxDistance: TD3DValue; dwApply: DWORD) : HResult; stdcall;
  576.     function SetMinDistance(flMinDistance: TD3DValue; dwApply: DWORD) : HResult; stdcall;
  577.     function SetMode(dwMode: DWORD; dwApply: DWORD) : HResult; stdcall;
  578.     function SetPosition(x, y, z: TD3DValue; dwApply: DWORD) : HResult; stdcall;
  579.     function SetVelocity(x, y, z: TD3DValue; dwApply: DWORD) : HResult; stdcall;
  580.   end;
  581.  
  582. //
  583. // IDirectSound3DBuffer8
  584. //
  585.   IDirectSound3DBuffer8 = IDirectSound3DBuffer;
  586.  
  587. //
  588. // IDirectSoundCapture
  589. //
  590.   IDirectSoundCapture = interface (IUnknown)
  591.     ['{b0210781-89cd-11d0-af08-00a0c925cd16}']
  592.     // IDirectSoundCapture methods
  593.     function CreateCaptureBuffer(const lpDSCBufferDesc: TDSCBufferDesc;
  594.         var lplpDirectSoundCaptureBuffer: IDirectSoundCaptureBuffer;
  595.         pUnkOuter: IUnknown) : HResult; stdcall;
  596.     function GetCaps(var lpdwCaps: TDSCCaps) : HResult; stdcall;
  597.     function Initialize(lpGuid: PGUID) : HResult; stdcall;
  598.   end;
  599.  
  600. //
  601. // IDirectSoundCapture8
  602. //
  603.   IDirectSoundCapture8 = IDirectSoundCapture;
  604.  
  605. //
  606. // IDirectSoundCaptureBuffer
  607. //
  608.   IDirectSoundCaptureBuffer = interface (IUnknown)
  609.     ['{b0210782-89cd-11d0-af08-00a0c925cd16}']
  610.     // IDirectSoundCaptureBuffer methods
  611.     function GetCaps(var lpdwCaps: TDSCBCaps) : HResult; stdcall;
  612.     function GetCurrentPosition
  613.         (lpdwCapturePosition, lpdwReadPosition: PDWORD) : HResult; stdcall;
  614.     function GetFormat(lpwfxFormat: PWaveFormatEx; dwSizeAllocated: DWORD;
  615.         lpdwSizeWritten : PDWORD) : HResult; stdcall;
  616.     function GetStatus(var lpdwStatus: DWORD) : HResult; stdcall;
  617.     function Initialize(lpDirectSoundCapture: IDirectSoundCapture;
  618.         const lpcDSBufferDesc: TDSCBufferDesc) : HResult; stdcall;
  619.     function Lock(dwReadCursor, dwReadBytes: DWORD;
  620.         var lplpvAudioPtr1: Pointer; var lpdwAudioBytes1: DWORD;
  621.         var lplpvAudioPtr2: Pointer; var lpdwAudioBytes2: DWORD;
  622.         dwFlags: DWORD) : HResult; stdcall;
  623.     function Start(dwFlags: DWORD) : HResult; stdcall;
  624.     function Stop: HResult; stdcall;
  625.     function Unlock(lpvAudioPtr1: Pointer; dwAudioBytes1: DWORD;
  626.         lpvAudioPtr2: Pointer; dwAudioBytes2: DWORD) : HResult; stdcall;
  627.   end;
  628.  
  629. //
  630. // IDirectSoundCaptureBuffer8
  631. //
  632.   IDirectSoundCaptureBuffer8 = interface (IDirectSoundCaptureBuffer)
  633.     ['{00990df4-0dbb-4872-833e-6d303e80aeb6}']
  634.     // IDirectSoundCaptureBuffer8 methods
  635.     function GetObjectInPath(const rguidObject: TGUID; dwIndex: DWORD;
  636.         const rguidInterface: TGUID; out ppObject): HResult; stdcall;
  637.     function GetFXStatus(dwFXCount: DWORD; pdwFXStatus: PDWORD): HResult; stdcall;
  638.   end;
  639.  
  640. //
  641. // IDirectSoundCaptureFXAec8
  642. //
  643.   IDirectSoundCaptureFXAec8 = interface (IUnknown)
  644.     ['{174d3eb9-6696-4fac-a46c-a0ac7bc9e20f}']
  645.     // IDirectSoundCaptureFXAec8 methods
  646.     function SetAllParameters(const pDscFxAec: TDSCFXAec): HResult; stdcall;
  647.     function GetAllParameters(out pDscFxAec: TDSCFXAec): HResult; stdcall;
  648.   end;
  649.  
  650. //
  651. // IDirectSoundCaptureFXNoiseSuppress8
  652. //
  653.   IDirectSoundCaptureFXNoiseSuppress8 = interface (IUnknown)
  654.     ['{ed311e41-fbae-4175-9625-cd0854f693ca}']
  655.     // IDirectSoundCaptureFXNoiseSuppress8 methods
  656.     function SetAllParameters(const pcDscFxNoiseSuppress: TDSCFXNoiseSuppress): HResult; stdcall;
  657.     function GetAllParameters(out pDscFxNoiseSuppress: TDSCFXNoiseSuppress): HResult; stdcall;
  658.   end;
  659.  
  660. //
  661. // IDirectSoundFullDuplex8
  662. //
  663.   IDirectSoundFullDuplex8 = interface (IUnknown)
  664.     ['{edcb4c7a-daab-4216-a42e-6c50596ddc1d}']
  665.     // IDirectSoundFullDuplex methods
  666.     function Initialize(pCaptureGuid, pRenderGuid: PGUID; lpDscBufferDesc: PCDSCBufferDesc;
  667.         lpDsBufferDesc: PCDSBufferDesc; hWnd: hWnd; dwLevel: DWORD;
  668.         out lplpDirectSoundCaptureBuffer8: IDirectSoundCaptureBuffer8;
  669.         out lplpDirectSoundBuffer8: IDirectSoundBuffer8): HResult; stdcall;
  670.   end;
  671.  
  672. //
  673. // IDirectSoundFXGargle8
  674. //
  675.   IDirectSoundFXGargle8 = interface (IUnknown)
  676.     ['{d616f352-d622-11ce-aac5-0020af0b99a3}']
  677.     function SetAllParameters(const pcDsFxGargle: TDSFXGargle): HResult; stdcall;
  678.     function GetAllParameters(out pDsFxGargle: TDSFXGargle): HResult; stdcall;
  679.   end;
  680.  
  681. //
  682. // IDirectSoundFXChorus8
  683. //
  684.   IDirectSoundFXChorus8 = interface (IUnknown)
  685.     ['{880842e3-145f-43e6-a934-a71806e50547}']
  686.     function SetAllParameters(const pcDsFxChorus: TDSFXChorus): HResult; stdcall;
  687.     function GetAllParameters(out pDsFxChorus: TDSFXChorus): HResult; stdcall;
  688.   end;
  689.  
  690. //
  691. // IDirectSoundFXFlanger8
  692. //
  693.   IDirectSoundFXFlanger8 = interface (IUnknown)
  694.     ['{903e9878-2c92-4072-9b2c-ea68f5396783}']
  695.     function SetAllParameters(const pcDsFxFlanger: TDSFXFlanger): HResult; stdcall;
  696.     function GetAllParameters(out pDsFxFlanger: TDSFXFlanger): HResult; stdcall;
  697.   end;
  698.  
  699. //
  700. // IDirectSoundFXEcho8
  701. //
  702.   IDirectSoundFXEcho8 = interface (IUnknown)
  703.     ['{8bd28edf-50db-4e92-a2bd-445488d1ed42}']
  704.     function SetAllParameters(const pcDsFxEcho: TDSFXEcho): HResult; stdcall;
  705.     function GetAllParameters(out pDsFxEcho: TDSFXEcho): HResult; stdcall;
  706.   end;
  707.  
  708. //
  709. // IDirectSoundFXDistortion8
  710. //
  711.   IDirectSoundFXDistortion8 = interface (IUnknown)
  712.     ['{8ecf4326-455f-4d8b-bda9-8d5d3e9e3e0b}']
  713.     function SetAllParameters(const pcDsFxDistortion: TDSFXDistortion): HResult; stdcall;
  714.     function GetAllParameters(out pDsFxDistortion: TDSFXDistortion): HResult; stdcall;
  715.   end;
  716.  
  717. //
  718. // IDirectSoundFXCompressor8
  719. //
  720.   IDirectSoundFXCompressor8 = interface (IUnknown)
  721.     ['{4bbd1154-62f6-4e2c-a15c-d3b6c417f7a0}']
  722.     function SetAllParameters(const pcDsFxCompressor: TDSFXCompressor): HResult; stdcall;
  723.     function GetAllParameters(out pDsFxCompressor: TDSFXCompressor): HResult; stdcall;
  724.   end;
  725.  
  726. //
  727. // IDirectSoundFXParamEq8
  728. //
  729.   IDirectSoundFXParamEq8 = interface (IUnknown)
  730.     ['{c03ca9fe-fe90-4204-8078-82334cd177da}']
  731.     function SetAllParameters(const pcDsFxParamEq: TDSFXParamEq): HResult; stdcall;
  732.     function GetAllParameters(out pDsFxParamEq: TDSFXParamEq): HResult; stdcall;
  733.   end;
  734.  
  735. //
  736. // IDirectSoundFXI3DL2Reverb8
  737. //
  738.   IDirectSoundFXI3DL2Reverb8 = interface (IUnknown)
  739.     ['{4b166a6a-0d66-43f3-80e3-ee6280dee1a4}']
  740.     function SetAllParameters(const pcDsFxI3DL2Reverb: TDSFXI3DL2Reverb): HResult; stdcall;
  741.     function GetAllParameters(out pDsFxI3DL2Reverb: TDSFXI3DL2Reverb): HResult; stdcall;
  742.     function SetPreset(dwPreset: DWORD): HResult; stdcall;
  743.     function GetPreset(out dwPreset: DWORD): HResult; stdcall;
  744.     function SetQuality(lQuality: Longint): HResult; stdcall;
  745.     function GetQuality(out plQuality: Longint): HResult; stdcall;
  746.   end;
  747.  
  748. //
  749. // IDirectSoundFXWavesReverb8
  750. //
  751.   IDirectSoundFXWavesReverb8 = interface (IUnknown)
  752.     ['{46858c3a-0dc6-45e3-b760-d4eef16cb325}']
  753.     function SetAllParameters(const pcDsFxWavesReverb: TDSFXWavesReverb): HResult; stdcall;
  754.     function GetAllParameters(out pDsFxWavesReverb: TDSFXWavesReverb): HResult; stdcall;
  755.   end;
  756.  
  757. //
  758. // IDirectSoundNotify
  759. //
  760.   IDirectSoundNotify = interface (IUnknown)
  761.     ['{b0210783-89cd-11d0-af08-00a0c925cd16}']
  762.     // IDirectSoundNotify methods
  763.     function SetNotificationPositions(cPositionNotifies: DWORD;
  764.         lpcPositionNotifies: PDSBPositionNotify) : HResult; stdcall;
  765.   end;
  766.  
  767. //
  768. // IDirectSoundNotify8
  769. //
  770.   IDirectSoundNotify8 = IDirectSoundNotify;
  771.  
  772. //
  773. // IKsPropertySet
  774. //
  775.   IKsPropertySet = interface (IUnknown)
  776.     ['{31efac30-515c-11d0-a9aa-00aa0061be93}']
  777.     // IKsPropertySet methods
  778.     function Get(const rguidPropSet: TGUID; ulId: DWORD; pInstanceData: pointer;
  779.         ulInstanceLength: DWORD; pPropertyData: pointer; ulDataLength: DWORD;
  780.         var pulBytesReturned: DWORD) : HResult; stdcall;
  781.     // Warning: The following method is defined as Set() in DirectX
  782.     //          which is a reserved word in Delphi!
  783.     function SetProperty(const rguidPropSet: TGUID; ulId: DWORD;
  784.         pInstanceData: pointer; ulInstanceLength: DWORD;
  785.         pPropertyData: pointer; pulDataLength: DWORD) : HResult; stdcall;
  786.     function QuerySupport(const rguidPropSet: TGUID; ulId: DWORD;
  787.         var pulTypeSupport: DWORD) : HResult; stdcall;
  788.   end;
  789.  
  790.  
  791. const
  792.   KSPROPERTY_SUPPORT_GET                      = $00000001;
  793.   KSPROPERTY_SUPPORT_SET                      = $00000002;
  794.  
  795.   DSFXR_PRESENT                               = 0;
  796.   DSFXR_LOCHARDWARE                           = 1;
  797.   DSFXR_LOCSOFTWARE                           = 2;
  798.   DSFXR_UNALLOCATED                           = 3;
  799.   DSFXR_FAILED                                = 4;
  800.   DSFXR_UNKNOWN                               = 5;
  801.   DSFXR_SENDLOOP                              = 6;
  802.  
  803.   DSFXGARGLE_WAVE_TRIANGLE                    = 0;
  804.   DSFXGARGLE_WAVE_SQUARE                      = 1;
  805.   DSFXGARGLE_RATEHZ_MIN                       = 1;
  806.   DSFXGARGLE_RATEHZ_MAX                       = 1000;
  807.  
  808.   DSFXCHORUS_WAVE_TRIANGLE                    = 0;
  809.   DSFXCHORUS_WAVE_SIN                         = 1;
  810.  
  811.   DSFXCHORUS_WETDRYMIX_MIN                    = 0.0;
  812.   DSFXCHORUS_WETDRYMIX_MAX                    = 100.0;
  813.   DSFXCHORUS_DEPTH_MIN                        = 0.0;
  814.   DSFXCHORUS_DEPTH_MAX                        = 100.0;
  815.   DSFXCHORUS_FEEDBACK_MIN                     = -99.0;
  816.   DSFXCHORUS_FEEDBACK_MAX                     = 99.0;
  817.   DSFXCHORUS_FREQUENCY_MIN                    = 0.0;
  818.   DSFXCHORUS_FREQUENCY_MAX                    = 10.0;
  819.   DSFXCHORUS_DELAY_MIN                        = 0.0;
  820.   DSFXCHORUS_DELAY_MAX                        = 20.0;
  821.   DSFXCHORUS_PHASE_MIN                        = 0;
  822.   DSFXCHORUS_PHASE_MAX                        = 4;
  823.  
  824.   DSFXCHORUS_PHASE_NEG_180                    = 0;
  825.   DSFXCHORUS_PHASE_NEG_90                     = 1;
  826.   DSFXCHORUS_PHASE_ZERO                       = 2;
  827.   DSFXCHORUS_PHASE_90                         = 3;
  828.   DSFXCHORUS_PHASE_180                        = 4;
  829.  
  830.   DSFXFLANGER_WAVE_TRIANGLE                   = 0;
  831.   DSFXFLANGER_WAVE_SIN                        = 1;
  832.  
  833.   DSFXFLANGER_WETDRYMIX_MIN                   = 0.0;
  834.   DSFXFLANGER_WETDRYMIX_MAX                   = 100.0;
  835.   DSFXFLANGER_FREQUENCY_MIN                   = 0.0;
  836.   DSFXFLANGER_FREQUENCY_MAX                   = 10.0;
  837.   DSFXFLANGER_DEPTH_MIN                       = 0.0;
  838.   DSFXFLANGER_DEPTH_MAX                       = 100.0;
  839.   DSFXFLANGER_PHASE_MIN                       = 0;
  840.   DSFXFLANGER_PHASE_MAX                       = 4;
  841.   DSFXFLANGER_FEEDBACK_MIN                    = -99.0;
  842.   DSFXFLANGER_FEEDBACK_MAX                    = 99.0;
  843.   DSFXFLANGER_DELAY_MIN                       = 0.0;
  844.   DSFXFLANGER_DELAY_MAX                       = 4.0;
  845.  
  846.   DSFXFLANGER_PHASE_NEG_180                   = 0;
  847.   DSFXFLANGER_PHASE_NEG_90                    = 1;
  848.   DSFXFLANGER_PHASE_ZERO                      = 2;
  849.   DSFXFLANGER_PHASE_90                        = 3;
  850.   DSFXFLANGER_PHASE_180                       = 4;
  851.  
  852.   DSFXECHO_WETDRYMIX_MIN                      = 0.0;
  853.   DSFXECHO_WETDRYMIX_MAX                      = 100.0;
  854.   DSFXECHO_FEEDBACK_MIN                       = 0.0;
  855.   DSFXECHO_FEEDBACK_MAX                       = 100.0;
  856.   DSFXECHO_LEFTDELAY_MIN                      = 1.0;
  857.   DSFXECHO_LEFTDELAY_MAX                      = 2000.0;
  858.   DSFXECHO_RIGHTDELAY_MIN                     = 1.0;
  859.   DSFXECHO_RIGHTDELAY_MAX                     = 2000.0;
  860.   DSFXECHO_PANDELAY_MIN                       = 0;
  861.   DSFXECHO_PANDELAY_MAX                       = 1;
  862.  
  863.   DSFXDISTORTION_GAIN_MIN                     = -60.0;
  864.   DSFXDISTORTION_GAIN_MAX                     = 0.0;
  865.   DSFXDISTORTION_EDGE_MIN                     = 0.0;
  866.   DSFXDISTORTION_EDGE_MAX                     = 100.0;
  867.   DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN    = 100.0;
  868.   DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX    = 8000.0;
  869.   DSFXDISTORTION_POSTEQBANDWIDTH_MIN          = 100.0;
  870.   DSFXDISTORTION_POSTEQBANDWIDTH_MAX          = 8000.0;
  871.   DSFXDISTORTION_PRELOWPASSCUTOFF_MIN         = 100.0;
  872.   DSFXDISTORTION_PRELOWPASSCUTOFF_MAX         = 8000.0;
  873.  
  874.   DSFXCOMPRESSOR_GAIN_MIN                     = -60.0;
  875.   DSFXCOMPRESSOR_GAIN_MAX                     = 60.0;
  876.   DSFXCOMPRESSOR_ATTACK_MIN                   = 0.01;
  877.   DSFXCOMPRESSOR_ATTACK_MAX                   = 500.0;
  878.   DSFXCOMPRESSOR_RELEASE_MIN                  = 50.0;
  879.   DSFXCOMPRESSOR_RELEASE_MAX                  = 3000.0;
  880.   DSFXCOMPRESSOR_THRESHOLD_MIN                = -60.0;
  881.   DSFXCOMPRESSOR_THRESHOLD_MAX                = 0.0;
  882.   DSFXCOMPRESSOR_RATIO_MIN                    = 1.0;
  883.   DSFXCOMPRESSOR_RATIO_MAX                    = 100.0;
  884.   DSFXCOMPRESSOR_PREDELAY_MIN                 = 0.0;
  885.   DSFXCOMPRESSOR_PREDELAY_MAX                 = 4.0;
  886.  
  887.   DSFXPARAMEQ_CENTER_MIN                      = 80.0;
  888.   DSFXPARAMEQ_CENTER_MAX                      = 16000.0;
  889.   DSFXPARAMEQ_BANDWIDTH_MIN                   = 1.0;
  890.   DSFXPARAMEQ_BANDWIDTH_MAX                   = 36.0;
  891.   DSFXPARAMEQ_GAIN_MIN                        = -15.0;
  892.   DSFXPARAMEQ_GAIN_MAX                        = 15.0;
  893.  
  894.   DSFX_I3DL2REVERB_ROOM_MIN                   = (-10000);
  895.   DSFX_I3DL2REVERB_ROOM_MAX                   = 0;
  896.   DSFX_I3DL2REVERB_ROOM_DEFAULT               = (-1000);
  897.  
  898.   DSFX_I3DL2REVERB_ROOMHF_MIN                 = (-10000);
  899.   DSFX_I3DL2REVERB_ROOMHF_MAX                 = 0;
  900.   DSFX_I3DL2REVERB_ROOMHF_DEFAULT             = (-100);
  901.  
  902.   DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN      = 0.0;
  903.   DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX      = 10.0;
  904.   DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT  = 0.0;
  905.  
  906.   DSFX_I3DL2REVERB_DECAYTIME_MIN              = 0.1;
  907.   DSFX_I3DL2REVERB_DECAYTIME_MAX              = 20.0;
  908.   DSFX_I3DL2REVERB_DECAYTIME_DEFAULT          = 1.49;
  909.  
  910.   DSFX_I3DL2REVERB_DECAYHFRATIO_MIN           = 0.1;
  911.   DSFX_I3DL2REVERB_DECAYHFRATIO_MAX           = 2.0;
  912.   DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT       = 0.83;
  913.  
  914.   DSFX_I3DL2REVERB_REFLECTIONS_MIN            = (-10000);
  915.   DSFX_I3DL2REVERB_REFLECTIONS_MAX            = 1000;
  916.   DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT        = (-2602);
  917.  
  918.   DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN       = 0.0;
  919.   DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX       = 0.3;
  920.   DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT   = 0.007;
  921.  
  922.   DSFX_I3DL2REVERB_REVERB_MIN                 = (-10000);
  923.   DSFX_I3DL2REVERB_REVERB_MAX                 = 2000;
  924.   DSFX_I3DL2REVERB_REVERB_DEFAULT             = (200);
  925.                                                     
  926.   DSFX_I3DL2REVERB_REVERBDELAY_MIN            = 0.0;
  927.   DSFX_I3DL2REVERB_REVERBDELAY_MAX            = 0.1;
  928.   DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT        = 0.011;
  929.                                                     
  930.   DSFX_I3DL2REVERB_DIFFUSION_MIN              = 0.0;
  931.   DSFX_I3DL2REVERB_DIFFUSION_MAX              = 100.0;
  932.   DSFX_I3DL2REVERB_DIFFUSION_DEFAULT          = 100.0;
  933.  
  934.   DSFX_I3DL2REVERB_DENSITY_MIN                = 0.0;
  935.   DSFX_I3DL2REVERB_DENSITY_MAX                = 100.0;
  936.   DSFX_I3DL2REVERB_DENSITY_DEFAULT            = 100.0;
  937.  
  938.   DSFX_I3DL2REVERB_HFREFERENCE_MIN            = 20.0;
  939.   DSFX_I3DL2REVERB_HFREFERENCE_MAX            = 20000.0;
  940.   DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT        = 5000.0;
  941.  
  942.   DSFX_I3DL2REVERB_QUALITY_MIN                = 0;
  943.   DSFX_I3DL2REVERB_QUALITY_MAX                = 3;
  944.   DSFX_I3DL2REVERB_QUALITY_DEFAULT            = 2;
  945.  
  946.   DSFX_WAVESREVERB_INGAIN_MIN                 = -96.0;
  947.   DSFX_WAVESREVERB_INGAIN_MAX                 = 0.0;
  948.   DSFX_WAVESREVERB_INGAIN_DEFAULT             = 0.0;
  949.   DSFX_WAVESREVERB_REVERBMIX_MIN              = -96.0;
  950.   DSFX_WAVESREVERB_REVERBMIX_MAX              = 0.0;
  951.   DSFX_WAVESREVERB_REVERBMIX_DEFAULT          = 0.0;
  952.   DSFX_WAVESREVERB_REVERBTIME_MIN             = 0.001;
  953.   DSFX_WAVESREVERB_REVERBTIME_MAX             = 3000.0;
  954.   DSFX_WAVESREVERB_REVERBTIME_DEFAULT         = 1000.0;
  955.   DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN        = 0.001;
  956.   DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX        = 0.999;
  957.   DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT    = 0.001;
  958.  
  959. //
  960. // GUID's for all the objects
  961. //
  962. type
  963.   IID_IDirectSound = IDirectSound;
  964.   IID_IDirectSoundBuffer = IDirectSoundBuffer;
  965.   IID_IDirectSound3DListener = IDirectSound3DListener;
  966.   IID_IDirectSound3DBuffer = IDirectSound3DBuffer;
  967.   IID_IDirectSoundCapture = IDirectSoundCapture;
  968.   IID_IDirectSoundCaptureBuffer = IDirectSoundCaptureBuffer;
  969.   IID_IDirectSoundNotify = IDirectSoundNotify;
  970.   IID_IKsPropertySet = IKsPropertySet;
  971.  
  972.   // DirectSound 8.0
  973.   IID_IDirectSound8 = IDirectSound8;
  974.   IID_IDirectSoundBuffer8 = IDirectSoundBuffer8;
  975.   IID_IDirectSound3DListener8 = IDirectSound3DListener8;
  976.   IID_IDirectSound3DBuffer8 = IDirectSound3DBuffer8;
  977.   IID_IDirectSoundCapture8 = IDirectSoundCapture8;
  978.   IID_IDirectSoundCaptureBuffer8 = IDirectSoundCaptureBuffer8;
  979.   IID_IDirectSoundNotify8 = IDirectSoundNotify8;
  980.   IID_IDirectSoundCaptureFXAec8 = IDirectSoundCaptureFXAec8;
  981.   IID_IDirectSoundCaptureFXNoiseSuppress8 = IDirectSoundCaptureFXNoiseSuppress8;
  982.   IID_IDirectSoundFullDuplex8 = IDirectSoundFullDuplex8;
  983.   IID_IDirectSoundFXGargle8 = IDirectSoundFXGargle8;
  984.   IID_IDirectSoundFXChorus8 = IDirectSoundFXChorus8;
  985.   IID_IDirectSoundFXFlanger8 = IDirectSoundFXFlanger8;
  986.   IID_IDirectSoundFXEcho8 = IDirectSoundFXEcho8;
  987.   IID_IDirectSoundFXDistortion8 = IDirectSoundFXDistortion8;
  988.   IID_IDirectSoundFXCompressor8 = IDirectSoundFXCompressor8;
  989.   IID_IDirectSoundFXParamEq8 = IDirectSoundFXParamEq8;
  990.   IID_IDirectSoundFXWavesReverb8 = IDirectSoundFXWavesReverb8;
  991.   IID_IDirectSoundFXI3DL2Reverb8 = IDirectSoundFXI3DL2Reverb8;
  992.  
  993. const
  994.   CLSID_DirectSound            : TGUID = '{47D4D946-62E8-11CF-93BC-444553540000}';
  995.   CLSID_DirectSound8           : TGUID = '{3901CC3F-84B5-4FA4-BA35-AA8172B8A09B}';
  996.   CLSID_DirectSoundCapture     : TGUID = '{B0210780-89CD-11D0-AF08-00A0C925CD16}';
  997.   CLSID_DirectSoundCapture8    : TGUID = '{E4BCAC13-7F99-4908-9A8E-74E3BF24B6E1}';
  998.   CLSID_DirectSoundFullDuplex  : TGUID = '{FEA4300C-7959-4147-B26A-2377B9E7A91D}';
  999.   DSDEVID_DefaultPlayback      : TGUID = '{DEF00000-9C6D-47ED-AAF1-4DDA8F2B5C03}';
  1000.   DSDEVID_DefaultCapture       : TGUID = '{DEF00001-9C6D-47ED-AAF1-4DDA8F2B5C03}';
  1001.   DSDEVID_DefaultVoicePlayback : TGUID = '{DEF00002-9C6D-47ED-AAF1-4DDA8F2B5C03}';
  1002.   DSDEVID_DefaultVoiceCapture  : TGUID = '{DEF00003-9C6D-47ED-AAF1-4DDA8F2B5C03}';
  1003.  
  1004. //
  1005. // Creation Routines
  1006. //
  1007. var
  1008.     DirectSoundCreate : function ( lpGuid: PGUID; out ppDS: IDirectSound;
  1009.         pUnkOuter: IUnknown) : HResult; stdcall;
  1010.  
  1011.     DirectSoundEnumerateW : function (lpDSEnumCallback: TDSEnumCallbackW;
  1012.         lpContext: Pointer) : HResult; stdcall;
  1013.     DirectSoundEnumerateA : function (lpDSEnumCallback: TDSEnumCallbackA;
  1014.         lpContext: Pointer) : HResult; stdcall;
  1015.     DirectSoundEnumerate : function (lpDSEnumCallback: TDSEnumCallback;
  1016.         lpContext: Pointer) : HResult; stdcall;
  1017.  
  1018.     DirectSoundCaptureCreate : function (lpGUID: PGUID;
  1019.         out lplpDSC: IDirectSoundCapture;
  1020.         pUnkOuter: IUnknown) : HResult; stdcall;
  1021.  
  1022.     DirectSoundCaptureEnumerateW : function (lpDSEnumCallback: TDSEnumCallbackW;
  1023.         lpContext: Pointer) : HResult; stdcall;
  1024.     DirectSoundCaptureEnumerateA : function (lpDSEnumCallback: TDSEnumCallbackA;
  1025.         lpContext: Pointer) : HResult; stdcall;
  1026.     DirectSoundCaptureEnumerate : function(lpDSEnumCallback: TDSEnumCallback;
  1027.         lpContext: Pointer) : HResult; stdcall;
  1028.  
  1029. // DirectX 8.0
  1030.     DirectSoundCreate8 : function( pcGuidDevice: PGUID; out ppDS8: IDirectSound8;
  1031.         pUnkOuter: IUnknown) : HResult; stdcall;
  1032.     DirectSoundCaptureCreate8 : function( pcGuidDevice: PGUID;
  1033.         out ppDSC8: IDirectSoundCapture8;
  1034.         pUnkOuter: IUnknown) : HResult; stdcall;
  1035.     DirectSoundFullDuplexCreate8 : function (pcGuidCaptureDevice, pcGuidRenderDevice: PGUID;
  1036.         const pcDSCBufferDesc: TDSCBufferDesc; const pcDSBufferDesc: TDSBufferDesc;
  1037.         hWnd: hWnd; dwLevel: DWORD;
  1038.         out ppDSFD: IDirectSoundFullDuplex8;
  1039.         out ppDSCBuffer8: IDirectSoundCaptureBuffer8;
  1040.         out ppDSBuffer8: IDirectSoundBuffer8; pUnkOuter: IUnknown): HResult; stdcall;
  1041.     GetDeviceID: function( pGuidSrc, pGuidDest: PGUID): HResult; stdcall;
  1042.  
  1043. //
  1044. // Return Values
  1045. //
  1046. const
  1047.   FLT_MIN = 1.175494351E-38;
  1048.   FLT_MAX = 3.402823466E+38;
  1049.  
  1050.   _FACDS = $878;
  1051.   MAKE_DSHRESULT_ = HResult($88780000);
  1052.  
  1053. // The function completed successfully
  1054.   DS_OK                          = S_OK;
  1055.  
  1056. // The call succeeded, but we had to substitute the 3D algorithm
  1057.   DS_NO_VIRTUALIZATION           = MAKE_DSHRESULT_ + 10;
  1058.  
  1059. // The call succeeded, but not all of the optional effects were obtained.
  1060.   DS_INCOMPLETE                  = MAKE_DSHRESULT_ + 20;
  1061.  
  1062. // The call failed because resources (such as a priority level)
  1063. // were already being used by another caller
  1064.   DSERR_ALLOCATED                 = MAKE_DSHRESULT_ + 10;
  1065.  
  1066. // The control (vol, pan, etc.) requested by the caller is not available
  1067.   DSERR_CONTROLUNAVAIL            = MAKE_DSHRESULT_ + 30;
  1068.  
  1069. // An invalid parameter was passed to the returning function
  1070.   DSERR_INVALIDPARAM              = E_INVALIDARG;
  1071.  
  1072. // This call is not valid for the current state of this object
  1073.   DSERR_INVALIDCALL               = MAKE_DSHRESULT_ + 50;
  1074.  
  1075. // An undetermined error occurred inside the DirectSound subsystem
  1076.   DSERR_GENERIC                   = E_FAIL;
  1077.  
  1078. // The caller does not have the priority level required for the function to
  1079. // succeed
  1080.   DSERR_PRIOLEVELNEEDED           = MAKE_DSHRESULT_ + 70;
  1081.  
  1082. // Not enough free memory is available to complete the operation
  1083.   DSERR_OUTOFMEMORY               = E_OUTOFMEMORY;
  1084.  
  1085. // The specified WAVE format is not supported
  1086.   DSERR_BADFORMAT                 = MAKE_DSHRESULT_ + 100;
  1087.  
  1088. // The function called is not supported at this time
  1089.   DSERR_UNSUPPORTED               = E_NOTIMPL;
  1090.  
  1091. // No sound driver is available for use
  1092.   DSERR_NODRIVER                  = MAKE_DSHRESULT_ + 120;
  1093.  
  1094. // This object is already initialized
  1095.   DSERR_ALREADYINITIALIZED        = MAKE_DSHRESULT_ + 130;
  1096.  
  1097. // This object does not support aggregation
  1098.   DSERR_NOAGGREGATION             = CLASS_E_NOAGGREGATION;
  1099.  
  1100. // The buffer memory has been lost, and must be restored
  1101.   DSERR_BUFFERLOST                = MAKE_DSHRESULT_ + 150;
  1102.  
  1103. // Another app has a higher priority level, preventing this call from
  1104. // succeeding
  1105.   DSERR_OTHERAPPHASPRIO           = MAKE_DSHRESULT_ + 160;
  1106.  
  1107. // This object has not been initialized
  1108.   DSERR_UNINITIALIZED             = MAKE_DSHRESULT_ + 170;
  1109.  
  1110. // The requested COM interface is not available
  1111.   DSERR_NOINTERFACE               = E_NOINTERFACE;
  1112.  
  1113. // Access is denied
  1114.   DSERR_ACCESSDENIED              = E_ACCESSDENIED;
  1115.  
  1116. // Tried to create a DSBCAPS_CTRLFX buffer shorter than DSBSIZE_FX_MIN milliseconds
  1117.   DSERR_BUFFERTOOSMALL            = MAKE_DSHRESULT_ + 180;
  1118.  
  1119. // Attempt to use DirectSound 8 functionality on an older DirectSound object
  1120.   DSERR_DS8_REQUIRED              = MAKE_DSHRESULT_ + 190;
  1121.  
  1122. // A circular loop of send effects was detected
  1123.   DSERR_SENDLOOP                  = MAKE_DSHRESULT_ + 200;
  1124.  
  1125. // The GUID specified in an audiopath file does not match a valid MIXIN buffer
  1126.   DSERR_BADSENDBUFFERGUID         = MAKE_DSHRESULT_ + 210;
  1127.  
  1128. // The object requested was not found (numerically equal to DMUS_E_NOT_FOUND)
  1129.   DSERR_OBJECTNOTFOUND            = MAKE_DSHRESULT_ + 4449;
  1130.  
  1131. //
  1132. // Flags
  1133. //
  1134.  
  1135.   DSCAPS_PRIMARYMONO            = $00000001;
  1136.   DSCAPS_PRIMARYSTEREO          = $00000002;
  1137.   DSCAPS_PRIMARY8BIT            = $00000004;
  1138.   DSCAPS_PRIMARY16BIT           = $00000008;
  1139.   DSCAPS_CONTINUOUSRATE         = $00000010;
  1140.   DSCAPS_EMULDRIVER             = $00000020;
  1141.   DSCAPS_CERTIFIED              = $00000040;
  1142.   DSCAPS_SECONDARYMONO          = $00000100;
  1143.   DSCAPS_SECONDARYSTEREO        = $00000200;
  1144.   DSCAPS_SECONDARY8BIT          = $00000400;
  1145.   DSCAPS_SECONDARY16BIT         = $00000800;
  1146.  
  1147.   DSSCL_NORMAL                  = $00000001;
  1148.   DSSCL_PRIORITY                = $00000002;
  1149.   DSSCL_EXCLUSIVE               = $00000003;
  1150.   DSSCL_WRITEPRIMARY            = $00000004;
  1151.  
  1152.   DSSPEAKER_HEADPHONE           = $00000001;
  1153.   DSSPEAKER_MONO                = $00000002;
  1154.   DSSPEAKER_QUAD                = $00000003;
  1155.   DSSPEAKER_STEREO              = $00000004;
  1156.   DSSPEAKER_SURROUND            = $00000005;
  1157.   DSSPEAKER_5POINT1             = $00000006;
  1158.  
  1159.   DSSPEAKER_GEOMETRY_MIN        = $00000005;  //   5 degrees
  1160.   DSSPEAKER_GEOMETRY_NARROW     = $0000000A;  //  10 degrees
  1161.   DSSPEAKER_GEOMETRY_WIDE       = $00000014;  //  20 degrees
  1162.   DSSPEAKER_GEOMETRY_MAX        = $000000B4;  // 180 degrees
  1163.  
  1164. function DSSPEAKER_COMBINED(c, g: variant) : DWORD;
  1165. function DSSPEAKER_CONFIG(a: variant) : byte;
  1166. function DSSPEAKER_GEOMETRY(a: variant) : byte;
  1167.  
  1168. const
  1169.   DSBCAPS_PRIMARYBUFFER         = $00000001;
  1170.   DSBCAPS_STATIC                = $00000002;
  1171.   DSBCAPS_LOCHARDWARE           = $00000004;
  1172.   DSBCAPS_LOCSOFTWARE           = $00000008;
  1173.   DSBCAPS_CTRL3D                = $00000010;
  1174.   DSBCAPS_CTRLFREQUENCY         = $00000020;
  1175.   DSBCAPS_CTRLPAN               = $00000040;
  1176.   DSBCAPS_CTRLVOLUME            = $00000080;
  1177.   DSBCAPS_CTRLPOSITIONNOTIFY    = $00000100;
  1178.   DSBCAPS_CTRLFX                = $00000200;
  1179.   DSBCAPS_STICKYFOCUS           = $00004000;
  1180.   DSBCAPS_GLOBALFOCUS           = $00008000;
  1181.   DSBCAPS_GETCURRENTPOSITION2   = $00010000;
  1182.   DSBCAPS_MUTE3DATMAXDISTANCE   = $00020000;
  1183.   DSBCAPS_LOCDEFER              = $00040000;
  1184.   DSBCAPS_CTRLDEFAULT           = $000000E0;
  1185.   DSBCAPS_CTRLALL               = $000001F0;
  1186.  
  1187.  
  1188.   DSBPLAY_LOOPING               = $00000001;
  1189.   DSBPLAY_LOCHARDWARE           = $00000002;
  1190.   DSBPLAY_LOCSOFTWARE           = $00000004;
  1191.   DSBPLAY_TERMINATEBY_TIME      = $00000008;
  1192.   DSBPLAY_TERMINATEBY_DISTANCE  = $000000010;
  1193.   DSBPLAY_TERMINATEBY_PRIORITY  = $000000020;
  1194.  
  1195.   DSBSTATUS_PLAYING             = $00000001;
  1196.   DSBSTATUS_BUFFERLOST          = $00000002;
  1197.   DSBSTATUS_LOOPING             = $00000004;
  1198.   DSBSTATUS_LOCHARDWARE         = $00000008;
  1199.   DSBSTATUS_LOCSOFTWARE         = $00000010;
  1200.   DSBSTATUS_TERMINATED          = $00000020;
  1201.  
  1202.   DSBLOCK_FROMWRITECURSOR       = $00000001;
  1203.   DSBLOCK_ENTIREBUFFER          = $00000002;
  1204.  
  1205.   DSBFREQUENCY_MIN              = 100;
  1206.   DSBFREQUENCY_MAX              = 100000;
  1207.   DSBFREQUENCY_ORIGINAL         = 0;
  1208.  
  1209.   DSBPAN_LEFT                   = -10000;
  1210.   DSBPAN_CENTER                 = 0;
  1211.   DSBPAN_RIGHT                  = 10000;
  1212.  
  1213.   DSBVOLUME_MIN                 = -10000;
  1214.   DSBVOLUME_MAX                 = 0;
  1215.  
  1216.   DSBSIZE_MIN                   = 4;
  1217.   DSBSIZE_MAX                   = $0FFFFFFF;
  1218.   DSBSIZE_FX_MIN                = 150;  // NOTE: Milliseconds, not bytes
  1219.  
  1220.   DS3DMODE_NORMAL               = $00000000;
  1221.   DS3DMODE_HEADRELATIVE         = $00000001;
  1222.   DS3DMODE_DISABLE              = $00000002;
  1223.  
  1224.   DS3D_IMMEDIATE                = $00000000;
  1225.   DS3D_DEFERRED                 = $00000001;
  1226.  
  1227.   DS3D_MINDISTANCEFACTOR        = FLT_MIN;
  1228.   DS3D_MAXDISTANCEFACTOR        = FLT_MAX;
  1229.   DS3D_DEFAULTDISTANCEFACTOR    = 1.0;
  1230.  
  1231.   DS3D_MINROLLOFFFACTOR         = 0.0;
  1232.   DS3D_MAXROLLOFFFACTOR         = 10.0;
  1233.   DS3D_DEFAULTROLLOFFFACTOR     = 1.0;
  1234.  
  1235.   DS3D_MINDOPPLERFACTOR         = 0.0;
  1236.   DS3D_MAXDOPPLERFACTOR         = 10.0;
  1237.   DS3D_DEFAULTDOPPLERFACTOR     = 1.0;
  1238.  
  1239.   DS3D_DEFAULTMINDISTANCE       = 1.0;
  1240.   DS3D_DEFAULTMAXDISTANCE       = 1000000000.0;
  1241.  
  1242.   DS3D_MINCONEANGLE             = 0;
  1243.   DS3D_MAXCONEANGLE             = 360;
  1244.   DS3D_DEFAULTCONEANGLE         = 360;
  1245.  
  1246.   DS3D_DEFAULTCONEOUTSIDEVOLUME = DSBVOLUME_MAX;
  1247.  
  1248. // IDirectSoundCapture attributes
  1249.  
  1250.   DSCCAPS_EMULDRIVER            = DSCAPS_EMULDRIVER;
  1251.   DSCCAPS_CERTIFIED             = DSCAPS_CERTIFIED;
  1252.  
  1253. // IDirectSoundCaptureBuffer attributes
  1254.  
  1255.   DSCBCAPS_WAVEMAPPED           = $80000000;
  1256.  
  1257. {$IFNDEF DIRECTX7}
  1258. {$IFNDEF DIRECTX6}
  1259.   DSCBCAPS_CTRLFX               = $00000200;
  1260. {$ENDIF}
  1261. {$ENDIF}
  1262.  
  1263.  
  1264.   DSCBLOCK_ENTIREBUFFER         = $00000001;
  1265.  
  1266.   DSCBSTATUS_CAPTURING          = $00000001;
  1267.   DSCBSTATUS_LOOPING            = $00000002;
  1268.  
  1269.   DSCBSTART_LOOPING             = $00000001;
  1270.  
  1271.   DSBPN_OFFSETSTOP              = $FFFFFFFF;
  1272.  
  1273.   DS_CERTIFIED                  = $00000000;
  1274.   DS_UNCERTIFIED                = $00000001;
  1275.  
  1276. // Dsound SYSTEM resource constants
  1277. // Matches the KSAUDIO_CPU_RESOURCES_xxx_HOST_CPU values defined
  1278. // in ksmedia.h.
  1279.   DS_SYSTEM_RESOURCES_NO_HOST_RESOURCES  = $00000000;
  1280.   DS_SYSTEM_RESOURCES_ALL_HOST_RESOURCES = $7FFFFFFF;
  1281.   DS_SYSTEM_RESOURCES_UNDEFINED          = $80000000;
  1282.  
  1283.   DSFX_LOCHARDWARE              = $00000001;
  1284.   DSFX_LOCSOFTWARE              = $00000002;
  1285.  
  1286.   DSCFX_LOCHARDWARE             = $00000001;
  1287.   DSCFX_LOCSOFTWARE             = $00000002;
  1288.  
  1289.   DSCFXR_LOCHARDWARE            = $00000010;
  1290.   DSCFXR_LOCSOFTWARE            = $00000020;
  1291.   DSCFXR_UNALLOCATED            = $00000040;
  1292.   DSCFXR_FAILED                 = $00000080;
  1293.   DSCFXR_UNKNOWN                = $00000100;
  1294.  
  1295.  
  1296. //
  1297. // I3DL2 Material Presets
  1298. //
  1299.  
  1300. {
  1301.   I3DL2_MATERIAL_PRESET_SINGLEWINDOW    = -2800,0.71;
  1302.   I3DL2_MATERIAL_PRESET_DOUBLEWINDOW    = -5000,0.40;
  1303.   I3DL2_MATERIAL_PRESET_THINDOOR        = -1800,0.66;
  1304.   I3DL2_MATERIAL_PRESET_THICKDOOR       = -4400,0.64;
  1305.   I3DL2_MATERIAL_PRESET_WOODWALL        = -4000,0.50;
  1306.   I3DL2_MATERIAL_PRESET_BRICKWALL       = -5000,0.60;
  1307.   I3DL2_MATERIAL_PRESET_STONEWALL       = -6000,0.68;
  1308.   I3DL2_MATERIAL_PRESET_CURTAIN         = -1200,0.15;
  1309. }
  1310. //
  1311. // I3DL2 Reverberation Presets Values
  1312. //
  1313.  
  1314.   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);
  1315.   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);
  1316.   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);
  1317.   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);
  1318.   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);
  1319.   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);
  1320.   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);
  1321.   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);
  1322.   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);
  1323.   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);
  1324.   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);
  1325.   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);
  1326.   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);
  1327.   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);
  1328.   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);
  1329.   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);
  1330.   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);
  1331.   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);
  1332.   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);
  1333.   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);
  1334.   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);
  1335.   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);
  1336.   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);
  1337.   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);
  1338.  
  1339. //
  1340. // Examples simulating 'musical' reverb presets
  1341. //
  1342. // Name       Decay time   Description
  1343. // Small Room    1.1s      A small size room with a length of 5m or so.
  1344. // Medium Room   1.3s      A medium size room with a length of 10m or so.
  1345. // Large Room    1.5s      A large size room suitable for live performances.
  1346. // Medium Hall   1.8s      A medium size concert hall.
  1347. // Large Hall    1.8s      A large size concert hall suitable for a full orchestra.
  1348. // Plate         1.3s      A plate reverb simulation.
  1349. //
  1350.  
  1351.   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);
  1352.   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);
  1353.   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);
  1354.   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);
  1355.   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);
  1356.   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);
  1357.  
  1358.  
  1359. //
  1360. // DirectSound3D Algorithms
  1361. //
  1362.  
  1363. const
  1364. // Default DirectSound3D algorithm {00000000-0000-0000-0000-000000000000}
  1365.   DS3DALG_DEFAULT                : TGUID = '{00000000-0000-0000-0000-000000000000}';
  1366.  
  1367. // No virtualization {C241333F-1C1B-11d2-94F5-00C04FC28ACA}
  1368.   DS3DALG_NO_VIRTUALIZATION      : TGUID = '{C241333F-1C1B-11d2-94F5-00C04FC28ACA}';
  1369.  
  1370. // High-quality HRTF algorithm {C2413340-1C1B-11d2-94F5-00C04FC28ACA}
  1371.   DS3DALG_HRTF_FULL              : TGUID = '{C2413340-1C1B-11d2-94F5-00C04FC28ACA}';
  1372.  
  1373. // Lower-quality HRTF algorithm {C2413342-1C1B-11d2-94F5-00C04FC28ACA}
  1374.   DS3DALG_HRTF_LIGHT             : TGUID = '{C2413342-1C1B-11d2-94F5-00C04FC28ACA}';
  1375.  
  1376. // Special GUID meaning "select all objects" for use in GetObjectInPath()
  1377.   GUID_All_Objects               : TGUID = '{aa114de5-c262-4169-a1c8-23d698cc73b5}';
  1378.  
  1379. //
  1380. // DirectSound Internal Effect Algorithms
  1381. //
  1382.   GUID_DSFX_STANDARD_GARGLE      : TGUID = '{DAFD8210-5711-4B91-9FE3-F75B7AE279BF}';
  1383.   GUID_DSFX_STANDARD_CHORUS      : TGUID = '{EFE6629C-81F7-4281-BD91-C9D604A95AF6}';
  1384.   GUID_DSFX_STANDARD_FLANGER     : TGUID = '{EFCA3D92-DFD8-4672-A603-7420894BAD98}';
  1385.   GUID_DSFX_STANDARD_ECHO        : TGUID = '{EF3E932C-D40B-4F51-8CCF-3F98F1B29D5D}';
  1386.   GUID_DSFX_STANDARD_DISTORTION  : TGUID = '{EF114C90-CD1D-484E-96E5-09CFAF912A21}';
  1387.   GUID_DSFX_STANDARD_COMPRESSOR  : TGUID = '{EF011F79-4000-406D-87AF-BFFB3FC39D57}';
  1388.   GUID_DSFX_STANDARD_PARAMEQ     : TGUID = '{120CED89-3BF4-4173-A132-3CB406CF3231}';
  1389.   GUID_DSFX_STANDARD_I3DL2REVERB : TGUID = '{EF985E71-D5C7-42D4-BA4D-2D073E2E96F4}';
  1390.   GUID_DSFX_WAVES_REVERB         : TGUID = '{87FC0268-9A55-4360-95AA-004A1D9DE26C}';
  1391.  
  1392. //
  1393. // DirectSound Capture Effect Algorithms
  1394. //
  1395.   GUID_DSCFX_CLASS_AEC           : TGUID = '{BF963D80-C559-11D0-8A2B-00A0C9255AC1}';
  1396.   GUID_DSCFX_MS_AEC              : TGUID = '{CDEBB919-379A-488a-8765-F53CFD36DE40}';
  1397.   GUID_DSCFX_SYSTEM_AEC          : TGUID = '{1C22C56D-9879-4f5b-A389-27996DDC2810}';
  1398.   GUID_DSCFX_CLASS_NS            : TGUID = '{E07F903F-62FD-4e60-8CDD-DEA7236665B5}';
  1399.   GUID_DSCFX_MS_NS               : TGUID = '{11C5C73B-66E9-4ba1-A0BA-E814C6EED92D}';
  1400.   GUID_DSCFX_SYSTEM_NS           : TGUID = '{5AB0882E-7274-4516-877D-4EEE99BA4FD0}';
  1401.  
  1402.  
  1403. (*==========================================================================;
  1404.  * Library : ksmedia.h
  1405.  ***************************************************************************)
  1406.  
  1407.   // Speaker Positions:
  1408.   SPEAKER_FRONT_LEFT              = $1;
  1409.   SPEAKER_FRONT_RIGHT             = $2;
  1410.   SPEAKER_FRONT_CENTER            = $4;
  1411.   SPEAKER_LOW_FREQUENCY           = $8;
  1412.   SPEAKER_BACK_LEFT               = $10;
  1413.   SPEAKER_BACK_RIGHT              = $20;
  1414.   SPEAKER_FRONT_LEFT_OF_CENTER    = $40;
  1415.   SPEAKER_FRONT_RIGHT_OF_CENTER   = $80;
  1416.   SPEAKER_BACK_CENTER             = $100;
  1417.   SPEAKER_SIDE_LEFT               = $200;
  1418.   SPEAKER_SIDE_RIGHT              = $400;
  1419.   SPEAKER_TOP_CENTER              = $800;
  1420.   SPEAKER_TOP_FRONT_LEFT          = $1000;
  1421.   SPEAKER_TOP_FRONT_CENTER        = $2000;
  1422.   SPEAKER_TOP_FRONT_RIGHT         = $4000;
  1423.   SPEAKER_TOP_BACK_LEFT           = $8000;
  1424.   SPEAKER_TOP_BACK_CENTER         = $10000;
  1425.   SPEAKER_TOP_BACK_RIGHT          = $20000;
  1426.  
  1427.   // Bit mask locations reserved for future use
  1428.   SPEAKER_RESERVED                = $7FFC0000;
  1429.  
  1430.   // Used to specify that any possible permutation of speaker configurations
  1431.   SPEAKER_ALL                     = $80000000;
  1432.  
  1433.   WAVE_FORMAT_EXTENSIBLE          = $FFFE;
  1434.  
  1435.   KSDATAFORMAT_SUBTYPE_ANALOG         : TGUID = '{6dba3190-67bd-11cf-a0f7-0020afd156e4}';
  1436.   KSDATAFORMAT_SUBTYPE_PCM            : TGUID = '{00000001-0000-0010-8000-00aa00389b71}';
  1437.   KSDATAFORMAT_SUBTYPE_IEEE_FLOAT     : TGUID = '{00000003-0000-0010-8000-00aa00389b71}';
  1438.   KSDATAFORMAT_SUBTYPE_DRM            : TGUID = '{00000009-0000-0010-8000-00aa00389b71}';
  1439.   KSDATAFORMAT_SUBTYPE_ALAW           : TGUID = '{00000006-0000-0010-8000-00aa00389b71}';
  1440.   KSDATAFORMAT_SUBTYPE_MULAW          : TGUID = '{00000007-0000-0010-8000-00aa00389b71}';
  1441.   KSDATAFORMAT_SUBTYPE_ADPCM          : TGUID = '{00000002-0000-0010-8000-00aa00389b71}';
  1442.   KSDATAFORMAT_SUBTYPE_MPEG           : TGUID = '{00000050-0000-0010-8000-00aa00389b71}';
  1443.   KSDATAFORMAT_SPECIFIER_VC_ID        : TGUID = '{AD98D184-AAC3-11D0-A41C-00A0C9223196}';
  1444.   KSDATAFORMAT_SPECIFIER_WAVEFORMATEX : TGUID = '{05589f81-c356-11ce-bf01-00aa0055595a}';
  1445.   KSDATAFORMAT_SPECIFIER_DSOUND       : TGUID = '{518590a2-a184-11d0-8522-00c04fd9baf3}';
  1446.  
  1447. type
  1448.   PWaveFormatExtensible = ^TWaveFormatExtensible;
  1449.   TWaveFormatExtensible = packed record
  1450.     Format: TWaveFormatEx;
  1451.     case byte of
  1452.       0: (wValidBitsPerSample : WORD;   // bits of precision
  1453.           dwChannelMask       : DWORD;  // which channels are present in stream
  1454.           SubFormat           : TGUID);
  1455.       1: (wSamplesPerBlock    : WORD);  // valid if wBitsPerSample = 0
  1456.       2: (wReserved           : WORD);  // If neither applies, set to zero.
  1457.   end;
  1458.  
  1459. function DSErrorString(Value: HResult) : string;
  1460.  
  1461. implementation
  1462.  
  1463. uses DXCommon;
  1464.  
  1465. function DSSPEAKER_COMBINED(c, g: variant) : DWORD;
  1466. begin
  1467.   Result := byte(c) or (byte(g) shl 16)
  1468. end;
  1469.  
  1470. function DSSPEAKER_CONFIG(a: variant) : byte;
  1471. begin
  1472.   Result := byte(a);
  1473. end;
  1474.  
  1475. function DSSPEAKER_GEOMETRY(a: variant) : byte;
  1476. begin
  1477.   Result := byte(a shr 16 and $FF);
  1478. end;
  1479.  
  1480. function DSErrorString(Value: HResult) : string;
  1481. begin
  1482.   case Value of
  1483.     HResult(DS_OK)                    : Result := 'The request completed successfully.';
  1484.     HResult(DSERR_ALLOCATED)          : Result := 'The request failed because resources, such as a priority level, were already in use by another caller.';
  1485.     HResult(DSERR_ALREADYINITIALIZED) : Result := 'The object is already initialized.';
  1486.     HResult(DSERR_ACCESSDENIED)       : Result := 'Access is denied.';
  1487.     HResult(DSERR_BADFORMAT)          : Result := 'The specified wave format is not supported.';
  1488.     HResult(DSERR_BADSENDBUFFERGUID)  : Result := 'The GUID specified in an audiopath file does not match a valid MIXIN buffer.';
  1489.     HResult(DSERR_BUFFERLOST)         : Result := 'The buffer memory has been lost and must be restored.';
  1490.     HResult(DSERR_BUFFERTOOSMALL)     : Result := 'Tried to create a DSBCAPS_CTRLFX buffer shorter than DSBSIZE_FX_MIN milliseconds.';
  1491.     HResult(DSERR_CONTROLUNAVAIL)     : Result := 'The control (volume, pan, and so forth) requested by the caller is not available.';
  1492.     HResult(DSERR_DS8_REQUIRED)       : Result := 'Attempt to use DirectSound 8 functionality on an older DirectSound object.';
  1493.     HResult(DSERR_GENERIC)            : Result := 'An undetermined error occurred inside the DirectSound subsystem.';
  1494.     HResult(DSERR_INVALIDCALL)        : Result := 'This function is not valid for the current state of this object.';
  1495.     HResult(DSERR_INVALIDPARAM)       : Result := 'An invalid parameter was passed to the returning function.';
  1496.     HResult(DSERR_NOAGGREGATION)      : Result := 'The object does not support aggregation.';
  1497.     HResult(DSERR_NODRIVER)           : Result := 'No sound driver is available for use.';
  1498.     HResult(DSERR_NOINTERFACE)        : Result := 'The requested COM interface is not available.';
  1499.     HResult(DSERR_OBJECTNOTFOUND)     : Result := 'The object requested was not found (numerically equal to DMUS_E_NOT_FOUND).';
  1500.     HResult(DSERR_OTHERAPPHASPRIO)    : Result := 'Another application has a higher priority level, preventing this call from succeeding.';
  1501.     HResult(DSERR_OUTOFMEMORY)        : Result := 'The DirectSound subsystem could not allocate sufficient memory to complete the caller┤s request.';
  1502.     HResult(DSERR_PRIOLEVELNEEDED)    : Result := 'The caller does not have the priority level required for the function to succeed.';
  1503.     HResult(DSERR_SENDLOOP)           : Result := 'A circular loop of send effects was detected.';
  1504.     HResult(DSERR_UNINITIALIZED)      : Result := 'The IDirectSound::Initialize method has not been called or has not been called successfully before other methods were called.';
  1505.     HResult(DSERR_UNSUPPORTED)        : Result := 'The function called is not supported at this time.';
  1506.     else                                Result := UnrecognizedError;
  1507.   end;
  1508. end;
  1509.  
  1510. initialization
  1511. begin
  1512.   if not IsNTandDelphiRunning then
  1513.   begin
  1514.     DSoundDLL := LoadLibrary('DSound.dll');
  1515.     DirectSoundCreate := GetProcAddress(DSoundDLL,'DirectSoundCreate');
  1516.     DirectSoundCreate8 := GetProcAddress(DSoundDLL,'DirectSoundCreate8');
  1517.     DirectSoundFullDuplexCreate8 := GetProcAddress(DSoundDLL,'DirectSoundFullDuplexCreate8');
  1518.     GetDeviceID := GetProcAddress(DSoundDLL,'GetDeviceID');
  1519.  
  1520.     DirectSoundEnumerateW := GetProcAddress(DSoundDLL,'DirectSoundEnumerateW');
  1521.     DirectSoundEnumerateA := GetProcAddress(DSoundDLL,'DirectSoundEnumerateA');
  1522.   {$IFDEF UNICODE}
  1523.     DirectSoundEnumerate := DirectSoundEnumerateW;
  1524.   {$ELSE}
  1525.     DirectSoundEnumerate := DirectSoundEnumerateA;
  1526.   {$ENDIF}
  1527.  
  1528.     DirectSoundCaptureCreate := GetProcAddress(DSoundDLL,'DirectSoundCaptureCreate');
  1529.     DirectSoundCaptureCreate8 := GetProcAddress(DSoundDLL,'DirectSoundCaptureCreate8');
  1530.  
  1531.     DirectSoundCaptureEnumerateW := GetProcAddress(DSoundDLL,'DirectSoundCaptureEnumerateW');
  1532.     DirectSoundCaptureEnumerateA := GetProcAddress(DSoundDLL,'DirectSoundCaptureEnumerateA');
  1533.   {$IFDEF UNICODE}
  1534.     DirectSoundCaptureEnumerate := DirectSoundCaptureEnumerateW;
  1535.   {$ELSE}
  1536.     DirectSoundCaptureEnumerate := DirectSoundCaptureEnumerateA;
  1537.   {$ENDIF}
  1538.   end;
  1539. end;
  1540.  
  1541. finalization
  1542. begin
  1543.   if DSoundDLL <> 0 then FreeLibrary(DSoundDLL);
  1544. end;
  1545.  
  1546. end.
  1547.