aboutsummaryrefslogtreecommitdiffstats
path: root/Game/Code/lib/DSPack/DirectX9/DirectSound.pas
diff options
context:
space:
mode:
authorbrunzelchen <brunzelchen@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-10-05 18:28:42 +0000
committerbrunzelchen <brunzelchen@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-10-05 18:28:42 +0000
commit65ddad359ed3b9b739215ec89a7645455ae10dce (patch)
tree7fdc703f290b37e68ce0e6a2c56d5bdd2f7ee07b /Game/Code/lib/DSPack/DirectX9/DirectSound.pas
parentdbe444f87b85da27a37f38e80bfd540178b8dde0 (diff)
downloadusdx-65ddad359ed3b9b739215ec89a7645455ae10dce.tar.gz
usdx-65ddad359ed3b9b739215ec89a7645455ae10dce.tar.xz
usdx-65ddad359ed3b9b739215ec89a7645455ae10dce.zip
- added webcam support
- faster program start - faster sorting (mergesort) - sync lyrics to music - some new backgrounds and credits graphics (thx to MezzoX) - own thread for video decoding - finished 6-Player-on-one-screen-mode - changqed player-colors - fixed some bugs... git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/1.0.1 Challenge MOD@2637 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'Game/Code/lib/DSPack/DirectX9/DirectSound.pas')
-rw-r--r--Game/Code/lib/DSPack/DirectX9/DirectSound.pas2427
1 files changed, 2427 insertions, 0 deletions
diff --git a/Game/Code/lib/DSPack/DirectX9/DirectSound.pas b/Game/Code/lib/DSPack/DirectX9/DirectSound.pas
new file mode 100644
index 00000000..f89aaafc
--- /dev/null
+++ b/Game/Code/lib/DSPack/DirectX9/DirectSound.pas
@@ -0,0 +1,2427 @@
+{******************************************************************************}
+{* *}
+{* Copyright (C) Microsoft Corporation. All Rights Reserved. *}
+{* *}
+{* Files: dsound.h *}
+{* Content: DirectSound include file *}
+{* *}
+{* DirectX 9.0 Delphi adaptation by Alexey Barkovoy *}
+{* E-Mail: clootie@reactor.ru *}
+{* *}
+{* Modified: 27-Apr-2003 *}
+{* *}
+{* Compatible with : *}
+{* DirectX 7.0 Object Pascal adaptation by *}
+{* Erik Unger, e-Mail: DelphiDirectX@next-reality.com *}
+{* *}
+{* Latest version can be downloaded from: *}
+{* http://clootie.narod.ru/delphi *}
+{* *}
+{******************************************************************************}
+{ }
+{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
+{ }
+{ The contents of this file are used with permission, subject to the Mozilla }
+{ Public License Version 1.1 (the "License"); you may not use this file except }
+{ in compliance with the License. You may obtain a copy of the License at }
+{ http://www.mozilla.org/MPL/MPL-1.1.html }
+{ }
+{ Software distributed under the License is distributed on an "AS IS" basis, }
+{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
+{ the specific language governing rights and limitations under the License. }
+{ }
+{ Alternatively, the contents of this file may be used under the terms of the }
+{ GNU Lesser General Public License (the "LGPL License"), in which case the }
+{ provisions of the LGPL License are applicable instead of those above. }
+{ If you wish to allow use of your version of this file only under the terms }
+{ of the LGPL License and not to allow others to use your version of this file }
+{ under the MPL, indicate your decision by deleting the provisions above and }
+{ replace them with the notice and other provisions required by the LGPL }
+{ License. If you do not delete the provisions above, a recipient may use }
+{ your version of this file under either the MPL or the LGPL License. }
+{ }
+{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
+{ }
+{******************************************************************************}
+
+unit DirectSound;
+
+interface
+
+uses
+ Windows, MMSystem, DXTypes;
+
+(*==========================================================================;
+ *
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *
+ * File: dsound.h
+ * Content: DirectSound include file
+ *
+ **************************************************************************)
+
+{$I DirectX.inc}
+
+////////////////////////////////////////////////////////////////////////
+// Global level dynamic loading support
+{$IFDEF DYNAMIC_LINK_ALL}
+ {$DEFINE DIRECTSOUND_DYNAMIC_LINK}
+{$ENDIF}
+{$IFDEF DYNAMIC_LINK_EXPLICIT_ALL}
+ {$DEFINE DIRECTSOUND_DYNAMIC_LINK_EXPLICIT}
+{$ENDIF}
+
+// Remove "dots" below to force some kind of dynamic linking
+{.$DEFINE DIRECTSOUND_DYNAMIC_LINK}
+{.$DEFINE DIRECTSOUND_DYNAMIC_LINK_EXPLICIT}
+
+////////////////////////////////////////////////////////////////////////
+// Assume for what DirectSound version we will compile headers
+{$IFDEF DIRECTX7}
+ {$DEFINE DIRECTSOUND_VERSION_7}
+{$ENDIF}
+{$IFDEF DIRECTX8}
+ {$DEFINE DIRECTSOUND_VERSION_8}
+{$ENDIF}
+{$IFDEF DIRECTX9}
+ {$DEFINE DIRECTSOUND_VERSION_9}
+{$ENDIF}
+
+{$IFNDEF DIRECTSOUND_VERSION_9}
+ {$IFNDEF DIRECTSOUND_VERSION_8}
+ {$IFNDEF DIRECTSOUND_VERSION_7}
+// Compiling for DirectSound9 by default
+ {$DEFINE DIRECTSOUND_VERSION_9}
+ {$ENDIF}
+ {$ENDIF}
+{$ENDIF}
+
+////////////////////////////////////////////////////////////////////////
+// Emit conditionals to C++Builder compiler
+{$IFDEF DIRECTSOUND_VERSION_7}
+ {$HPPEMIT '#define DIRECTSOUND_VERSION 0x0700'}
+{$ENDIF}
+{$IFDEF DIRECTSOUND_VERSION_8}
+ {$HPPEMIT '#define DIRECTSOUND_VERSION 0x0800'}
+{$ENDIF}
+{$IFDEF DIRECTSOUND_VERSION_9}
+ {$HPPEMIT '#define DIRECTSOUND_VERSION 0x0900'}
+{$ENDIF}
+
+{$NOINCLUDE DXTypes}
+(*$HPPEMIT '#include "dsound.h"' *)
+
+
+////////////////////////////////////////////////////////////////////////
+// Define symbols for '<=' comparision
+{$IFDEF DIRECTSOUND_VERSION_9}
+ {$DEFINE DIRECTSOUND_VERSION_8}
+{$ENDIF}
+{$IFDEF DIRECTSOUND_VERSION_8}
+ {$DEFINE DIRECTSOUND_VERSION_7}
+{$ENDIF}
+
+{ Type definitions shared with Direct3D }
+
+type
+ D3DVALUE = DXTypes.D3DVALUE;
+ {$EXTERNALSYM D3DVALUE}
+ TD3DValue = DXTypes.TD3DValue;
+ {$NODEFINE TD3DValue}
+ PD3DValue = DXTypes.PD3DValue;
+ {$NODEFINE PD3DValue}
+
+ D3DCOLOR = DXTypes.D3DCOLOR;
+ {$EXTERNALSYM D3DCOLOR}
+ TD3DColor = DXTypes.TD3DColor;
+ {$NODEFINE TD3DColor}
+
+ _D3DVECTOR = DXTypes._D3DVECTOR;
+ {$EXTERNALSYM _D3DVECTOR}
+ D3DVECTOR = DXTypes.D3DVECTOR;
+ {$EXTERNALSYM D3DVECTOR}
+ TD3DVector = DXTypes.TD3DVector;
+ {$NODEFINE TD3DVector}
+ PD3DVector = DXTypes.PD3DVector;
+ {$NODEFINE PD3DVector}
+
+{$HPPEMIT ''}
+{$HPPEMIT '#ifndef DX_SHARED_DEFINES_BCB'}
+{$HPPEMIT ''}
+{$HPPEMIT 'typedef D3DVALUE TD3DValue;'}
+{$HPPEMIT 'typedef D3DVALUE *PD3DValue;'}
+{$HPPEMIT ''}
+{$HPPEMIT '#ifndef D3DCOLOR_DEFINED_BCB'}
+{$HPPEMIT 'typedef D3DCOLOR TD3DColor;'}
+{$HPPEMIT '#define D3DCOLOR_DEFINED_BCB'}
+{$HPPEMIT '#endif'}
+{$HPPEMIT ''}
+{$HPPEMIT '#ifndef D3DVECTOR_DEFINED_BCB'}
+{$HPPEMIT 'typedef _D3DVECTOR TD3DVector;'}
+{$HPPEMIT 'typedef _D3DVECTOR *PD3DVector;'}
+{$HPPEMIT '#define D3DVECTOR_DEFINED_BCB'}
+{$HPPEMIT '#endif'}
+{$HPPEMIT ''}
+{$HPPEMIT '#define DX_SHARED_DEFINES_BCB'}
+{$HPPEMIT '#endif // DX_SHARED_DEFINES_BCB'}
+{$HPPEMIT ''}
+
+const
+ _FACDS = $878; { DirectSound's facility code }
+ {$EXTERNALSYM _FACDS}
+
+// #define MAKE_DSHRESULT(code) MAKE_HRESULT(1, _FACDS, code)
+function MAKE_DSHRESULT(Code: DWord): DWord;
+{$EXTERNALSYM MAKE_DSHRESULT}
+
+const
+ MAKE_DSHRESULT_R = (1 shl 31) or (_FACDS shl 16);
+
+const
+ // DirectSound Component GUID {47D4D946-62E8-11CF-93BC-444553540000}
+ CLSID_DirectSound: TGUID = '{47d4d946-62e8-11cf-93bc-444553540000}';
+ {$EXTERNALSYM CLSID_DirectSound}
+
+ // DirectSound 8.0 Component GUID {3901CC3F-84B5-4FA4-BA35-AA8172B8A09B}
+ CLSID_DirectSound8: TGUID = '{3901cc3f-84b5-4fa4-ba35-aa8172b8a09b}';
+ {$EXTERNALSYM CLSID_DirectSound8}
+
+ // DirectSound Capture Component GUID {B0210780-89CD-11D0-AF08-00A0C925CD16}
+ CLSID_DirectSoundCapture: TGUID = '{b0210780-89cd-11d0-af08-00a0c925cd16}';
+ {$EXTERNALSYM CLSID_DirectSoundCapture}
+
+ // DirectSound 8.0 Capture Component GUID {E4BCAC13-7F99-4908-9A8E-74E3BF24B6E1}
+ CLSID_DirectSoundCapture8: TGUID = '{e4bcac13-7f99-4908-9a8e-74e3bf24b6e1}';
+ {$EXTERNALSYM CLSID_DirectSoundCapture8}
+
+ // DirectSound Full Duplex Component GUID {FEA4300C-7959-4147-B26A-2377B9E7A91D}
+ CLSID_DirectSoundFullDuplex: TGUID = '{fea4300c-7959-4147-b26a-2377b9e7a91d}';
+ {$EXTERNALSYM CLSID_DirectSoundFullDuplex}
+
+
+ // DirectSound default playback device GUID {DEF00000-9C6D-47ED-AAF1-4DDA8F2B5C03}
+ DSDEVID_DefaultPlayback: TGUID = '{def00000-9c6d-47ed-aaf1-4dda8f2b5c03}';
+ {$EXTERNALSYM DSDEVID_DefaultPlayback}
+
+ // DirectSound default capture device GUID {DEF00001-9C6D-47ED-AAF1-4DDA8F2B5C03}
+ DSDEVID_DefaultCapture: TGUID = '{def00001-9c6d-47ed-aaf1-4dda8f2b5c03}';
+ {$EXTERNALSYM DSDEVID_DefaultCapture}
+
+ // DirectSound default device for voice playback {DEF00002-9C6D-47ED-AAF1-4DDA8F2B5C03}
+ DSDEVID_DefaultVoicePlayback: TGUID = '{def00002-9c6d-47ed-aaf1-4dda8f2b5c03}';
+ {$EXTERNALSYM DSDEVID_DefaultVoicePlayback}
+
+ // DirectSound default device for voice capture {DEF00003-9C6D-47ED-AAF1-4DDA8F2B5C03}
+ DSDEVID_DefaultVoiceCapture: TGUID = '{def00003-9c6d-47ed-aaf1-4dda8f2b5c03}';
+ {$EXTERNALSYM DSDEVID_DefaultVoiceCapture}
+
+
+//
+// Structures
+//
+
+type
+ PDSCaps = ^TDSCaps;
+ _DSCAPS = packed record
+ dwSize : DWORD;
+ dwFlags : DWORD;
+ dwMinSecondarySampleRate : DWORD;
+ dwMaxSecondarySampleRate : DWORD;
+ dwPrimaryBuffers : DWORD;
+ dwMaxHwMixingAllBuffers : DWORD;
+ dwMaxHwMixingStaticBuffers : DWORD;
+ dwMaxHwMixingStreamingBuffers : DWORD;
+ dwFreeHwMixingAllBuffers : DWORD;
+ dwFreeHwMixingStaticBuffers : DWORD;
+ dwFreeHwMixingStreamingBuffers : DWORD;
+ dwMaxHw3DAllBuffers : DWORD;
+ dwMaxHw3DStaticBuffers : DWORD;
+ dwMaxHw3DStreamingBuffers : DWORD;
+ dwFreeHw3DAllBuffers : DWORD;
+ dwFreeHw3DStaticBuffers : DWORD;
+ dwFreeHw3DStreamingBuffers : DWORD;
+ dwTotalHwMemBytes : DWORD;
+ dwFreeHwMemBytes : DWORD;
+ dwMaxContigFreeHwMemBytes : DWORD;
+ dwUnlockTransferRateHwBuffers : DWORD;
+ dwPlayCpuOverheadSwBuffers : DWORD;
+ dwReserved1 : DWORD;
+ dwReserved2 : DWORD;
+ end;
+ {$EXTERNALSYM _DSCAPS}
+ DSCAPS = _DSCAPS;
+ {$EXTERNALSYM DSCAPS}
+ TDSCaps = _DSCAPS;
+
+ PDSBcaps = ^TDSBcaps;
+ _DSBCAPS = packed record
+ dwSize : DWORD;
+ dwFlags : DWORD;
+ dwBufferBytes : DWORD;
+ dwUnlockTransferRate : DWORD;
+ dwPlayCpuOverhead : DWORD;
+ end;
+ {$EXTERNALSYM _DSBCAPS}
+ DSBCAPS = _DSBCAPS;
+ {$EXTERNALSYM DSBCAPS}
+ TDSBcaps = _DSBCAPS;
+
+{$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
+ {$IFDEF WIN64}
+ DWORD_PTR = Int64;
+ {$ELSE}
+ DWORD_PTR = DWORD;
+ {$ENDIF}
+ {$NODEFINE DWORD_PTR}
+
+ PDSEffectDesc = ^TDSEffectDesc;
+ _DSEFFECTDESC = packed record
+ dwSize : DWORD;
+ dwFlags : DWORD;
+ guidDSFXClass : TGUID;
+ dwReserved1 : DWORD_PTR;
+ dwReserved2 : DWORD_PTR;
+ end;
+ {$EXTERNALSYM _DSEFFECTDESC}
+ DSEFFECTDESC = _DSEFFECTDESC;
+ {$EXTERNALSYM DSEFFECTDESC}
+ TDSEffectDesc = _DSEFFECTDESC;
+
+const
+ DSFX_LOCHARDWARE = $00000001;
+ {$EXTERNALSYM DSFX_LOCHARDWARE}
+ DSFX_LOCSOFTWARE = $00000002;
+ {$EXTERNALSYM DSFX_LOCSOFTWARE}
+
+ DSFXR_PRESENT = 0;
+ {$EXTERNALSYM DSFXR_PRESENT}
+ DSFXR_LOCHARDWARE = 1;
+ {$EXTERNALSYM DSFXR_LOCHARDWARE}
+ DSFXR_LOCSOFTWARE = 2;
+ {$EXTERNALSYM DSFXR_LOCSOFTWARE}
+ DSFXR_UNALLOCATED = 3;
+ {$EXTERNALSYM DSFXR_UNALLOCATED}
+ DSFXR_FAILED = 4;
+ {$EXTERNALSYM DSFXR_FAILED}
+ DSFXR_UNKNOWN = 5;
+ {$EXTERNALSYM DSFXR_UNKNOWN}
+ DSFXR_SENDLOOP = 6;
+ {$EXTERNALSYM DSFXR_SENDLOOP}
+
+type
+ PDSCEffectDesc = ^TDSCEffectDesc;
+ _DSCEFFECTDESC = packed record
+ dwSize: DWORD;
+ dwFlags: DWORD;
+ guidDSCFXClass: TGUID;
+ guidDSCFXInstance: TGUID;
+ dwReserved1: DWORD;
+ dwReserved2: DWORD;
+ end;
+ {$EXTERNALSYM _DSCEFFECTDESC}
+ DSCEFFECTDESC = _DSCEFFECTDESC;
+ {$EXTERNALSYM DSCEFFECTDESC}
+ TDSCEffectDesc = _DSCEFFECTDESC;
+
+const
+ DSCFX_LOCHARDWARE = $00000001;
+ {$EXTERNALSYM DSCFX_LOCHARDWARE}
+ DSCFX_LOCSOFTWARE = $00000002;
+ {$EXTERNALSYM DSCFX_LOCSOFTWARE}
+
+ DSCFXR_LOCHARDWARE = $00000010;
+ {$EXTERNALSYM DSCFXR_LOCHARDWARE}
+ DSCFXR_LOCSOFTWARE = $00000020;
+ {$EXTERNALSYM DSCFXR_LOCSOFTWARE}
+
+{$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
+
+type
+ PDSBufferDesc = ^TDSBufferDesc;
+ _DSBUFFERDESC = packed record
+ dwSize: DWORD;
+ dwFlags: DWORD;
+ dwBufferBytes: DWORD;
+ dwReserved: DWORD;
+ lpwfxFormat: PWaveFormatEx;
+{$IFDEF DIRECTSOUND_VERSION_7} // #if DIRECTSOUND_VERSION >= 0x0700
+ guid3DAlgorithm: TGUID;
+{$ENDIF} // DIRECTSOUND_VERSION >= 0x0700
+ end;
+ {$EXTERNALSYM _DSBUFFERDESC}
+ DSBUFFERDESC = _DSBUFFERDESC;
+ {$EXTERNALSYM DSBUFFERDESC}
+ TDSBufferDesc = _DSBUFFERDESC;
+
+// Older version of this structure:
+
+ PDSBufferDesc1 = ^TDSBufferDesc1;
+ _DSBUFFERDESC1 = packed record
+ dwSize: DWORD;
+ dwFlags: DWORD;
+ dwBufferBytes: DWORD;
+ dwReserved: DWORD;
+ lpwfxFormat: PWaveFormatEx;
+ end;
+ {$EXTERNALSYM _DSBUFFERDESC1}
+ DSBUFFERDESC1 = _DSBUFFERDESC1;
+ {$EXTERNALSYM DSBUFFERDESC1}
+ TDSBufferDesc1 = _DSBUFFERDESC1;
+
+ PDS3DBuffer = ^TDS3DBuffer;
+ _DS3DBUFFER = packed record
+ dwSize: DWORD;
+ vPosition: TD3DVector;
+ vVelocity: TD3DVector;
+ dwInsideConeAngle: DWORD;
+ dwOutsideConeAngle: DWORD;
+ vConeOrientation: TD3DVector;
+ lConeOutsideVolume: Longint;
+ flMinDistance: TD3DValue;
+ flMaxDistance: TD3DValue;
+ dwMode: DWORD;
+ end;
+ {$EXTERNALSYM _DS3DBUFFER}
+ DS3DBUFFER = _DS3DBUFFER;
+ {$EXTERNALSYM DS3DBUFFER}
+ TDS3DBuffer = _DS3DBUFFER;
+
+ PDS3DListener = ^TDS3DListener;
+ _DS3DLISTENER = packed record
+ dwSize: DWORD;
+ vPosition: TD3DVector;
+ vVelocity: TD3DVector;
+ vOrientFront: TD3DVector;
+ vOrientTop: TD3DVector;
+ flDistanceFactor: TD3DValue;
+ flRolloffFactor: TD3DValue;
+ flDopplerFactor: TD3DValue;
+ end;
+ {$EXTERNALSYM _DS3DLISTENER}
+ DS3DLISTENER = _DS3DLISTENER;
+ {$EXTERNALSYM DS3DLISTENER}
+ TDS3DListener = _DS3DLISTENER;
+
+ PDSCcaps = ^TDSCcaps;
+ _DSCCAPS = packed record
+ dwSize: DWORD;
+ dwFlags: DWORD;
+ dwFormats: DWORD;
+ dwChannels: DWORD;
+ end;
+ {$EXTERNALSYM _DSCCAPS}
+ DSCCAPS = _DSCCAPS;
+ {$EXTERNALSYM DSCCAPS}
+ TDSCcaps = _DSCCAPS;
+
+ PDSCBufferDesc1 = ^TDSCBufferDesc1;
+ _DSCBUFFERDESC1 = packed record
+ dwSize: DWORD;
+ dwFlags: DWORD;
+ dwBufferBytes: DWORD;
+ dwReserved: DWORD;
+ lpwfxFormat: PWaveFormatEx;
+ end;
+ {$EXTERNALSYM _DSCBUFFERDESC1}
+ DSCBUFFERDESC1 = _DSCBUFFERDESC1;
+ {$EXTERNALSYM DSCBUFFERDESC1}
+ TDSCBufferDesc1 = _DSCBUFFERDESC1;
+
+ PDSCBufferDesc = ^TDSCBufferDesc;
+ _DSCBUFFERDESC = packed record
+ dwSize: DWORD;
+ dwFlags: DWORD;
+ dwBufferBytes: DWORD;
+ dwReserved: DWORD;
+ lpwfxFormat: PWaveFormatEx;
+{$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
+ dwFXCount: DWORD;
+ lpDSCFXDesc: PDSCEffectDesc;
+{$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
+ end;
+ {$EXTERNALSYM _DSCBUFFERDESC}
+ DSCBUFFERDESC = _DSCBUFFERDESC;
+ {$EXTERNALSYM DSCBUFFERDESC}
+ TDSCBufferDesc = _DSCBUFFERDESC;
+
+ PDSCBCaps = ^TDSCBCaps;
+ _DSCBCAPS = packed record
+ dwSize: DWORD;
+ dwFlags: DWORD;
+ dwBufferBytes: DWORD;
+ dwReserved: DWORD;
+ end;
+ {$EXTERNALSYM _DSCBCAPS}
+ DSCBCAPS = _DSCBCAPS;
+ {$EXTERNALSYM DSCBCAPS}
+ TDSCBCaps = _DSCBCAPS;
+
+ PDSBPositionNotify = ^TDSBPositionNotify;
+ _DSBPOSITIONNOTIFY = packed record
+ dwOffset: DWORD;
+ hEventNotify: THandle;
+ end;
+ {$EXTERNALSYM _DSBPOSITIONNOTIFY}
+ DSBPOSITIONNOTIFY = _DSBPOSITIONNOTIFY;
+ {$EXTERNALSYM DSBPOSITIONNOTIFY}
+ TDSBPositionNotify = _DSBPOSITIONNOTIFY;
+
+
+type
+ PReferenceTime = ^TReferenceTime;
+ REFERENCE_TIME = LONGLONG;
+ {$EXTERNALSYM REFERENCE_TIME}
+ TReferenceTime = REFERENCE_TIME;
+
+type
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IReferenceClock);'}
+ {$EXTERNALSYM IReferenceClock}
+ IReferenceClock = interface(IUnknown)
+ ['{56a86897-0ad4-11ce-b03a-0020af0ba770}']
+ // IReferenceClock methods
+ function GetTime(out pTime: TReferenceTime): HResult; stdcall;
+ function AdviseTime(rtBaseTime, rtStreamTime: TReferenceTime; hEvent: THandle; out pdwAdviseCookie: DWORD): HResult; stdcall;
+ function AdvisePeriodic(const rtStartTime, rtPeriodTime: TReferenceTime; hSemaphore: THandle; out pdwAdviseCookie: DWORD): HResult; stdcall;
+ function Unadvise(dwAdviseCookie: DWORD): HResult; stdcall;
+ end;
+
+ IID_IReferenceClock = IReferenceClock;
+ {$EXTERNALSYM IID_IReferenceClock}
+
+
+ IDirectSoundBuffer = interface;
+
+ //
+ // IDirectSound
+ //
+
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSound);'}
+ {$EXTERNALSYM IDirectSound}
+ IDirectSound = interface(IUnknown)
+ ['{279AFA83-4981-11CE-A521-0020AF0BE560}']
+ // IDirectSound methods
+ function CreateSoundBuffer(const pcDSBufferDesc: TDSBufferDesc; out ppDSBuffer: IDirectSoundBuffer; pUnkOuter: IUnknown): HResult; stdcall;
+ function GetCaps(out pDSCaps: TDSCaps): HResult; stdcall;
+ function DuplicateSoundBuffer(pDSBufferOriginal: IDirectSoundBuffer; out ppDSBufferDuplicate: IDirectSoundBuffer): HResult; stdcall;
+ function SetCooperativeLevel(hwnd: HWND; dwLevel: DWORD): HResult; stdcall;
+ function Compact: HResult; stdcall;
+ function GetSpeakerConfig(out pdwSpeakerConfig: DWORD): HResult; stdcall;
+ function SetSpeakerConfig(dwSpeakerConfig: DWORD): HResult; stdcall;
+ function Initialize(pcGuidDevice: PGUID): HResult; stdcall;
+ end;
+
+ IID_IDirectSound = IDirectSound;
+ {$EXTERNALSYM IID_IDirectSound}
+
+
+{$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
+
+ //
+ // IDirectSound8
+ //
+
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSound8);'}
+ {$EXTERNALSYM IDirectSound8}
+ IDirectSound8 = interface(IDirectSound)
+ ['{C50A7E93-F395-4834-9EF6-7FA99DE50966}']
+ // IDirectSound8 methods
+ function VerifyCertification(pdwCertified: PDWORD): HResult; stdcall;
+ end;
+
+ IID_IDirectSound8 = IDirectSound8;
+ {$EXTERNALSYM IID_IDirectSound8}
+
+
+{$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
+
+ //
+ // IDirectSoundBuffer
+ //
+
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundBuffer);'}
+ {$EXTERNALSYM IDirectSoundBuffer}
+ IDirectSoundBuffer = interface(IUnknown)
+ ['{279AFA85-4981-11CE-A521-0020AF0BE560}']
+ // IDirectSoundBuffer methods
+ function GetCaps(var pDSBufferCaps: TDSBcaps): HResult; stdcall;
+ function GetCurrentPosition(pdwCurrentPlayCursor, pdwCurrentWriteCursor: PDWORD): HResult; stdcall;
+ function GetFormat(pwfxFormat: PWaveFormatEx; dwSizeAllocated: DWORD; pdwSizeWritten: PDWORD): HResult; stdcall;
+ function GetVolume(out plVolume: Longint): HResult; stdcall;
+ function GetPan(out plPan: Longint): HResult; stdcall;
+ function GetFrequency(out pdwFrequency: DWORD): HResult; stdcall;
+ function GetStatus(out pdwStatus: DWORD): HResult; stdcall;
+ function Initialize(pDirectSound: IDirectSound; const pcDSBufferDesc: TDSBufferDesc): HResult; stdcall;
+ function Lock(dwOffset, dwBytes: DWORD; out ppvAudioPtr1: Pointer; out pdwAudioBytes1: DWORD;
+ out ppvAudioPtr2: Pointer; out pdwAudioBytes2: DWORD; dwFlags: DWORD): HResult; stdcall;
+ function Play(dwReserved1, dwPriority, dwFlags: DWORD): HResult; stdcall;
+ function SetCurrentPosition(dwNewPosition: DWORD): HResult; stdcall;
+ function SetFormat(pcfxFormat: PWaveFormatEx): HResult; stdcall;
+ function SetVolume(lVolume: Longint): HResult; stdcall;
+ function SetPan(lPan: Longint): HResult; stdcall;
+ function SetFrequency(dwFrequency: DWORD): HResult; stdcall;
+ function Stop: HResult; stdcall;
+ function Unlock(pvAudioPtr1: Pointer; dwAudioBytes1: DWORD; pvAudioPtr2: Pointer; dwAudioBytes2: DWORD): HResult; stdcall;
+ function Restore: HResult; stdcall;
+ end;
+
+ IID_IDirectSoundBuffer = IDirectSoundBuffer;
+ {$EXTERNALSYM IID_IDirectSoundBuffer}
+
+
+{$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
+
+ //
+ // IDirectSoundBuffer8
+ //
+
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundBuffer8);'}
+ {$EXTERNALSYM IDirectSoundBuffer8}
+ IDirectSoundBuffer8 = interface(IDirectSoundBuffer)
+ ['{6825a449-7524-4d82-920f-50e36ab3ab1e}']
+ // IDirectSoundBuffer8 methods
+ function SetFX(dwEffectsCount: DWORD; pDSFXDesc: PDSEffectDesc; pdwResultCodes: PDWORD): HResult; stdcall;
+ function AcquireResources(dwFlags, dwEffectsCount, pdwResultCodes: PDWORD): HResult; stdcall;
+ function GetObjectInPath(const rguidObject: TGUID; dwIndex: DWORD; const rguidInterface: TGUID; out ppObject{IUnknown}): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundBuffer8 = IDirectSoundBuffer8;
+ {$EXTERNALSYM IID_IDirectSoundBuffer8}
+
+const
+ // Special GUID meaning "select all objects" for use in GetObjectInPath()
+ GUID_All_Objects: TGUID = '{aa114de5-c262-4169-a1c8-23d698cc73b5}';
+ {$EXTERNALSYM GUID_All_Objects}
+
+
+type
+{$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
+
+ //
+ // IDirectSound3DListener
+ //
+
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSound3DListener);'}
+ {$EXTERNALSYM IDirectSound3DListener}
+ IDirectSound3DListener = interface(IUnknown)
+ ['{279AFA84-4981-11CE-A521-0020AF0BE560}']
+ // IDirectSound3DListener methods
+ function GetAllParameters(var pListener: TDS3DListener): HResult; stdcall;
+ function GetDistanceFactor(out pflDistanceFactor: TD3DValue): HResult; stdcall;
+ function GetDopplerFactor(out pflDopplerFactor: TD3DValue): HResult; stdcall;
+ function GetOrientation(out pvOrientFront, pvOrientTop: TD3DVector): HResult; stdcall;
+ function GetPosition(out pvPosition: TD3DVector): HResult; stdcall;
+ function GetRolloffFactor(out pflRolloffFactor: TD3DValue): HResult; stdcall;
+ function GetVelocity(out pvVelocity: TD3DVector): HResult; stdcall;
+ function SetAllParameters(const pcListener: TDS3DListener; dwApply: DWORD): HResult; stdcall;
+ function SetDistanceFactor(flDistanceFactor: TD3DValue; dwApply: DWORD): HResult; stdcall;
+ function SetDopplerFactor(flDopplerFactor: TD3DValue; dwApply: DWORD): HResult; stdcall;
+ function SetOrientation(xFront, yFront, zFront: TD3DValue; xTop, yTop, zTop: TD3DValue; dwApply: DWORD): HResult; stdcall;
+ function SetPosition(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
+ function SetRolloffFactor(flRolloffFactor: TD3DValue; dwApply: DWORD): HResult; stdcall;
+ function SetVelocity(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
+ function CommitDeferredSettings: HResult; stdcall;
+ end;
+
+ IID_IDirectSound3DListener = IDirectSound3DListener;
+ {$EXTERNALSYM IID_IDirectSound3DListener}
+
+
+ //
+ // IDirectSound3DBuffer
+ //
+
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSound3DBuffer);'}
+ {$EXTERNALSYM IDirectSound3DBuffer}
+ IDirectSound3DBuffer = interface(IUnknown)
+ ['{279AFA86-4981-11CE-A521-0020AF0BE560}']
+ // IDirectSound3DBuffer methods
+ function GetAllParameters(var pDs3dBuffer: TDS3DBuffer): HResult; stdcall;
+ function GetConeAngles(var pdwInsideConeAngle, pdwOutsideConeAngle: DWORD): HResult; stdcall;
+ function GetConeOrientation(out pvOrientation: TD3DVector): HResult; stdcall;
+ function GetConeOutsideVolume(out plConeOutsideVolume: Longint): HResult; stdcall;
+ function GetMaxDistance(out pflMaxDistance: TD3DValue): HResult; stdcall;
+ function GetMinDistance(out pflMinDistance: TD3DValue): HResult; stdcall;
+ function GetMode(out pdwMode: DWORD): HResult; stdcall;
+ function GetPosition(out pvPosition: TD3DVector): HResult; stdcall;
+ function GetVelocity(out pvVelocity: TD3DVector): HResult; stdcall;
+ function SetAllParameters(const pcDs3dBuffer: TDS3DBuffer; dwApply: DWORD): HResult; stdcall;
+ function SetConeAngles(dwInsideConeAngle, dwOutsideConeAngle: DWORD; dwApply: DWORD): HResult; stdcall;
+ function SetConeOrientation(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
+ function SetConeOutsideVolume(lConeOutsideVolume: Longint; dwApply: DWORD): HResult; stdcall;
+ function SetMaxDistance(flMaxDistance: TD3DValue; dwApply: DWORD): HResult; stdcall;
+ function SetMinDistance(flMinDistance: TD3DValue; dwApply: DWORD): HResult; stdcall;
+ function SetMode(dwMode: DWORD; dwApply: DWORD): HResult; stdcall;
+ function SetPosition(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
+ function SetVelocity(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
+ end;
+
+ IID_IDirectSound3DBuffer = IDirectSound3DBuffer;
+ {$EXTERNALSYM IID_IDirectSound3DBuffer}
+
+
+ IDirectSoundCaptureBuffer = interface;
+
+ //
+ // IDirectSoundCapture
+ //
+
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundCapture);'}
+ {$EXTERNALSYM IDirectSoundCapture}
+ IDirectSoundCapture = interface(IUnknown)
+ ['{b0210781-89cd-11d0-af08-00a0c925cd16}']
+ // IDirectSoundCapture methods
+ function CreateCaptureBuffer(const pcDSCBufferDesc: TDSCBufferDesc; out ppDSCBuffer: IDirectSoundCaptureBuffer; pUnkOuter: IUnknown): HResult; stdcall;
+ function GetCaps(var pDSCCaps: TDSCcaps): HResult; stdcall;
+ function Initialize(pcGuidDevice: PGUID): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundCapture = IDirectSoundCapture;
+ {$EXTERNALSYM IID_IDirectSoundCapture}
+
+
+ //
+ // IDirectSoundCaptureBuffer
+ //
+
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundCaptureBuffer);'}
+ {$EXTERNALSYM IDirectSoundCaptureBuffer}
+ IDirectSoundCaptureBuffer = interface(IUnknown)
+ ['{b0210782-89cd-11d0-af08-00a0c925cd16}']
+ // IDirectSoundCaptureBuffer methods
+ function GetCaps(var pDSCBCaps: TDSCBCaps): HResult; stdcall;
+ function GetCurrentPosition(pdwCapturePosition, pdwReadPosition: PDWORD): HResult; stdcall;
+ function GetFormat(pwfxFormat: PWaveFormatEx; dwSizeAllocated: DWORD; pdwSizeWritten: PDWORD): HResult; stdcall;
+ function GetStatus(pdwStatus: PDWORD): HResult; stdcall;
+ function Initialize(pDirectSoundCapture: IDirectSoundCapture; const pcDSCBufferDesc: TDSCBufferDesc): HResult; stdcall;
+ function Lock(dwOffset, dwBytes: DWORD; out ppvAudioPtr1: Pointer; out pdwAudioBytes1: DWORD; out ppvAudioPtr2: Pointer; out pdwAudioBytes2: DWORD; dwFlags: DWORD): HResult; stdcall;
+ function Start(dwFlags: DWORD): HResult; stdcall;
+ function Stop: HResult; stdcall;
+ function Unlock(pvAudioPtr1: Pointer; dwAudioBytes1: DWORD; pvAudioPtr2: Pointer; dwAudioBytes2: DWORD): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundCaptureBuffer = IDirectSoundCaptureBuffer;
+ {$EXTERNALSYM IID_IDirectSoundCaptureBuffer}
+
+
+{$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
+
+ //
+ // IDirectSoundCaptureBuffer8
+ //
+
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundCaptureBuffer8);'}
+ {$EXTERNALSYM IDirectSoundCaptureBuffer8}
+ IDirectSoundCaptureBuffer8 = interface(IDirectSoundCaptureBuffer)
+ ['{00990df4-0dbb-4872-833e-6d303e80aeb6}']
+ // IDirectSoundCaptureBuffer8 methods
+ function GetObjectInPath(const rguidObject: TGUID; dwIndex: DWORD; const rguidInterface: TGUID; out ppObject{IUnknown}): HResult; stdcall;
+ function GetFXStatus(dwFXCount: DWORD; pdwFXStatus: PDWORD): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundCaptureBuffer8 = IDirectSoundCaptureBuffer8;
+ {$EXTERNALSYM IID_IDirectSoundCaptureBuffer8}
+
+{$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
+
+ //
+ // IDirectSoundNotify
+ //
+
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundNotify);'}
+ {$EXTERNALSYM IDirectSoundNotify}
+ IDirectSoundNotify = interface(IUnknown)
+ ['{b0210783-89cd-11d0-af08-00a0c925cd16}']
+ // IDirectSoundNotify methods
+ function SetNotificationPositions(dwPositionNotifies: DWORD; pcPositionNotifies: PDSBPositionNotify): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundNotify = IDirectSoundNotify;
+ {$EXTERNALSYM IID_IDirectSoundNotify}
+
+
+ //
+ // IKsPropertySet
+ //
+
+const
+ KSPROPERTY_SUPPORT_GET = $00000001;
+ {$EXTERNALSYM KSPROPERTY_SUPPORT_GET}
+ KSPROPERTY_SUPPORT_SET = $00000002;
+ {$EXTERNALSYM KSPROPERTY_SUPPORT_SET}
+
+type
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IKsPropertySet);'}
+ {$EXTERNALSYM IKsPropertySet}
+ IKsPropertySet = interface(IUnknown)
+ ['{31efac30-515c-11d0-a9aa-00aa0061be93}']
+ // IKsPropertySet methods
+ function Get(const rguidPropSet: TGUID; ulId: ULONG; pInstanceData: Pointer; ulInstanceLength: ULONG; pPropertyData: Pointer; ulDataLength: ULONG; out pulBytesReturned: ULONG): HResult; stdcall;
+ function _Set(const rguidPropSet: TGUID; ulId: ULONG; pInstanceData: Pointer; ulInstanceLength: ULONG; pPropertyData: Pointer; ulDataLength: ULONG): HResult; stdcall;
+ function QuerySupport(rguidPropSet: TGUID; ulId: ULONG; out pulTypeSupport: ULONG): HResult; stdcall;
+ end;
+
+ IID_IKsPropertySet = IKsPropertySet;
+ {$EXTERNALSYM IID_IKsPropertySet}
+
+{$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
+
+ //
+ // IDirectSoundFXGargle
+ //
+
+ PDSFXGargle = ^TDSFXGargle;
+ _DSFXGargle = packed record
+ dwRateHz: DWORD; // Rate of modulation in hz
+ dwWaveShape: DWORD; // DSFXGARGLE_WAVE_xxx
+ end;
+ {$EXTERNALSYM _DSFXGargle}
+ DSFXGargle = _DSFXGargle;
+ {$EXTERNALSYM DSFXGargle}
+ TDSFXGargle = _DSFXGargle;
+
+const
+ DSFXGARGLE_WAVE_TRIANGLE = 0;
+ {$EXTERNALSYM DSFXGARGLE_WAVE_TRIANGLE}
+ DSFXGARGLE_WAVE_SQUARE = 1;
+ {$EXTERNALSYM DSFXGARGLE_WAVE_SQUARE}
+
+ DSFXGARGLE_RATEHZ_MIN = 1;
+ {$EXTERNALSYM DSFXGARGLE_RATEHZ_MIN}
+ DSFXGARGLE_RATEHZ_MAX = 1000;
+ {$EXTERNALSYM DSFXGARGLE_RATEHZ_MAX}
+
+type
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXGargle);'}
+ {$EXTERNALSYM IDirectSoundFXGargle}
+ IDirectSoundFXGargle = interface(IUnknown)
+ ['{d616f352-d622-11ce-aac5-0020af0b99a3}']
+ // IDirectSoundFXGargle methods
+ function SetAllParameters(const pcDsFxGargle: TDSFXGargle): HResult; stdcall;
+ function GetAllParameters(out pDsFxGargle: TDSFXGargle): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundFXGargle = IDirectSoundFXGargle;
+ {$EXTERNALSYM IID_IDirectSoundFXGargle}
+
+
+ //
+ // IDirectSoundFXChorus
+ //
+
+ PDSFXChorus = ^TDSFXChorus;
+ _DSFXChorus = packed record
+ fWetDryMix: Single;
+ fDepth: Single;
+ fFeedback: Single;
+ fFrequency: Single;
+ lWaveform: Longint; // LFO shape; DSFXCHORUS_WAVE_xxx
+ fDelay: Single;
+ lPhase: Longint;
+ end;
+ {$EXTERNALSYM _DSFXChorus}
+ DSFXChorus = _DSFXChorus;
+ {$EXTERNALSYM DSFXChorus}
+ TDSFXChorus = _DSFXChorus;
+
+const
+ DSFXCHORUS_WAVE_TRIANGLE = 0;
+ {$EXTERNALSYM DSFXCHORUS_WAVE_TRIANGLE}
+ DSFXCHORUS_WAVE_SIN = 1;
+ {$EXTERNALSYM DSFXCHORUS_WAVE_SIN}
+
+ DSFXCHORUS_WETDRYMIX_MIN = 0.0;
+ {$EXTERNALSYM DSFXCHORUS_WETDRYMIX_MIN}
+ DSFXCHORUS_WETDRYMIX_MAX = 100.0;
+ {$EXTERNALSYM DSFXCHORUS_WETDRYMIX_MAX}
+ DSFXCHORUS_DEPTH_MIN = 0.0;
+ {$EXTERNALSYM DSFXCHORUS_DEPTH_MIN}
+ DSFXCHORUS_DEPTH_MAX = 100.0;
+ {$EXTERNALSYM DSFXCHORUS_DEPTH_MAX}
+ DSFXCHORUS_FEEDBACK_MIN = -99.0;
+ {$EXTERNALSYM DSFXCHORUS_FEEDBACK_MIN}
+ DSFXCHORUS_FEEDBACK_MAX = 99.0;
+ {$EXTERNALSYM DSFXCHORUS_FEEDBACK_MAX}
+ DSFXCHORUS_FREQUENCY_MIN = 0.0;
+ {$EXTERNALSYM DSFXCHORUS_FREQUENCY_MIN}
+ DSFXCHORUS_FREQUENCY_MAX = 10.0;
+ {$EXTERNALSYM DSFXCHORUS_FREQUENCY_MAX}
+ DSFXCHORUS_DELAY_MIN = 0.0;
+ {$EXTERNALSYM DSFXCHORUS_DELAY_MIN}
+ DSFXCHORUS_DELAY_MAX = 20.0;
+ {$EXTERNALSYM DSFXCHORUS_DELAY_MAX}
+ DSFXCHORUS_PHASE_MIN = 0;
+ {$EXTERNALSYM DSFXCHORUS_PHASE_MIN}
+ DSFXCHORUS_PHASE_MAX = 4;
+ {$EXTERNALSYM DSFXCHORUS_PHASE_MAX}
+
+ DSFXCHORUS_PHASE_NEG_180 = 0;
+ {$EXTERNALSYM DSFXCHORUS_PHASE_NEG_180}
+ DSFXCHORUS_PHASE_NEG_90 = 1;
+ {$EXTERNALSYM DSFXCHORUS_PHASE_NEG_90}
+ DSFXCHORUS_PHASE_ZERO = 2;
+ {$EXTERNALSYM DSFXCHORUS_PHASE_ZERO}
+ DSFXCHORUS_PHASE_90 = 3;
+ {$EXTERNALSYM DSFXCHORUS_PHASE_90}
+ DSFXCHORUS_PHASE_180 = 4;
+ {$EXTERNALSYM DSFXCHORUS_PHASE_180}
+
+type
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXChorus);'}
+ {$EXTERNALSYM IDirectSoundFXChorus}
+ IDirectSoundFXChorus = interface(IUnknown)
+ ['{880842e3-145f-43e6-a934-a71806e50547}']
+ // IDirectSoundFXChorus methods
+ function SetAllParameters(const pcDsFxChorus: TDSFXChorus): HResult; stdcall;
+ function GetAllParameters(out pDsFxChorus: TDSFXChorus): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundFXChorus = IDirectSoundFXChorus;
+ {$EXTERNALSYM IID_IDirectSoundFXChorus}
+
+
+ //
+ // IDirectSoundFXFlanger
+ //
+
+ PDSFXFlanger = ^TDSFXFlanger;
+ _DSFXFlanger = packed record
+ fWetDryMix: Single;
+ fDepth: Single;
+ fFeedback: Single;
+ fFrequency: Single;
+ lWaveform: Longint;
+ fDelay: Single;
+ lPhase: Longint;
+ end;
+ {$EXTERNALSYM _DSFXFlanger}
+ DSFXFlanger = _DSFXFlanger;
+ {$EXTERNALSYM DSFXFlanger}
+ TDSFXFlanger = _DSFXFlanger;
+
+const
+ DSFXFLANGER_WAVE_TRIANGLE = 0;
+ {$EXTERNALSYM DSFXFLANGER_WAVE_TRIANGLE}
+ DSFXFLANGER_WAVE_SIN = 1;
+ {$EXTERNALSYM DSFXFLANGER_WAVE_SIN}
+
+ DSFXFLANGER_WETDRYMIX_MIN = 0.0;
+ {$EXTERNALSYM DSFXFLANGER_WETDRYMIX_MIN}
+ DSFXFLANGER_WETDRYMIX_MAX = 100.0;
+ {$EXTERNALSYM DSFXFLANGER_WETDRYMIX_MAX}
+ DSFXFLANGER_FREQUENCY_MIN = 0.0;
+ {$EXTERNALSYM DSFXFLANGER_FREQUENCY_MIN}
+ DSFXFLANGER_FREQUENCY_MAX = 10.0;
+ {$EXTERNALSYM DSFXFLANGER_FREQUENCY_MAX}
+ DSFXFLANGER_DEPTH_MIN = 0.0;
+ {$EXTERNALSYM DSFXFLANGER_DEPTH_MIN}
+ DSFXFLANGER_DEPTH_MAX = 100.0;
+ {$EXTERNALSYM DSFXFLANGER_DEPTH_MAX}
+ DSFXFLANGER_PHASE_MIN = 0;
+ {$EXTERNALSYM DSFXFLANGER_PHASE_MIN}
+ DSFXFLANGER_PHASE_MAX = 4;
+ {$EXTERNALSYM DSFXFLANGER_PHASE_MAX}
+ DSFXFLANGER_FEEDBACK_MIN = -99.0;
+ {$EXTERNALSYM DSFXFLANGER_FEEDBACK_MIN}
+ DSFXFLANGER_FEEDBACK_MAX = 99.0;
+ {$EXTERNALSYM DSFXFLANGER_FEEDBACK_MAX}
+ DSFXFLANGER_DELAY_MIN = 0.0;
+ {$EXTERNALSYM DSFXFLANGER_DELAY_MIN}
+ DSFXFLANGER_DELAY_MAX = 4.0;
+ {$EXTERNALSYM DSFXFLANGER_DELAY_MAX}
+
+ DSFXFLANGER_PHASE_NEG_180 = 0;
+ {$EXTERNALSYM DSFXFLANGER_PHASE_NEG_180}
+ DSFXFLANGER_PHASE_NEG_90 = 1;
+ {$EXTERNALSYM DSFXFLANGER_PHASE_NEG_90}
+ DSFXFLANGER_PHASE_ZERO = 2;
+ {$EXTERNALSYM DSFXFLANGER_PHASE_ZERO}
+ DSFXFLANGER_PHASE_90 = 3;
+ {$EXTERNALSYM DSFXFLANGER_PHASE_90}
+ DSFXFLANGER_PHASE_180 = 4;
+ {$EXTERNALSYM DSFXFLANGER_PHASE_180}
+
+type
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXFlanger);'}
+ {$EXTERNALSYM IDirectSoundFXFlanger}
+ IDirectSoundFXFlanger = interface(IUnknown)
+ ['{903e9878-2c92-4072-9b2c-ea68f5396783}']
+ // IDirectSoundFXFlanger methods
+ function SetAllParameters(const pcDsFxFlanger: TDSFXFlanger): HResult; stdcall;
+ function GetAllParameters(out pDsFxFlanger: TDSFXFlanger): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundFXFlanger = IDirectSoundFXFlanger;
+ {$EXTERNALSYM IID_IDirectSoundFXFlanger}
+
+
+ //
+ // IDirectSoundFXEcho
+ //
+
+ PDSFXEcho = ^TDSFXEcho;
+ _DSFXEcho = packed record
+ fWetDryMix: Single;
+ fFeedback: Single;
+ fLeftDelay: Single;
+ fRightDelay: Single;
+ lPanDelay: Longint;
+ end;
+ {$EXTERNALSYM _DSFXEcho}
+ DSFXEcho = _DSFXEcho;
+ {$EXTERNALSYM DSFXEcho}
+ TDSFXEcho = _DSFXEcho;
+
+const
+ DSFXECHO_WETDRYMIX_MIN = 0.0;
+ {$EXTERNALSYM DSFXECHO_WETDRYMIX_MIN}
+ DSFXECHO_WETDRYMIX_MAX = 100.0;
+ {$EXTERNALSYM DSFXECHO_WETDRYMIX_MAX}
+ DSFXECHO_FEEDBACK_MIN = 0.0;
+ {$EXTERNALSYM DSFXECHO_FEEDBACK_MIN}
+ DSFXECHO_FEEDBACK_MAX = 100.0;
+ {$EXTERNALSYM DSFXECHO_FEEDBACK_MAX}
+ DSFXECHO_LEFTDELAY_MIN = 1.0;
+ {$EXTERNALSYM DSFXECHO_LEFTDELAY_MIN}
+ DSFXECHO_LEFTDELAY_MAX = 2000.0;
+ {$EXTERNALSYM DSFXECHO_LEFTDELAY_MAX}
+ DSFXECHO_RIGHTDELAY_MIN = 1.0;
+ {$EXTERNALSYM DSFXECHO_RIGHTDELAY_MIN}
+ DSFXECHO_RIGHTDELAY_MAX = 2000.0;
+ {$EXTERNALSYM DSFXECHO_RIGHTDELAY_MAX}
+ DSFXECHO_PANDELAY_MIN = 0;
+ {$EXTERNALSYM DSFXECHO_PANDELAY_MIN}
+ DSFXECHO_PANDELAY_MAX = 1;
+ {$EXTERNALSYM DSFXECHO_PANDELAY_MAX}
+
+type
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXEcho);'}
+ {$EXTERNALSYM IDirectSoundFXEcho}
+ IDirectSoundFXEcho = interface(IUnknown)
+ ['{8bd28edf-50db-4e92-a2bd-445488d1ed42}']
+ // IDirectSoundFXEcho methods
+ function SetAllParameters(const pcDsFxEcho: TDSFXEcho): HResult; stdcall;
+ function GetAllParameters(out pDsFxEcho: TDSFXEcho): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundFXEcho = IDirectSoundFXEcho;
+ {$EXTERNALSYM IID_IDirectSoundFXEcho}
+
+
+ //
+ // IDirectSoundFXDistortion
+ //
+
+ PDSFXDistortion = ^TDSFXDistortion;
+ _DSFXDistortion = packed record
+ fGain: Single;
+ fEdge: Single;
+ fPostEQCenterFrequency: Single;
+ fPostEQBandwidth: Single;
+ fPreLowpassCutoff: Single;
+ end;
+ {$EXTERNALSYM _DSFXDistortion}
+ DSFXDistortion = _DSFXDistortion;
+ {$EXTERNALSYM DSFXDistortion}
+ TDSFXDistortion = _DSFXDistortion;
+
+const
+ DSFXDISTORTION_GAIN_MIN = -60.0;
+ {$EXTERNALSYM DSFXDISTORTION_GAIN_MIN}
+ DSFXDISTORTION_GAIN_MAX = 0.0;
+ {$EXTERNALSYM DSFXDISTORTION_GAIN_MAX}
+ DSFXDISTORTION_EDGE_MIN = 0.0;
+ {$EXTERNALSYM DSFXDISTORTION_EDGE_MIN}
+ DSFXDISTORTION_EDGE_MAX = 100.0;
+ {$EXTERNALSYM DSFXDISTORTION_EDGE_MAX}
+ DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN = 100.0;
+ {$EXTERNALSYM DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN}
+ DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX = 8000.0;
+ {$EXTERNALSYM DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX}
+ DSFXDISTORTION_POSTEQBANDWIDTH_MIN = 100.0;
+ {$EXTERNALSYM DSFXDISTORTION_POSTEQBANDWIDTH_MIN}
+ DSFXDISTORTION_POSTEQBANDWIDTH_MAX = 8000.0;
+ {$EXTERNALSYM DSFXDISTORTION_POSTEQBANDWIDTH_MAX}
+ DSFXDISTORTION_PRELOWPASSCUTOFF_MIN = 100.0;
+ {$EXTERNALSYM DSFXDISTORTION_PRELOWPASSCUTOFF_MIN}
+ DSFXDISTORTION_PRELOWPASSCUTOFF_MAX = 8000.0;
+ {$EXTERNALSYM DSFXDISTORTION_PRELOWPASSCUTOFF_MAX}
+
+type
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXDistortion);'}
+ {$EXTERNALSYM IDirectSoundFXDistortion}
+ IDirectSoundFXDistortion = interface(IUnknown)
+ ['{8ecf4326-455f-4d8b-bda9-8d5d3e9e3e0b}']
+ // IDirectSoundFXDistortion methods
+ function SetAllParameters(const pcDsFxDistortion: TDSFXDistortion): HResult; stdcall;
+ function GetAllParameters(out pDsFxDistortion: TDSFXDistortion): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundFXDistortion = IDirectSoundFXDistortion;
+ {$EXTERNALSYM IID_IDirectSoundFXDistortion}
+
+
+ //
+ // IDirectSoundFXCompressor
+ //
+
+ PDSFXCompressor = ^TDSFXCompressor;
+ _DSFXCompressor = packed record
+ fGain: Single;
+ fAttack: Single;
+ fRelease: Single;
+ fThreshold: Single;
+ fRatio: Single;
+ fPredelay: Single;
+ end;
+ {$EXTERNALSYM _DSFXCompressor}
+ DSFXCompressor = _DSFXCompressor;
+ {$EXTERNALSYM DSFXCompressor}
+ TDSFXCompressor = _DSFXCompressor;
+
+const
+ DSFXCOMPRESSOR_GAIN_MIN = -60.0;
+ {$EXTERNALSYM DSFXCOMPRESSOR_GAIN_MIN}
+ DSFXCOMPRESSOR_GAIN_MAX = 60.0;
+ {$EXTERNALSYM DSFXCOMPRESSOR_GAIN_MAX}
+ DSFXCOMPRESSOR_ATTACK_MIN = 0.01;
+ {$EXTERNALSYM DSFXCOMPRESSOR_ATTACK_MIN}
+ DSFXCOMPRESSOR_ATTACK_MAX = 500.0;
+ {$EXTERNALSYM DSFXCOMPRESSOR_ATTACK_MAX}
+ DSFXCOMPRESSOR_RELEASE_MIN = 50.0;
+ {$EXTERNALSYM DSFXCOMPRESSOR_RELEASE_MIN}
+ DSFXCOMPRESSOR_RELEASE_MAX = 3000.0;
+ {$EXTERNALSYM DSFXCOMPRESSOR_RELEASE_MAX}
+ DSFXCOMPRESSOR_THRESHOLD_MIN = -60.0;
+ {$EXTERNALSYM DSFXCOMPRESSOR_THRESHOLD_MIN}
+ DSFXCOMPRESSOR_THRESHOLD_MAX = 0.0;
+ {$EXTERNALSYM DSFXCOMPRESSOR_THRESHOLD_MAX}
+ DSFXCOMPRESSOR_RATIO_MIN = 1.0;
+ {$EXTERNALSYM DSFXCOMPRESSOR_RATIO_MIN}
+ DSFXCOMPRESSOR_RATIO_MAX = 100.0;
+ {$EXTERNALSYM DSFXCOMPRESSOR_RATIO_MAX}
+ DSFXCOMPRESSOR_PREDELAY_MIN = 0.0;
+ {$EXTERNALSYM DSFXCOMPRESSOR_PREDELAY_MIN}
+ DSFXCOMPRESSOR_PREDELAY_MAX = 4.0;
+ {$EXTERNALSYM DSFXCOMPRESSOR_PREDELAY_MAX}
+
+type
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXCompressor);'}
+ {$EXTERNALSYM IDirectSoundFXCompressor}
+ IDirectSoundFXCompressor = interface(IUnknown)
+ ['{4bbd1154-62f6-4e2c-a15c-d3b6c417f7a0}']
+ // IDirectSoundFXCompressor methods
+ function SetAllParameters(const pcDsFxCompressor: TDSFXCompressor): HResult; stdcall;
+ function GetAllParameters(out pDsFxCompressor: TDSFXCompressor): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundFXCompressor = IDirectSoundFXCompressor;
+ {$EXTERNALSYM IID_IDirectSoundFXCompressor}
+
+
+ //
+ // IDirectSoundFXParamEq
+ //
+
+ PDSFXParamEq = ^TDSFXParamEq;
+ _DSFXParamEq = packed record
+ fCenter: Single;
+ fBandwidth: Single;
+ fGain: Single;
+ end;
+ {$EXTERNALSYM _DSFXParamEq}
+ DSFXParamEq = _DSFXParamEq;
+ {$EXTERNALSYM DSFXParamEq}
+ TDSFXParamEq = _DSFXParamEq;
+
+const
+ DSFXPARAMEQ_CENTER_MIN = 80.0;
+ {$EXTERNALSYM DSFXPARAMEQ_CENTER_MIN}
+ DSFXPARAMEQ_CENTER_MAX = 16000.0;
+ {$EXTERNALSYM DSFXPARAMEQ_CENTER_MAX}
+ DSFXPARAMEQ_BANDWIDTH_MIN = 1.0;
+ {$EXTERNALSYM DSFXPARAMEQ_BANDWIDTH_MIN}
+ DSFXPARAMEQ_BANDWIDTH_MAX = 36.0;
+ {$EXTERNALSYM DSFXPARAMEQ_BANDWIDTH_MAX}
+ DSFXPARAMEQ_GAIN_MIN = -15.0;
+ {$EXTERNALSYM DSFXPARAMEQ_GAIN_MIN}
+ DSFXPARAMEQ_GAIN_MAX = 15.0;
+ {$EXTERNALSYM DSFXPARAMEQ_GAIN_MAX}
+
+type
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXParamEq);'}
+ {$EXTERNALSYM IDirectSoundFXParamEq}
+ IDirectSoundFXParamEq = interface(IUnknown)
+ ['{c03ca9fe-fe90-4204-8078-82334cd177da}']
+ // IDirectSoundFXParamEq methods
+ function SetAllParameters(const pcDsFxParamEq: TDSFXParamEq): HResult; stdcall;
+ function GetAllParameters(out pDsFxParamEq: TDSFXParamEq): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundFXParamEq = IDirectSoundFXParamEq;
+ {$EXTERNALSYM IID_IDirectSoundFXParamEq}
+
+
+ //
+ // IDirectSoundFXI3DL2Reverb
+ //
+
+ PDSFXI3DL2Reverb = ^TDSFXI3DL2Reverb;
+ _DSFXI3DL2Reverb = packed record
+ lRoom: Longint; // [-10000, 0] default: -1000 mB
+ lRoomHF: Longint; // [-10000, 0] default: 0 mB
+ flRoomRolloffFactor: Single; // [0.0, 10.0] default: 0.0
+ flDecayTime: Single; // [0.1, 20.0] default: 1.49s
+ flDecayHFRatio: Single; // [0.1, 2.0] default: 0.83
+ lReflections: Longint; // [-10000, 1000] default: -2602 mB
+ flReflectionsDelay: Single; // [0.0, 0.3] default: 0.007 s
+ lReverb: Longint; // [-10000, 2000] default: 200 mB
+ flReverbDelay: Single; // [0.0, 0.1] default: 0.011 s
+ flDiffusion: Single; // [0.0, 100.0] default: 100.0 %
+ flDensity: Single; // [0.0, 100.0] default: 100.0 %
+ flHFReference: Single; // [20.0, 20000.0] default: 5000.0 Hz
+ end;
+ {$EXTERNALSYM _DSFXI3DL2Reverb}
+ DSFXI3DL2Reverb = _DSFXI3DL2Reverb;
+ {$EXTERNALSYM DSFXI3DL2Reverb}
+ TDSFXI3DL2Reverb = _DSFXI3DL2Reverb;
+
+const
+ DSFX_I3DL2REVERB_ROOM_MIN = (-10000);
+ {$EXTERNALSYM DSFX_I3DL2REVERB_ROOM_MIN}
+ DSFX_I3DL2REVERB_ROOM_MAX = 0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_ROOM_MAX}
+ DSFX_I3DL2REVERB_ROOM_DEFAULT = (-1000);
+ {$EXTERNALSYM DSFX_I3DL2REVERB_ROOM_DEFAULT}
+
+ DSFX_I3DL2REVERB_ROOMHF_MIN = (-10000);
+ {$EXTERNALSYM DSFX_I3DL2REVERB_ROOMHF_MIN}
+ DSFX_I3DL2REVERB_ROOMHF_MAX = 0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_ROOMHF_MAX}
+ DSFX_I3DL2REVERB_ROOMHF_DEFAULT = (-100);
+ {$EXTERNALSYM DSFX_I3DL2REVERB_ROOMHF_DEFAULT}
+
+ DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN = 0.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN}
+ DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX = 10.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX}
+ DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT = 0.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT}
+
+ DSFX_I3DL2REVERB_DECAYTIME_MIN = 0.1;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_DECAYTIME_MIN}
+ DSFX_I3DL2REVERB_DECAYTIME_MAX = 20.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_DECAYTIME_MAX}
+ DSFX_I3DL2REVERB_DECAYTIME_DEFAULT = 1.49;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_DECAYTIME_DEFAULT}
+
+ DSFX_I3DL2REVERB_DECAYHFRATIO_MIN = 0.1;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_DECAYHFRATIO_MIN}
+ DSFX_I3DL2REVERB_DECAYHFRATIO_MAX = 2.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_DECAYHFRATIO_MAX}
+ DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT = 0.83;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT}
+
+ DSFX_I3DL2REVERB_REFLECTIONS_MIN = (-10000);
+ {$EXTERNALSYM DSFX_I3DL2REVERB_REFLECTIONS_MIN}
+ DSFX_I3DL2REVERB_REFLECTIONS_MAX = 1000;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_REFLECTIONS_MAX}
+ DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT = (-2602);
+ {$EXTERNALSYM DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT}
+
+ DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN = 0.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN}
+ DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX = 0.3;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX}
+ DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT = 0.007;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT}
+
+ DSFX_I3DL2REVERB_REVERB_MIN = (-10000);
+ {$EXTERNALSYM DSFX_I3DL2REVERB_REVERB_MIN}
+ DSFX_I3DL2REVERB_REVERB_MAX = 2000;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_REVERB_MAX}
+ DSFX_I3DL2REVERB_REVERB_DEFAULT = (200);
+ {$EXTERNALSYM DSFX_I3DL2REVERB_REVERB_DEFAULT}
+
+ DSFX_I3DL2REVERB_REVERBDELAY_MIN = 0.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_REVERBDELAY_MIN}
+ DSFX_I3DL2REVERB_REVERBDELAY_MAX = 0.1;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_REVERBDELAY_MAX}
+ DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT = 0.011;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT}
+
+ DSFX_I3DL2REVERB_DIFFUSION_MIN = 0.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_DIFFUSION_MIN}
+ DSFX_I3DL2REVERB_DIFFUSION_MAX = 100.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_DIFFUSION_MAX}
+ DSFX_I3DL2REVERB_DIFFUSION_DEFAULT = 100.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_DIFFUSION_DEFAULT}
+
+ DSFX_I3DL2REVERB_DENSITY_MIN = 0.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_DENSITY_MIN}
+ DSFX_I3DL2REVERB_DENSITY_MAX = 100.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_DENSITY_MAX}
+ DSFX_I3DL2REVERB_DENSITY_DEFAULT = 100.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_DENSITY_DEFAULT}
+
+ DSFX_I3DL2REVERB_HFREFERENCE_MIN = 20.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_HFREFERENCE_MIN}
+ DSFX_I3DL2REVERB_HFREFERENCE_MAX = 20000.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_HFREFERENCE_MAX}
+ DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT = 5000.0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT}
+
+ DSFX_I3DL2REVERB_QUALITY_MIN = 0;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_QUALITY_MIN}
+ DSFX_I3DL2REVERB_QUALITY_MAX = 3;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_QUALITY_MAX}
+ DSFX_I3DL2REVERB_QUALITY_DEFAULT = 2;
+ {$EXTERNALSYM DSFX_I3DL2REVERB_QUALITY_DEFAULT}
+
+type
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXI3DL2Reverb);'}
+ {$EXTERNALSYM IDirectSoundFXI3DL2Reverb}
+ IDirectSoundFXI3DL2Reverb = interface(IUnknown)
+ ['{4b166a6a-0d66-43f3-80e3-ee6280dee1a4}']
+ // IDirectSoundFXI3DL2Reverb methods
+ function SetAllParameters(const pcDsFxI3DL2Reverb: TDSFXI3DL2Reverb): HResult; stdcall;
+ function GetAllParameters(out pDsFxI3DL2Reverb: TDSFXI3DL2Reverb): HResult; stdcall;
+ function SetPreset(dwPreset: DWORD): HResult; stdcall;
+ function GetPreset(out pdwPreset: DWORD): HResult; stdcall;
+ function SetQuality(lQuality: Longint): HResult; stdcall;
+ function GetQuality(out plQuality: Longint): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundFXI3DL2Reverb = IDirectSoundFXI3DL2Reverb;
+ {$EXTERNALSYM IID_IDirectSoundFXI3DL2Reverb}
+
+
+ //
+ // IDirectSoundFXWavesReverb
+ //
+
+ PDSFXWavesReverb = ^TDSFXWavesReverb;
+ _DSFXWavesReverb = packed record
+ fInGain: Single; // [-96.0,0.0] default: 0.0 dB
+ fReverbMix: Single; // [-96.0,0.0] default: 0.0 db
+ fReverbTime: Single; // [0.001,3000.0] default: 1000.0 ms
+ fHighFreqRTRatio: Single; // [0.001,0.999] default: 0.001
+ end;
+ {$EXTERNALSYM _DSFXWavesReverb}
+ DSFXWavesReverb = _DSFXWavesReverb;
+ {$EXTERNALSYM DSFXWavesReverb}
+ TDSFXWavesReverb = _DSFXWavesReverb;
+
+const
+ DSFX_WAVESREVERB_INGAIN_MIN = -96.0;
+ {$EXTERNALSYM DSFX_WAVESREVERB_INGAIN_MIN}
+ DSFX_WAVESREVERB_INGAIN_MAX = 0.0;
+ {$EXTERNALSYM DSFX_WAVESREVERB_INGAIN_MAX}
+ DSFX_WAVESREVERB_INGAIN_DEFAULT = 0.0;
+ {$EXTERNALSYM DSFX_WAVESREVERB_INGAIN_DEFAULT}
+ DSFX_WAVESREVERB_REVERBMIX_MIN = -96.0;
+ {$EXTERNALSYM DSFX_WAVESREVERB_REVERBMIX_MIN}
+ DSFX_WAVESREVERB_REVERBMIX_MAX = 0.0;
+ {$EXTERNALSYM DSFX_WAVESREVERB_REVERBMIX_MAX}
+ DSFX_WAVESREVERB_REVERBMIX_DEFAULT = 0.0;
+ {$EXTERNALSYM DSFX_WAVESREVERB_REVERBMIX_DEFAULT}
+ DSFX_WAVESREVERB_REVERBTIME_MIN = 0.001;
+ {$EXTERNALSYM DSFX_WAVESREVERB_REVERBTIME_MIN}
+ DSFX_WAVESREVERB_REVERBTIME_MAX = 3000.0;
+ {$EXTERNALSYM DSFX_WAVESREVERB_REVERBTIME_MAX}
+ DSFX_WAVESREVERB_REVERBTIME_DEFAULT = 1000.0;
+ {$EXTERNALSYM DSFX_WAVESREVERB_REVERBTIME_DEFAULT}
+ DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN = 0.001;
+ {$EXTERNALSYM DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN}
+ DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX = 0.999;
+ {$EXTERNALSYM DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX}
+ DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT = 0.001;
+ {$EXTERNALSYM DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT}
+
+type
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFXWavesReverb);'}
+ {$EXTERNALSYM IDirectSoundFXWavesReverb}
+ IDirectSoundFXWavesReverb = interface(IUnknown)
+ ['{46858c3a-0dc6-45e3-b760-d4eef16cb325}']
+ // IDirectSoundFXWavesReverb methods
+ function SetAllParameters(const pcDsFxWavesReverb: TDSFXWavesReverb): HResult; stdcall;
+ function GetAllParameters(out pDsFxWavesReverb: TDSFXWavesReverb): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundFXWavesReverb = IDirectSoundFXWavesReverb;
+ {$EXTERNALSYM IID_IDirectSoundFXWavesReverb}
+
+
+ //
+ // IDirectSoundCaptureFXAec
+ //
+
+ PDSCFXAec = ^TDSCFXAec;
+ _DSCFXAec = packed record
+ fEnable: BOOL;
+ fNoiseFill: BOOL;
+ dwMode: DWORD;
+ end;
+ {$EXTERNALSYM _DSCFXAec}
+ DSCFXAec = _DSCFXAec;
+ {$EXTERNALSYM DSCFXAec}
+ TDSCFXAec = _DSCFXAec;
+
+const
+ // These match the AEC_MODE_* constants in the DDK's ksmedia.h file
+ DSCFX_AEC_MODE_PASS_THROUGH = $0;
+ {$EXTERNALSYM DSCFX_AEC_MODE_PASS_THROUGH}
+ DSCFX_AEC_MODE_HALF_DUPLEX = $1;
+ {$EXTERNALSYM DSCFX_AEC_MODE_HALF_DUPLEX}
+ DSCFX_AEC_MODE_FULL_DUPLEX = $2;
+ {$EXTERNALSYM DSCFX_AEC_MODE_FULL_DUPLEX}
+
+ // These match the AEC_STATUS_* constants in ksmedia.h
+ DSCFX_AEC_STATUS_HISTORY_UNINITIALIZED = $0;
+ {$EXTERNALSYM DSCFX_AEC_STATUS_HISTORY_UNINITIALIZED}
+ DSCFX_AEC_STATUS_HISTORY_CONTINUOUSLY_CONVERGED = $1;
+ {$EXTERNALSYM DSCFX_AEC_STATUS_HISTORY_CONTINUOUSLY_CONVERGED}
+ DSCFX_AEC_STATUS_HISTORY_PREVIOUSLY_DIVERGED = $2;
+ {$EXTERNALSYM DSCFX_AEC_STATUS_HISTORY_PREVIOUSLY_DIVERGED}
+ DSCFX_AEC_STATUS_CURRENTLY_CONVERGED = $8;
+ {$EXTERNALSYM DSCFX_AEC_STATUS_CURRENTLY_CONVERGED}
+
+type
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundCaptureFXAec);'}
+ {$EXTERNALSYM IDirectSoundCaptureFXAec}
+ IDirectSoundCaptureFXAec = interface(IUnknown)
+ ['{ad74143d-903d-4ab7-8066-28d363036d65}']
+ // IDirectSoundCaptureFXAec methods
+ function SetAllParameters(const pDscFxAec: TDSCFXAec): HResult; stdcall;
+ function GetAllParameters(out pDscFxAec: TDSCFXAec): HResult; stdcall;
+ function GetStatus(out pdwStatus: DWORD): HResult; stdcall;
+ function Reset: HResult; stdcall;
+ end;
+
+ IID_IDirectSoundCaptureFXAec = IDirectSoundCaptureFXAec;
+ {$EXTERNALSYM IID_IDirectSoundCaptureFXAec}
+
+
+ //
+ // IDirectSoundCaptureFXNoiseSuppress
+ //
+
+ PDSCFXNoiseSuppress = ^TDSCFXNoiseSuppress;
+ _DSCFXNoiseSuppress = packed record
+ fEnable: BOOL;
+ end;
+ {$EXTERNALSYM _DSCFXNoiseSuppress}
+ DSCFXNoiseSuppress = _DSCFXNoiseSuppress;
+ {$EXTERNALSYM DSCFXNoiseSuppress}
+ TDSCFXNoiseSuppress = _DSCFXNoiseSuppress;
+
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundCaptureFXNoiseSuppress);'}
+ {$EXTERNALSYM IDirectSoundCaptureFXNoiseSuppress}
+ IDirectSoundCaptureFXNoiseSuppress = interface(IUnknown)
+ ['{ed311e41-fbae-4175-9625-cd0854f693ca}']
+ // IDirectSoundCaptureFXNoiseSuppress methods
+ function SetAllParameters(const pcDscFxNoiseSuppress: TDSCFXNoiseSuppress): HResult; stdcall;
+ function GetAllParameters(out pDscFxNoiseSuppress: TDSCFXNoiseSuppress): HResult; stdcall;
+ function Reset: HResult; stdcall;
+ end;
+
+ IID_IDirectSoundCaptureFXNoiseSuppress = IDirectSoundCaptureFXNoiseSuppress;
+ {$EXTERNALSYM IID_IDirectSoundCaptureFXNoiseSuppress}
+
+
+ //
+ // IDirectSoundFullDuplex
+ //
+
+ {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectSoundFullDuplex);'}
+ {$EXTERNALSYM IDirectSoundFullDuplex}
+ IDirectSoundFullDuplex = interface(IUnknown)
+ ['{edcb4c7a-daab-4216-a42e-6c50596ddc1d}']
+ // IDirectSoundFullDuplex methods
+ function Initialize(pCaptureGuid, pRenderGuid: PGUID;
+ const lpDscBufferDesc: TDSCBufferDesc; const lpDsBufferDesc: TDSBufferDesc;
+ hWnd: HWND; dwLevel: DWORD;
+ out lplpDirectSoundCaptureBuffer8: IDirectSoundCaptureBuffer8;
+ out lplpDirectSoundBuffer8: IDirectSoundBuffer8): HResult; stdcall;
+ end;
+
+ IID_IDirectSoundFullDuplex = IDirectSoundFullDuplex;
+ {$EXTERNALSYM IID_IDirectSoundFullDuplex}
+
+
+{$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
+
+//
+// DirectSound 8.0 interfaces.
+//
+
+{$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
+// IDirectSound8, IDirectSoundBuffer8 and IDirectSoundCaptureBuffer8 are the
+// only DirectSound 7.0 interfaces with changed functionality in version 8.0.
+// The other level 8 interfaces as equivalent to their level 7 counterparts:
+type
+ IDirectSoundCapture8 = IDirectSoundCapture;
+ {$EXTERNALSYM IDirectSoundCapture8}
+ IDirectSound3DListener8 = IDirectSound3DListener;
+ {$EXTERNALSYM IDirectSound3DListener8}
+ IDirectSound3DBuffer8 = IDirectSound3DBuffer;
+ {$EXTERNALSYM IDirectSound3DBuffer8}
+ IDirectSoundNotify8 = IDirectSoundNotify;
+ {$EXTERNALSYM IDirectSoundNotify8}
+ IDirectSoundFXGargle8 = IDirectSoundFXGargle;
+ {$EXTERNALSYM IDirectSoundFXGargle8}
+ IDirectSoundFXChorus8 = IDirectSoundFXChorus;
+ {$EXTERNALSYM IDirectSoundFXChorus8}
+ IDirectSoundFXFlanger8 = IDirectSoundFXFlanger;
+ {$EXTERNALSYM IDirectSoundFXFlanger8}
+ IDirectSoundFXEcho8 = IDirectSoundFXEcho;
+ {$EXTERNALSYM IDirectSoundFXEcho8}
+ IDirectSoundFXDistortion8 = IDirectSoundFXDistortion;
+ {$EXTERNALSYM IDirectSoundFXDistortion8}
+ IDirectSoundFXCompressor8 = IDirectSoundFXCompressor;
+ {$EXTERNALSYM IDirectSoundFXCompressor8}
+ IDirectSoundFXParamEq8 = IDirectSoundFXParamEq;
+ {$EXTERNALSYM IDirectSoundFXParamEq8}
+ IDirectSoundFXWavesReverb8 = IDirectSoundFXWavesReverb;
+ {$EXTERNALSYM IDirectSoundFXWavesReverb8}
+ IDirectSoundFXI3DL2Reverb8 = IDirectSoundFXI3DL2Reverb;
+ {$EXTERNALSYM IDirectSoundFXI3DL2Reverb8}
+ IDirectSoundCaptureFXAec8 = IDirectSoundCaptureFXAec;
+ {$EXTERNALSYM IDirectSoundCaptureFXAec8}
+ IDirectSoundCaptureFXNoiseSuppress8 = IDirectSoundCaptureFXNoiseSuppress;
+ {$EXTERNALSYM IDirectSoundCaptureFXNoiseSuppress8}
+ IDirectSoundFullDuplex8 = IDirectSoundFullDuplex;
+ {$EXTERNALSYM IDirectSoundFullDuplex8}
+
+ //
+ // IID definitions for the unchanged DirectSound 8.0 interfaces
+ //
+
+ IID_IDirectSoundCapture8 = IID_IDirectSoundCapture;
+ {$EXTERNALSYM IID_IDirectSoundCapture8}
+ IID_IDirectSound3DListener8 = IID_IDirectSound3DListener;
+ {$EXTERNALSYM IID_IDirectSound3DListener8}
+ IID_IDirectSound3DBuffer8 = IID_IDirectSound3DBuffer;
+ {$EXTERNALSYM IID_IDirectSound3DBuffer8}
+ IID_IDirectSoundNotify8 = IID_IDirectSoundNotify;
+ {$EXTERNALSYM IID_IDirectSoundNotify8}
+ IID_IDirectSoundFXGargle8 = IID_IDirectSoundFXGargle;
+ {$EXTERNALSYM IID_IDirectSoundFXGargle8}
+ IID_IDirectSoundFXChorus8 = IID_IDirectSoundFXChorus;
+ {$EXTERNALSYM IID_IDirectSoundFXChorus8}
+ IID_IDirectSoundFXFlanger8 = IID_IDirectSoundFXFlanger;
+ {$EXTERNALSYM IID_IDirectSoundFXFlanger8}
+ IID_IDirectSoundFXEcho8 = IID_IDirectSoundFXEcho;
+ {$EXTERNALSYM IID_IDirectSoundFXEcho8}
+ IID_IDirectSoundFXDistortion8 = IID_IDirectSoundFXDistortion;
+ {$EXTERNALSYM IID_IDirectSoundFXDistortion8}
+ IID_IDirectSoundFXCompressor8 = IID_IDirectSoundFXCompressor;
+ {$EXTERNALSYM IID_IDirectSoundFXCompressor8}
+ IID_IDirectSoundFXParamEq8 = IID_IDirectSoundFXParamEq;
+ {$EXTERNALSYM IID_IDirectSoundFXParamEq8}
+ IID_IDirectSoundFXWavesReverb8 = IID_IDirectSoundFXWavesReverb;
+ {$EXTERNALSYM IID_IDirectSoundFXWavesReverb8}
+ IID_IDirectSoundFXI3DL2Reverb8 = IID_IDirectSoundFXI3DL2Reverb;
+ {$EXTERNALSYM IID_IDirectSoundFXI3DL2Reverb8}
+ IID_IDirectSoundCaptureFXAec8 = IID_IDirectSoundCaptureFXAec;
+ {$EXTERNALSYM IID_IDirectSoundCaptureFXAec8}
+ IID_IDirectSoundCaptureFXNoiseSuppress8 = IID_IDirectSoundCaptureFXNoiseSuppress;
+ {$EXTERNALSYM IID_IDirectSoundCaptureFXNoiseSuppress8}
+ IID_IDirectSoundFullDuplex8 = IID_IDirectSoundFullDuplex;
+ {$EXTERNALSYM IID_IDirectSoundFullDuplex8}
+{$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
+
+const
+ //
+ // Return Codes
+ //
+
+ // The function completed successfully
+ DS_OK = S_OK;
+ {$EXTERNALSYM DS_OK}
+
+ // The call succeeded, but we had to substitute the 3D algorithm
+ DS_NO_VIRTUALIZATION = (0 shl 31) or (_FACDS shl 16) or 10; // MAKE_HRESULT(0, _FACDS, 10)
+ {$EXTERNALSYM DS_NO_VIRTUALIZATION}
+
+ // The call failed because resources (such as a priority level)
+ // were already being used by another caller
+ DSERR_ALLOCATED = MAKE_DSHRESULT_R or 10; // MAKE_DSHRESULT(10)
+ {$EXTERNALSYM DSERR_ALLOCATED}
+
+ // The control (vol, pan, etc.) requested by the caller is not available
+ DSERR_CONTROLUNAVAIL = MAKE_DSHRESULT_R or 30; // MAKE_DSHRESULT(30)
+ {$EXTERNALSYM DSERR_CONTROLUNAVAIL}
+
+ // An invalid parameter was passed to the returning function
+ DSERR_INVALIDPARAM = E_INVALIDARG;
+ {$EXTERNALSYM DSERR_INVALIDPARAM}
+
+ // This call is not valid for the current state of this object
+ DSERR_INVALIDCALL = MAKE_DSHRESULT_R or 50; // MAKE_DSHRESULT(50)
+ {$EXTERNALSYM DSERR_INVALIDCALL}
+
+ // An undetermined error occurred inside the DirectSound subsystem
+ DSERR_GENERIC = E_FAIL;
+ {$EXTERNALSYM DSERR_GENERIC}
+
+ // The caller does not have the priority level required for the function to
+ // succeed
+ DSERR_PRIOLEVELNEEDED = MAKE_DSHRESULT_R or 70; // MAKE_DSHRESULT(70)
+ {$EXTERNALSYM DSERR_PRIOLEVELNEEDED}
+
+ // Not enough free memory is available to complete the operation
+ DSERR_OUTOFMEMORY = E_OUTOFMEMORY;
+ {$EXTERNALSYM DSERR_OUTOFMEMORY}
+
+ // The specified WAVE format is not supported
+ DSERR_BADFORMAT = MAKE_DSHRESULT_R or 100; // MAKE_DSHRESULT(100)
+ {$EXTERNALSYM DSERR_BADFORMAT}
+
+ // The function called is not supported at this time
+ DSERR_UNSUPPORTED = E_NOTIMPL;
+ {$EXTERNALSYM DSERR_UNSUPPORTED}
+
+ // No sound driver is available for use
+ DSERR_NODRIVER = MAKE_DSHRESULT_R or 120; // MAKE_DSHRESULT(120)
+ {$EXTERNALSYM DSERR_NODRIVER}
+
+ // This object is already initialized
+ DSERR_ALREADYINITIALIZED = MAKE_DSHRESULT_R or 130; // MAKE_DSHRESULT(130)
+ {$EXTERNALSYM DSERR_ALREADYINITIALIZED}
+
+ // This object does not support aggregation
+ DSERR_NOAGGREGATION = CLASS_E_NOAGGREGATION;
+ {$EXTERNALSYM DSERR_NOAGGREGATION}
+
+ // The buffer memory has been lost, and must be restored
+ DSERR_BUFFERLOST = MAKE_DSHRESULT_R or 150; // MAKE_DSHRESULT(150)
+ {$EXTERNALSYM DSERR_BUFFERLOST}
+
+ // Another app has a higher priority level, preventing this call from
+ // succeeding
+ DSERR_OTHERAPPHASPRIO = MAKE_DSHRESULT_R or 160; // MAKE_DSHRESULT(160)
+ {$EXTERNALSYM DSERR_OTHERAPPHASPRIO}
+
+ // This object has not been initialized
+ DSERR_UNINITIALIZED = MAKE_DSHRESULT_R or 170; // MAKE_DSHRESULT(170)
+ {$EXTERNALSYM DSERR_UNINITIALIZED}
+
+ // The requested COM interface is not available
+ DSERR_NOINTERFACE = E_NOINTERFACE;
+ {$EXTERNALSYM DSERR_NOINTERFACE}
+
+ // Access is denied
+ DSERR_ACCESSDENIED = E_ACCESSDENIED;
+ {$EXTERNALSYM DSERR_ACCESSDENIED}
+
+ // Tried to create a DSBCAPS_CTRLFX buffer shorter than DSBSIZE_FX_MIN milliseconds
+ DSERR_BUFFERTOOSMALL = MAKE_DSHRESULT_R or 180; // MAKE_DSHRESULT(180)
+ {$EXTERNALSYM DSERR_BUFFERTOOSMALL}
+
+ // Attempt to use DirectSound 8 functionality on an older DirectSound object
+ DSERR_DS8_REQUIRED = MAKE_DSHRESULT_R or 190; // MAKE_DSHRESULT(190)
+ {$EXTERNALSYM DSERR_DS8_REQUIRED}
+
+ // A circular loop of send effects was detected
+ DSERR_SENDLOOP = MAKE_DSHRESULT_R or 200; // MAKE_DSHRESULT(200)
+ {$EXTERNALSYM DSERR_SENDLOOP}
+
+ // The GUID specified in an audiopath file does not match a valid MIXIN buffer
+ DSERR_BADSENDBUFFERGUID = MAKE_DSHRESULT_R or 210; // MAKE_DSHRESULT(210)
+ {$EXTERNALSYM DSERR_BADSENDBUFFERGUID}
+
+ // The object requested was not found (numerically equal to DMUS_E_NOT_FOUND)
+ DSERR_OBJECTNOTFOUND = MAKE_DSHRESULT_R or 4449; // MAKE_DSHRESULT(4449)
+ {$EXTERNALSYM DSERR_OBJECTNOTFOUND}
+
+ // The effects requested could not be found on the system, or they were found
+ // but in the wrong order, or in the wrong hardware/software locations.
+ DSERR_FXUNAVAILABLE = MAKE_DSHRESULT_R or 220; // MAKE_DSHRESULT(220)
+ {$EXTERNALSYM DSERR_FXUNAVAILABLE}
+
+ //
+ // Flags
+ //
+
+ DSCAPS_PRIMARYMONO = $00000001;
+ {$EXTERNALSYM DSCAPS_PRIMARYMONO}
+ DSCAPS_PRIMARYSTEREO = $00000002;
+ {$EXTERNALSYM DSCAPS_PRIMARYSTEREO}
+ DSCAPS_PRIMARY8BIT = $00000004;
+ {$EXTERNALSYM DSCAPS_PRIMARY8BIT}
+ DSCAPS_PRIMARY16BIT = $00000008;
+ {$EXTERNALSYM DSCAPS_PRIMARY16BIT}
+ DSCAPS_CONTINUOUSRATE = $00000010;
+ {$EXTERNALSYM DSCAPS_CONTINUOUSRATE}
+ DSCAPS_EMULDRIVER = $00000020;
+ {$EXTERNALSYM DSCAPS_EMULDRIVER}
+ DSCAPS_CERTIFIED = $00000040;
+ {$EXTERNALSYM DSCAPS_CERTIFIED}
+ DSCAPS_SECONDARYMONO = $00000100;
+ {$EXTERNALSYM DSCAPS_SECONDARYMONO}
+ DSCAPS_SECONDARYSTEREO = $00000200;
+ {$EXTERNALSYM DSCAPS_SECONDARYSTEREO}
+ DSCAPS_SECONDARY8BIT = $00000400;
+ {$EXTERNALSYM DSCAPS_SECONDARY8BIT}
+ DSCAPS_SECONDARY16BIT = $00000800;
+ {$EXTERNALSYM DSCAPS_SECONDARY16BIT}
+
+ DSSCL_NORMAL = $00000001;
+ {$EXTERNALSYM DSSCL_NORMAL}
+ DSSCL_PRIORITY = $00000002;
+ {$EXTERNALSYM DSSCL_PRIORITY}
+ DSSCL_EXCLUSIVE = $00000003;
+ {$EXTERNALSYM DSSCL_EXCLUSIVE}
+ DSSCL_WRITEPRIMARY = $00000004;
+ {$EXTERNALSYM DSSCL_WRITEPRIMARY}
+
+ DSSPEAKER_DIRECTOUT = $00000000;
+ {$EXTERNALSYM DSSPEAKER_DIRECTOUT}
+ DSSPEAKER_HEADPHONE = $00000001;
+ {$EXTERNALSYM DSSPEAKER_HEADPHONE}
+ DSSPEAKER_MONO = $00000002;
+ {$EXTERNALSYM DSSPEAKER_MONO}
+ DSSPEAKER_QUAD = $00000003;
+ {$EXTERNALSYM DSSPEAKER_QUAD}
+ DSSPEAKER_STEREO = $00000004;
+ {$EXTERNALSYM DSSPEAKER_STEREO}
+ DSSPEAKER_SURROUND = $00000005;
+ {$EXTERNALSYM DSSPEAKER_SURROUND}
+ DSSPEAKER_5POINT1 = $00000006;
+ {$EXTERNALSYM DSSPEAKER_5POINT1}
+ DSSPEAKER_7POINT1 = $00000007;
+ {$EXTERNALSYM DSSPEAKER_7POINT1}
+
+ DSSPEAKER_GEOMETRY_MIN = $00000005; // 5 degrees
+ {$EXTERNALSYM DSSPEAKER_GEOMETRY_MIN}
+ DSSPEAKER_GEOMETRY_NARROW = $0000000A; // 10 degrees
+ {$EXTERNALSYM DSSPEAKER_GEOMETRY_NARROW}
+ DSSPEAKER_GEOMETRY_WIDE = $00000014; // 20 degrees
+ {$EXTERNALSYM DSSPEAKER_GEOMETRY_WIDE}
+ DSSPEAKER_GEOMETRY_MAX = $000000B4; // 180 degrees
+ {$EXTERNALSYM DSSPEAKER_GEOMETRY_MAX}
+
+// #define DSSPEAKER_COMBINED(c, g) ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16))
+function DSSPEAKER_COMBINED(c, g: DWORD): DWORD;
+{$EXTERNALSYM DSSPEAKER_COMBINED}
+// #define DSSPEAKER_CONFIG(a) ((BYTE)(a))
+function DSSPEAKER_CONFIG(a: Cardinal): Byte;
+{$EXTERNALSYM DSSPEAKER_CONFIG}
+// #define DSSPEAKER_GEOMETRY(a) ((BYTE)(((DWORD)(a) >> 16) & 0x00FF))
+function DSSPEAKER_GEOMETRY(a: Cardinal): Byte;
+{$EXTERNALSYM DSSPEAKER_GEOMETRY}
+
+const
+ DSBCAPS_PRIMARYBUFFER = $00000001;
+ {$EXTERNALSYM DSBCAPS_PRIMARYBUFFER}
+ DSBCAPS_STATIC = $00000002;
+ {$EXTERNALSYM DSBCAPS_STATIC}
+ DSBCAPS_LOCHARDWARE = $00000004;
+ {$EXTERNALSYM DSBCAPS_LOCHARDWARE}
+ DSBCAPS_LOCSOFTWARE = $00000008;
+ {$EXTERNALSYM DSBCAPS_LOCSOFTWARE}
+ DSBCAPS_CTRL3D = $00000010;
+ {$EXTERNALSYM DSBCAPS_CTRL3D}
+ DSBCAPS_CTRLFREQUENCY = $00000020;
+ {$EXTERNALSYM DSBCAPS_CTRLFREQUENCY}
+ DSBCAPS_CTRLPAN = $00000040;
+ {$EXTERNALSYM DSBCAPS_CTRLPAN}
+ DSBCAPS_CTRLVOLUME = $00000080;
+ {$EXTERNALSYM DSBCAPS_CTRLVOLUME}
+ DSBCAPS_CTRLPOSITIONNOTIFY = $00000100;
+ {$EXTERNALSYM DSBCAPS_CTRLPOSITIONNOTIFY}
+ DSBCAPS_CTRLFX = $00000200;
+ {$EXTERNALSYM DSBCAPS_CTRLFX}
+ DSBCAPS_STICKYFOCUS = $00004000;
+ {$EXTERNALSYM DSBCAPS_STICKYFOCUS}
+ DSBCAPS_GLOBALFOCUS = $00008000;
+ {$EXTERNALSYM DSBCAPS_GLOBALFOCUS}
+ DSBCAPS_GETCURRENTPOSITION2 = $00010000;
+ {$EXTERNALSYM DSBCAPS_GETCURRENTPOSITION2}
+ DSBCAPS_MUTE3DATMAXDISTANCE = $00020000;
+ {$EXTERNALSYM DSBCAPS_MUTE3DATMAXDISTANCE}
+ DSBCAPS_LOCDEFER = $00040000;
+ {$EXTERNALSYM DSBCAPS_LOCDEFER}
+
+ DSBPLAY_LOOPING = $00000001;
+ {$EXTERNALSYM DSBPLAY_LOOPING}
+ DSBPLAY_LOCHARDWARE = $00000002;
+ {$EXTERNALSYM DSBPLAY_LOCHARDWARE}
+ DSBPLAY_LOCSOFTWARE = $00000004;
+ {$EXTERNALSYM DSBPLAY_LOCSOFTWARE}
+ DSBPLAY_TERMINATEBY_TIME = $00000008;
+ {$EXTERNALSYM DSBPLAY_TERMINATEBY_TIME}
+ DSBPLAY_TERMINATEBY_DISTANCE = $000000010;
+ {$EXTERNALSYM DSBPLAY_TERMINATEBY_DISTANCE}
+ DSBPLAY_TERMINATEBY_PRIORITY = $000000020;
+ {$EXTERNALSYM DSBPLAY_TERMINATEBY_PRIORITY}
+
+ DSBSTATUS_PLAYING = $00000001;
+ {$EXTERNALSYM DSBSTATUS_PLAYING}
+ DSBSTATUS_BUFFERLOST = $00000002;
+ {$EXTERNALSYM DSBSTATUS_BUFFERLOST}
+ DSBSTATUS_LOOPING = $00000004;
+ {$EXTERNALSYM DSBSTATUS_LOOPING}
+ DSBSTATUS_LOCHARDWARE = $00000008;
+ {$EXTERNALSYM DSBSTATUS_LOCHARDWARE}
+ DSBSTATUS_LOCSOFTWARE = $00000010;
+ {$EXTERNALSYM DSBSTATUS_LOCSOFTWARE}
+ DSBSTATUS_TERMINATED = $00000020;
+ {$EXTERNALSYM DSBSTATUS_TERMINATED}
+
+ DSBLOCK_FROMWRITECURSOR = $00000001;
+ {$EXTERNALSYM DSBLOCK_FROMWRITECURSOR}
+ DSBLOCK_ENTIREBUFFER = $00000002;
+ {$EXTERNALSYM DSBLOCK_ENTIREBUFFER}
+
+ DSBFREQUENCY_ORIGINAL = 0;
+ {$EXTERNALSYM DSBFREQUENCY_ORIGINAL}
+ DSBFREQUENCY_MIN = 100;
+ {$EXTERNALSYM DSBFREQUENCY_MIN}
+{$IFDEF DIRECTSOUND_VERSION_9} // #if DIRECTSOUND_VERSION >= 0x0900
+ DSBFREQUENCY_MAX = 200000;
+ {$EXTERNALSYM DSBFREQUENCY_MAX}
+{$ELSE}
+ DSBFREQUENCY_MAX = 100000;
+ {$EXTERNALSYM DSBFREQUENCY_MAX}
+{$ENDIF}
+
+ DSBPAN_LEFT = -10000;
+ {$EXTERNALSYM DSBPAN_LEFT}
+ DSBPAN_CENTER = 0;
+ {$EXTERNALSYM DSBPAN_CENTER}
+ DSBPAN_RIGHT = 10000;
+ {$EXTERNALSYM DSBPAN_RIGHT}
+
+ DSBVOLUME_MIN = -10000;
+ {$EXTERNALSYM DSBVOLUME_MIN}
+ DSBVOLUME_MAX = 0;
+ {$EXTERNALSYM DSBVOLUME_MAX}
+
+ DSBSIZE_MIN = 4;
+ {$EXTERNALSYM DSBSIZE_MIN}
+ DSBSIZE_MAX = $0FFFFFFF;
+ {$EXTERNALSYM DSBSIZE_MAX}
+ DSBSIZE_FX_MIN = 150; // NOTE: Milliseconds, not bytes
+ {$EXTERNALSYM DSBSIZE_FX_MIN}
+
+ DS3DMODE_NORMAL = $00000000;
+ {$EXTERNALSYM DS3DMODE_NORMAL}
+ DS3DMODE_HEADRELATIVE = $00000001;
+ {$EXTERNALSYM DS3DMODE_HEADRELATIVE}
+ DS3DMODE_DISABLE = $00000002;
+ {$EXTERNALSYM DS3DMODE_DISABLE}
+
+ DS3D_IMMEDIATE = $00000000;
+ {$EXTERNALSYM DS3D_IMMEDIATE}
+ DS3D_DEFERRED = $00000001;
+ {$EXTERNALSYM DS3D_DEFERRED}
+var
+ // Forced to define as 'var' cos pascal compiler treats all consts as Double
+ DS3D_MINDISTANCEFACTOR: Single = 1.175494351e-38; // FLT_MIN;
+ {$EXTERNALSYM DS3D_MINDISTANCEFACTOR}
+ DS3D_MAXDISTANCEFACTOR: Single = 3.402823466e+38; // FLT_MAX;
+ {$EXTERNALSYM DS3D_MAXDISTANCEFACTOR}
+const
+ DS3D_DEFAULTDISTANCEFACTOR = 1.0;
+ {$EXTERNALSYM DS3D_DEFAULTDISTANCEFACTOR}
+
+ DS3D_MINROLLOFFFACTOR = 0.0;
+ {$EXTERNALSYM DS3D_MINROLLOFFFACTOR}
+ DS3D_MAXROLLOFFFACTOR = 10.0;
+ {$EXTERNALSYM DS3D_MAXROLLOFFFACTOR}
+ DS3D_DEFAULTROLLOFFFACTOR = 1.0;
+ {$EXTERNALSYM DS3D_DEFAULTROLLOFFFACTOR}
+
+ DS3D_MINDOPPLERFACTOR = 0.0;
+ {$EXTERNALSYM DS3D_MINDOPPLERFACTOR}
+ DS3D_MAXDOPPLERFACTOR = 10.0;
+ {$EXTERNALSYM DS3D_MAXDOPPLERFACTOR}
+ DS3D_DEFAULTDOPPLERFACTOR = 1.0;
+ {$EXTERNALSYM DS3D_DEFAULTDOPPLERFACTOR}
+
+ DS3D_DEFAULTMINDISTANCE = 1.0;
+ {$EXTERNALSYM DS3D_DEFAULTMINDISTANCE}
+ DS3D_DEFAULTMAXDISTANCE = 1000000000.0;
+ {$EXTERNALSYM DS3D_DEFAULTMAXDISTANCE}
+
+ DS3D_MINCONEANGLE = 0;
+ {$EXTERNALSYM DS3D_MINCONEANGLE}
+ DS3D_MAXCONEANGLE = 360;
+ {$EXTERNALSYM DS3D_MAXCONEANGLE}
+ DS3D_DEFAULTCONEANGLE = 360;
+ {$EXTERNALSYM DS3D_DEFAULTCONEANGLE}
+
+ DS3D_DEFAULTCONEOUTSIDEVOLUME = DSBVOLUME_MAX;
+ {$EXTERNALSYM DS3D_DEFAULTCONEOUTSIDEVOLUME}
+
+ // IDirectSoundCapture attributes
+
+ DSCCAPS_EMULDRIVER = DSCAPS_EMULDRIVER;
+ {$EXTERNALSYM DSCCAPS_EMULDRIVER}
+ DSCCAPS_CERTIFIED = DSCAPS_CERTIFIED;
+ {$EXTERNALSYM DSCCAPS_CERTIFIED}
+ DSCCAPS_MULTIPLECAPTURE = $00000001;
+ {$EXTERNALSYM DSCCAPS_MULTIPLECAPTURE}
+
+ // IDirectSoundCaptureBuffer attributes
+
+ DSCBCAPS_WAVEMAPPED = $80000000;
+ {$EXTERNALSYM DSCBCAPS_WAVEMAPPED}
+
+{$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
+ DSCBCAPS_CTRLFX = $00000200;
+ {$EXTERNALSYM DSCBCAPS_CTRLFX}
+{$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
+
+
+ DSCBLOCK_ENTIREBUFFER = $00000001;
+ {$EXTERNALSYM DSCBLOCK_ENTIREBUFFER}
+
+ DSCBSTATUS_CAPTURING = $00000001;
+ {$EXTERNALSYM DSCBSTATUS_CAPTURING}
+ DSCBSTATUS_LOOPING = $00000002;
+ {$EXTERNALSYM DSCBSTATUS_LOOPING}
+
+ DSCBSTART_LOOPING = $00000001;
+ {$EXTERNALSYM DSCBSTART_LOOPING}
+
+ DSBPN_OFFSETSTOP = $FFFFFFFF;
+ {$EXTERNALSYM DSBPN_OFFSETSTOP}
+
+ DS_CERTIFIED = $00000000;
+ {$EXTERNALSYM DS_CERTIFIED}
+ DS_UNCERTIFIED = $00000001;
+ {$EXTERNALSYM DS_UNCERTIFIED}
+
+
+ //
+ // Flags for the I3DL2 effects
+ //
+
+ //
+ // I3DL2 Material Presets
+ //
+
+ DSFX_I3DL2_MATERIAL_PRESET_SINGLEWINDOW = 0;
+ {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_SINGLEWINDOW}
+ DSFX_I3DL2_MATERIAL_PRESET_DOUBLEWINDOW = 1;
+ {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_DOUBLEWINDOW}
+ DSFX_I3DL2_MATERIAL_PRESET_THINDOOR = 2;
+ {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_THINDOOR}
+ DSFX_I3DL2_MATERIAL_PRESET_THICKDOOR = 3;
+ {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_THICKDOOR}
+ DSFX_I3DL2_MATERIAL_PRESET_WOODWALL = 4;
+ {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_WOODWALL}
+ DSFX_I3DL2_MATERIAL_PRESET_BRICKWALL = 5;
+ {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_BRICKWALL}
+ DSFX_I3DL2_MATERIAL_PRESET_STONEWALL = 6;
+ {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_STONEWALL}
+ DSFX_I3DL2_MATERIAL_PRESET_CURTAIN = 7;
+ {$EXTERNALSYM DSFX_I3DL2_MATERIAL_PRESET_CURTAIN}
+
+//Translator: have not found where these defines are used
+{
+#define I3DL2_MATERIAL_PRESET_SINGLEWINDOW -2800,0.71f
+#define I3DL2_MATERIAL_PRESET_DOUBLEWINDOW -5000,0.40f
+#define I3DL2_MATERIAL_PRESET_THINDOOR -1800,0.66f
+#define I3DL2_MATERIAL_PRESET_THICKDOOR -4400,0.64f
+#define I3DL2_MATERIAL_PRESET_WOODWALL -4000,0.50f
+#define I3DL2_MATERIAL_PRESET_BRICKWALL -5000,0.60f
+#define I3DL2_MATERIAL_PRESET_STONEWALL -6000,0.68f
+#define I3DL2_MATERIAL_PRESET_CURTAIN -1200,0.15f
+}
+
+ DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT = 0;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC = 1;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL = 2;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM = 3;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM = 4;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM = 5;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM = 6;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM = 7;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL = 8;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE = 9;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA = 10;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR = 11;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY = 12;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY = 13;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR = 14;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY = 15;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST = 16;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_CITY = 17;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_CITY}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS = 18;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY = 19;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN = 20;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT = 21;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE = 22;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER = 23;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM = 24;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM = 25;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM = 26;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL = 27;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL = 28;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL}
+ DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE = 29;
+ {$EXTERNALSYM DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE}
+
+ //
+ // I3DL2 Reverberation Presets Values
+ //
+
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_DEFAULT}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_GENERIC}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_PADDEDCELL}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_ROOM}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_BATHROOM}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_LIVINGROOM}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_STONEROOM}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_AUDITORIUM}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_CONCERTHALL}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_CAVE}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_ARENA}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_HANGAR}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_HALLWAY}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_ALLEY}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_FOREST}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_CITY}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_MOUNTAINS}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_QUARRY}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_PLAIN}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_PARKINGLOT}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_SEWERPIPE}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_UNDERWATER}
+
+ //
+ // Examples simulating 'musical' reverb presets
+ //
+ // Name Decay time Description
+ // Small Room 1.1s A small size room with a length of 5m or so.
+ // Medium Room 1.3s A medium size room with a length of 10m or so.
+ // Large Room 1.5s A large size room suitable for live performances.
+ // Medium Hall 1.8s A medium size concert hall.
+ // Large Hall 1.8s A large size concert hall suitable for a full orchestra.
+ // Plate 1.3s A plate reverb simulation.
+ //
+
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_SMALLROOM}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_LARGEROOM}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_LARGEHALL}
+ 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);
+ {$EXTERNALSYM I3DL2_ENVIRONMENT_PRESET_PLATE}
+
+ //
+ // DirectSound3D Algorithms
+ //
+
+ // Default DirectSound3D algorithm {00000000-0000-0000-0000-000000000000}
+ DS3DALG_DEFAULT : TGUID = '{00000000-0000-0000-0000-000000000000}'; // GUID_NULL;
+ {$EXTERNALSYM DS3DALG_DEFAULT}
+
+ // No virtualization (Pan3D) {C241333F-1C1B-11d2-94F5-00C04FC28ACA}
+ DS3DALG_NO_VIRTUALIZATION: TGUID = '{c241333f-1c1b-11d2-94f5-00c04fc28aca}';
+ {$EXTERNALSYM DS3DALG_NO_VIRTUALIZATION}
+
+ // High-quality HRTF algorithm {C2413340-1C1B-11d2-94F5-00C04FC28ACA}
+ DS3DALG_HRTF_FULL: TGUID = '{c2413340-1c1b-11d2-94f5-00c04fc28aca}';
+ {$EXTERNALSYM DS3DALG_HRTF_FULL}
+
+ // Lower-quality HRTF algorithm {C2413342-1C1B-11d2-94F5-00C04FC28ACA}
+ DS3DALG_HRTF_LIGHT: TGUID = '{c2413342-1c1b-11d2-94f5-00c04fc28aca}';
+ {$EXTERNALSYM DS3DALG_HRTF_LIGHT}
+
+
+{$IFDEF DIRECTSOUND_VERSION_8} // #if DIRECTSOUND_VERSION >= 0x0800
+
+ //
+ // DirectSound Internal Effect Algorithms
+ //
+
+
+ // Gargle {DAFD8210-5711-4B91-9FE3-F75B7AE279BF}
+ GUID_DSFX_STANDARD_GARGLE: TGUID = '{dafd8210-5711-4b91-9fe3-f75b7ae279bf}';
+ {$EXTERNALSYM GUID_DSFX_STANDARD_GARGLE}
+
+ // Chorus {EFE6629C-81F7-4281-BD91-C9D604A95AF6}
+ GUID_DSFX_STANDARD_CHORUS: TGUID = '{efe6629c-81f7-4281-bd91-c9d604a95af6}';
+ {$EXTERNALSYM GUID_DSFX_STANDARD_CHORUS}
+
+ // Flanger {EFCA3D92-DFD8-4672-A603-7420894BAD98}
+ GUID_DSFX_STANDARD_FLANGER: TGUID = '{efca3d92-dfd8-4672-a603-7420894bad98}';
+ {$EXTERNALSYM GUID_DSFX_STANDARD_FLANGER}
+
+ // Echo/Delay {EF3E932C-D40B-4F51-8CCF-3F98F1B29D5D}
+ GUID_DSFX_STANDARD_ECHO: TGUID = '{ef3e932c-d40b-4f51-8ccf-3f98f1b29d5d}';
+ {$EXTERNALSYM GUID_DSFX_STANDARD_ECHO}
+
+ // Distortion {EF114C90-CD1D-484E-96E5-09CFAF912A21}
+ GUID_DSFX_STANDARD_DISTORTION: TGUID = '{ef114c90-cd1d-484e-96e5-09cfaf912a21}';
+ {$EXTERNALSYM GUID_DSFX_STANDARD_DISTORTION}
+
+ // Compressor/Limiter {EF011F79-4000-406D-87AF-BFFB3FC39D57}
+ GUID_DSFX_STANDARD_COMPRESSOR: TGUID = '{ef011f79-4000-406d-87af-bffb3fc39d57}';
+ {$EXTERNALSYM GUID_DSFX_STANDARD_COMPRESSOR}
+
+ // Parametric Equalization {120CED89-3BF4-4173-A132-3CB406CF3231}
+ GUID_DSFX_STANDARD_PARAMEQ: TGUID = '{120ced89-3bf4-4173-a132-3cb406cf3231}';
+ {$EXTERNALSYM GUID_DSFX_STANDARD_PARAMEQ}
+
+ // I3DL2 Environmental Reverberation: Reverb (Listener) Effect {EF985E71-D5C7-42D4-BA4D-2D073E2E96F4}
+ GUID_DSFX_STANDARD_I3DL2REVERB: TGUID = '{ef985e71-d5c7-42d4-ba4d-2d073e2e96f4}';
+ {$EXTERNALSYM GUID_DSFX_STANDARD_I3DL2REVERB}
+
+ // Waves Reverberation {87FC0268-9A55-4360-95AA-004A1D9DE26C}
+ GUID_DSFX_WAVES_REVERB: TGUID = '{87fc0268-9a55-4360-95aa-004a1d9de26c}';
+ {$EXTERNALSYM GUID_DSFX_WAVES_REVERB}
+
+ //
+ // DirectSound Capture Effect Algorithms
+ //
+
+
+ // Acoustic Echo Canceller {BF963D80-C559-11D0-8A2B-00A0C9255AC1}
+ // Matches KSNODETYPE_ACOUSTIC_ECHO_CANCEL in ksmedia.h
+ GUID_DSCFX_CLASS_AEC: TGUID = '{BF963D80-C559-11D0-8A2B-00A0C9255AC1}';
+ {$EXTERNALSYM GUID_DSCFX_CLASS_AEC}
+
+ // Microsoft AEC {CDEBB919-379A-488a-8765-F53CFD36DE40}
+ GUID_DSCFX_MS_AEC: TGUID = '{cdebb919-379a-488a-8765-f53cfd36de40}';
+ {$EXTERNALSYM GUID_DSCFX_MS_AEC}
+
+ // System AEC {1C22C56D-9879-4f5b-A389-27996DDC2810}
+ GUID_DSCFX_SYSTEM_AEC: TGUID = '{1c22c56d-9879-4f5b-a389-27996ddc2810}';
+ {$EXTERNALSYM GUID_DSCFX_SYSTEM_AEC}
+
+ // Noise Supression {E07F903F-62FD-4e60-8CDD-DEA7236665B5}
+ // Matches KSNODETYPE_NOISE_SUPPRESS in post Windows ME DDK's ksmedia.h
+ GUID_DSCFX_CLASS_NS: TGUID = '{e07f903f-62fd-4e60-8cdd-dea7236665b5}';
+ {$EXTERNALSYM GUID_DSCFX_CLASS_NS}
+
+ // Microsoft Noise Suppresion {11C5C73B-66E9-4ba1-A0BA-E814C6EED92D}
+ GUID_DSCFX_MS_NS: TGUID = '{11c5c73b-66e9-4ba1-a0ba-e814c6eed92d}';
+ {$EXTERNALSYM GUID_DSCFX_MS_NS}
+
+ // System Noise Suppresion {5AB0882E-7274-4516-877D-4EEE99BA4FD0}
+ GUID_DSCFX_SYSTEM_NS: TGUID = '{5ab0882e-7274-4516-877d-4eee99ba4fd0}';
+ {$EXTERNALSYM GUID_DSCFX_SYSTEM_NS}
+
+{$ENDIF} // DIRECTSOUND_VERSION >= 0x0800
+
+
+
+//
+// DirectSound API
+//
+
+type
+ TDSEnumCallbackA = function(lpGuid: PGUID; lpcstrDescription, lpcstrModule: PAnsiChar;
+ lpContext: Pointer): BOOL; stdcall;
+ {$NODEFINE TDSEnumCallbackA}
+ TDSEnumCallbackW = function(lpGuid: PGUID; lpcstrDescription, lpcstrModule: PWideChar;
+ lpContext: Pointer): BOOL; stdcall;
+ {$NODEFINE TDSEnumCallbackW}
+{$IFDEF UNICODE}
+ TDSEnumCallback = TDSEnumCallbackW;
+{$ELSE}
+ TDSEnumCallback = TDSEnumCallbackA;
+{$ENDIF}
+ {$NODEFINE TDSEnumCallback}
+ {$HPPEMIT 'typedef LPDSENUMCALLBACKA TDSEnumCallbackA;'}
+ {$HPPEMIT 'typedef LPDSENUMCALLBACKW TDSEnumCallbackW;'}
+ {$HPPEMIT 'typedef LPDSENUMCALLBACK TDSEnumCallback;'}
+
+const
+ DirectSoundDll = 'dsound.dll';
+
+function DirectSoundLoaded: Boolean;
+function UnLoadDirectSound: Boolean;
+function LoadDirectSound: Boolean;
+
+{$IFDEF DIRECTSOUND_DYNAMIC_LINK}
+var
+ DirectSoundCreate: function(lpGuid: PGUID; out ppDS: IDirectSound; pUnkOuter: IUnknown): HResult; stdcall;
+ {$EXTERNALSYM DirectSoundCreate}
+ DirectSoundEnumerateW: function(lpDSEnumCallback: TDSEnumCallbackW; lpContext: Pointer): HResult; stdcall;
+ {$EXTERNALSYM DirectSoundEnumerateW}
+ DirectSoundEnumerateA: function(lpDSEnumCallback: TDSEnumCallbackA; lpContext: Pointer): HResult; stdcall;
+ {$EXTERNALSYM DirectSoundEnumerateA}
+ DirectSoundEnumerate: function(lpDSEnumCallback: TDSEnumCallback; lpContext: Pointer): HResult; stdcall;
+ {$EXTERNALSYM DirectSoundEnumerate}
+
+ DirectSoundCaptureCreate: function(lpGUID: PGUID; out lplpDSC: IDirectSoundCapture; pUnkOuter: IUnknown): HResult; stdcall;
+ {$EXTERNALSYM DirectSoundCaptureCreate}
+ DirectSoundCaptureEnumerateW: function(lpDSEnumCallback: TDSEnumCallbackW; lpContext: Pointer): HResult; stdcall;
+ {$EXTERNALSYM DirectSoundCaptureEnumerateW}
+ DirectSoundCaptureEnumerateA: function(lpDSEnumCallback: TDSEnumCallbackA; lpContext: Pointer): HResult; stdcall;
+ {$EXTERNALSYM DirectSoundCaptureEnumerateA}
+ DirectSoundCaptureEnumerate: function(lpDSEnumCallback: TDSEnumCallback; lpContext: Pointer): HResult; stdcall;
+ {$EXTERNALSYM DirectSoundCaptureEnumerate}
+
+//#if DIRECTSOUND_VERSION >= 0x0800
+type
+ TDirectSoundFullDuplexCreateFunc = function(pcGuidCaptureDevice, pcGuidRenderDevice: PGUID;
+ const pcDSCBufferDesc: TDSCBufferDesc; const pcDSBufferDesc: TDSBufferDesc;
+ hWnd: hWnd; dwLevel: DWORD; out ppDSFD: IDirectSoundFullDuplex8;
+ out ppDSCBuffer8: IDirectSoundCaptureBuffer8; out ppDSBuffer8: IDirectSoundBuffer8;
+ pUnkOuter: IUnknown): HResult; stdcall;
+
+var
+ DirectSoundCreate8: function(pcGuidDevice: PGUID; out ppDS8: IDirectSound8; pUnkOuter: IUnknown): HResult; stdcall;
+ {$EXTERNALSYM DirectSoundCreate8}
+ DirectSoundCaptureCreate8: function(pcGuidDevice: PGUID; out ppDSC8: IDirectSoundCapture8; pUnkOuter: IUnknown): HResult; stdcall;
+ {$EXTERNALSYM DirectSoundCaptureCreate8}
+ DirectSoundFullDuplexCreate: TDirectSoundFullDuplexCreateFunc;
+ {$EXTERNALSYM DirectSoundFullDuplexCreate}
+ DirectSoundFullDuplexCreate8: TDirectSoundFullDuplexCreateFunc;
+ {$EXTERNALSYM DirectSoundFullDuplexCreate8}
+
+ GetDeviceID: function(pGuidSrc, pGuidDest: PGUID): HResult; stdcall;
+ {$EXTERNALSYM GetDeviceID}
+//#endif // DIRECTSOUND_VERSION >= 0x0800
+
+{$ELSE}
+function DirectSoundCreate(lpGuid: PGUID; out ppDS: IDirectSound; pUnkOuter: IUnknown): HResult; stdcall; external DirectSoundDLL;
+{$EXTERNALSYM DirectSoundCreate}
+function DirectSoundEnumerateW(lpDSEnumCallback: TDSEnumCallbackW; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundEnumerateW';
+{$EXTERNALSYM DirectSoundEnumerateW}
+function DirectSoundEnumerateA(lpDSEnumCallback: TDSEnumCallbackA; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundEnumerateA';
+{$EXTERNALSYM DirectSoundEnumerateA}
+{$IFDEF UNICODE}
+function DirectSoundEnumerate(lpDSEnumCallback: TDSEnumCallback; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundEnumerateW';
+{$ELSE}
+function DirectSoundEnumerate(lpDSEnumCallback: TDSEnumCallback; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundEnumerateA';
+{$ENDIF}
+{$EXTERNALSYM DirectSoundEnumerate}
+
+function DirectSoundCaptureCreate(lpGUID: PGUID; out lplpDSC: IDirectSoundCapture; pUnkOuter: IUnknown): HResult; stdcall; external DirectSoundDLL;
+{$EXTERNALSYM DirectSoundCaptureCreate}
+function DirectSoundCaptureEnumerateW(lpDSEnumCallback: TDSEnumCallbackW; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundCaptureEnumerateW';
+{$EXTERNALSYM DirectSoundCaptureEnumerateW}
+function DirectSoundCaptureEnumerateA(lpDSEnumCallback: TDSEnumCallbackA; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundCaptureEnumerateA';
+{$EXTERNALSYM DirectSoundCaptureEnumerateA}
+{$IFDEF UNICODE}
+function DirectSoundCaptureEnumerate(lpDSEnumCallback: TDSEnumCallback; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundCaptureEnumerateW';
+{$ELSE}
+function DirectSoundCaptureEnumerate(lpDSEnumCallback: TDSEnumCallback; lpContext: Pointer): HResult; stdcall; external DirectSoundDLL name 'DirectSoundCaptureEnumerateA';
+{$ENDIF}
+{$EXTERNALSYM DirectSoundCaptureEnumerate}
+
+//#if DIRECTSOUND_VERSION >= 0x0800
+function DirectSoundCreate8(pcGuidDevice: PGUID; out ppDS8: IDirectSound8; pUnkOuter: IUnknown): HResult; stdcall; external DirectSoundDLL;
+{$EXTERNALSYM DirectSoundCreate8}
+function DirectSoundCaptureCreate8(pcGuidDevice: PGUID; out ppDSC8: IDirectSoundCapture8; pUnkOuter: IUnknown): HResult; stdcall; external DirectSoundDLL;
+{$EXTERNALSYM DirectSoundCaptureCreate8}
+function DirectSoundFullDuplexCreate(pcGuidCaptureDevice, pcGuidRenderDevice: PGUID;
+ const pcDSCBufferDesc: TDSCBufferDesc; const pcDSBufferDesc: TDSBufferDesc;
+ hWnd: hWnd; dwLevel: DWORD; out ppDSFD: IDirectSoundFullDuplex8;
+ out ppDSCBuffer8: IDirectSoundCaptureBuffer8; out ppDSBuffer8: IDirectSoundBuffer8;
+ pUnkOuter: IUnknown): HResult; stdcall; external DirectSoundDLL;
+{$EXTERNALSYM DirectSoundFullDuplexCreate}
+function DirectSoundFullDuplexCreate8(pcGuidCaptureDevice, pcGuidRenderDevice: PGUID;
+ const pcDSCBufferDesc: TDSCBufferDesc; const pcDSBufferDesc: TDSBufferDesc;
+ hWnd: hWnd; dwLevel: DWORD; out ppDSFD: IDirectSoundFullDuplex8;
+ out ppDSCBuffer8: IDirectSoundCaptureBuffer8; out ppDSBuffer8: IDirectSoundBuffer8;
+ pUnkOuter: IUnknown): HResult; stdcall; external DirectSoundDLL;
+{$EXTERNALSYM DirectSoundFullDuplexCreate8}
+
+function GetDeviceID(pGuidSrc, pGuidDest: PGUID): HResult; stdcall; external DirectSoundDLL;
+{$EXTERNALSYM GetDeviceID}
+//#endif // DIRECTSOUND_VERSION >= 0x0800
+
+{$ENDIF}
+
+
+implementation
+
+// #define MAKE_DSHRESULT(code) MAKE_HRESULT(1, _FACDS, code)
+function MAKE_DSHRESULT(Code: DWord): DWord;
+begin
+ Result:= DWord((1 shl 31) or (_FACDS shl 16)) or Code;
+end;
+
+// #define DSSPEAKER_COMBINED(c, g) ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16))
+function DSSPEAKER_COMBINED(c, g: DWORD): DWORD;
+begin
+ Result:= Byte(c) or (DWORD(Byte(g)) shl 16);
+end;
+
+// #define DSSPEAKER_CONFIG(a) ((BYTE)(a))
+function DSSPEAKER_CONFIG(a: Cardinal): Byte;
+begin
+ Result:= Byte(a);
+end;
+
+// #define DSSPEAKER_GEOMETRY(a) ((BYTE)(((DWORD)(a) >> 16) & 0x00FF))
+function DSSPEAKER_GEOMETRY(a: Cardinal): Byte;
+begin
+ Result:= Byte((DWORD(a) shr 16) and $00FF);
+end;
+
+
+{$IFDEF DIRECTSOUND_DYNAMIC_LINK}
+var
+ DirectSoundLib: THandle = 0;
+
+function DirectSoundLoaded: Boolean;
+begin
+ Result:= (DirectSoundLib <> 0);
+end;
+
+function UnLoadDirectSound: Boolean;
+begin
+ Result:= True;
+ if (DirectSoundLib <> 0) then
+ begin
+ Result:= Result and FreeLibrary(DirectSoundLib);
+
+ DirectSoundCreate:= nil;
+ DirectSoundEnumerateW:= nil;
+ DirectSoundEnumerateA:= nil;
+ DirectSoundEnumerate:= nil;
+
+ DirectSoundCaptureCreate:= nil;
+ DirectSoundCaptureEnumerateW:= nil;
+ DirectSoundCaptureEnumerateA:= nil;
+ DirectSoundCaptureEnumerate:= nil;
+
+ //#if DIRECTSOUND_VERSION >= 0x0800
+ DirectSoundCreate8:= nil;
+ DirectSoundCaptureCreate8:= nil;
+ DirectSoundFullDuplexCreate:= nil;
+ DirectSoundFullDuplexCreate8:= nil;
+
+ GetDeviceID:= nil;
+
+ DirectSoundLib:= 0;
+ end;
+end;
+
+function LoadDirectSound: Boolean;
+begin
+ Result:= DirectSoundLoaded;
+ if (not Result) then
+ begin
+ DirectSoundLib:= LoadLibrary(DirectSoundDll);
+ if (DirectSoundLib<>0) then
+ begin
+ DirectSoundCreate:= GetProcAddress(DirectSoundLib, 'DirectSoundCreate');
+ DirectSoundEnumerateW:= GetProcAddress(DirectSoundLib, 'DirectSoundEnumerateW');
+ DirectSoundEnumerateA:= GetProcAddress(DirectSoundLib, 'DirectSoundEnumerateA');
+ {$IFDEF UNICODE}
+ DirectSoundEnumerate:= GetProcAddress(DirectSoundLib, 'DirectSoundEnumerateW');
+ {$ELSE}
+ DirectSoundEnumerate:= GetProcAddress(DirectSoundLib, 'DirectSoundEnumerateA');
+ {$ENDIF}
+
+ DirectSoundCaptureCreate:= GetProcAddress(DirectSoundLib, 'DirectSoundCaptureCreate');
+ DirectSoundCaptureEnumerateW:= GetProcAddress(DirectSoundLib, 'DirectSoundCaptureEnumerateW');
+ DirectSoundCaptureEnumerateA:= GetProcAddress(DirectSoundLib, 'DirectSoundCaptureEnumerateA');
+ {$IFDEF UNICODE}
+ DirectSoundCaptureEnumerate:= GetProcAddress(DirectSoundLib, 'DirectSoundCaptureEnumerateW');
+ {$ELSE}
+ DirectSoundCaptureEnumerate:= GetProcAddress(DirectSoundLib, 'DirectSoundCaptureEnumerateA');
+ {$ENDIF}
+
+ //#if DIRECTSOUND_VERSION >= 0x0800
+ DirectSoundCreate8:= GetProcAddress(DirectSoundLib, 'DirectSoundCreate8');
+ DirectSoundCaptureCreate8:= GetProcAddress(DirectSoundLib, 'DirectSoundCaptureCreate8');
+ DirectSoundFullDuplexCreate:= GetProcAddress(DirectSoundLib, 'DirectSoundFullDuplexCreate');
+ DirectSoundFullDuplexCreate8:= GetProcAddress(DirectSoundLib, 'DirectSoundFullDuplexCreate');
+
+ GetDeviceID:= GetProcAddress(DirectSoundLib, 'GetDeviceID');
+ //#endif // DIRECTSOUND_VERSION >= 0x0800
+ end;
+
+ Result:= Assigned(DirectSoundCreate);
+ if not Result then UnLoadDirectSound;
+ end;
+end;
+{$ELSE}
+function DirectSoundLoaded: Boolean;
+begin // Stub function for static linking
+ Result:= True;
+end;
+
+function UnLoadDirectSound: Boolean;
+begin // Stub function for static linking
+ Result:= True; // should emulate "normal" behaviour
+end;
+
+function LoadDirectSound: Boolean;
+begin // Stub function for static linking
+ Result:= True;
+end;
+
+{$ENDIF}
+
+{$IFDEF DIRECTSOUND_DYNAMIC_LINK}
+initialization
+{$IFNDEF DIRECTSOUND_DYNAMIC_LINK_EXPLICIT}
+ LoadDirectSound;
+{$ENDIF}
+finalization
+ UnLoadDirectSound;
+{$ENDIF}
+end.
+