📄 directsound.pas
字号:
(*==========================================================================;
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: dsound.h
* Content: DirectSound include file
*
* DirectX 7.0 Delphi adaptation by Erik Unger
*
* Modified: 26-Feb-2000
*
* Download: http://www.delphi-jedi.org/DelphiGraphics/
* E-Mail: Erik.Unger@gmx.at
*
***************************************************************************)
{
Windows 98 and debug versions DInput and DSound
Under Windows 98, the "debug" setup of the DirectX SDK 6.x skips DInput.DLL
and DSound.DLL, i.e. makes you end up with the retail version of these two
files without any notice.
The debug versions of DInput.DLL and DSound.DLL can be found in the
\extras\Win98\Win98Dbg folder of the SDK CD; they need to be installed
"manually".
}
unit DirectSound;
{$MINENUMSIZE 4}
{$ALIGN ON}
interface
uses
Windows,
SysUtils,
MMSystem,
Direct3D;
var
DSoundDLL : HMODULE;
function DSErrorString(Value: HResult) : string;
const
_FACDS = $878;
function MAKE_DSHResult(code: DWORD) : HResult;
const
FLT_MIN = 1.175494351E-38;
FLT_MAX = 3.402823466E+38;
const
// Direct Sound Component GUID {47D4D946-62E8-11cf-93BC-444553540000}
CLSID_DirectSound: TGUID = '{47D4D946-62E8-11cf-93BC-444553540000}';
// DirectSound Capture Component GUID {B0210780-89CD-11d0-AF08-00A0C925CD16}
CLSID_DirectSoundCapture: TGUID = '{47D4D946-62E8-11cf-93BC-444553540000}';
//
// Structures
//
type
IDirectSound = interface;
IDirectSoundBuffer = interface;
IDirectSound3DListener = interface;
IDirectSound3DBuffer = interface;
IDirectSoundCapture = interface;
IDirectSoundCaptureBuffer = interface;
IDirectSoundNotify = interface;
IKsPropertySet = interface;
PDSCaps = ^TDSCaps;
TDSCaps = 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;
PCDSCaps = ^TDSCaps;
PDSBCaps = ^TDSBCaps;
TDSBCaps = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwBufferBytes: DWORD;
dwUnlockTransferRate: DWORD;
dwPlayCpuOverhead: DWORD;
end;
PCDSBCaps = ^TDSBCaps;
TDSBufferDesc_DX6 = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwBufferBytes: DWORD;
dwReserved: DWORD;
lpwfxFormat: PWaveFormatEx;
end;
TDSBufferDesc1 = TDSBufferDesc_DX6;
PDSBufferDesc1 = ^TDSBufferDesc1;
PCDSBufferDesc1 = PDSBufferDesc1;
TDSBufferDesc_DX7 = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwBufferBytes: DWORD;
dwReserved: DWORD;
lpwfxFormat: PWaveFormatEx;
guid3DAlgorithm: TGUID;
end;
{$IFDEF DIRECTX6}
TDSBufferDesc = TDSBufferDesc_DX6;
{$ELSE}
TDSBufferDesc = TDSBufferDesc_DX7;
{$ENDIF}
PDSBufferDesc = ^TDSBufferDesc;
PCDSBufferDesc = PDSBufferDesc;
(***
// Snipped from D3DTypes.pas:
TD3DValue = Single;
PD3DVector = ^TD3DVector;
TD3DVector = packed record
case Integer of
0: (
x: TD3DValue;
y: TD3DValue;
z: TD3DValue;
);
1: (
dvX: TD3DValue;
dvY: TD3DValue;
dvZ: TD3DValue;
);
end;
*)
PDS3DBuffer = ^TDS3DBuffer;
TDS3DBuffer = packed record
dwSize: DWORD;
vPosition: TD3DVector;
vVelocity: TD3DVector;
dwInsideConeAngle: DWORD;
dwOutsideConeAngle: DWORD;
vConeOrientation: TD3DVector;
lConeOutsideVolume: LongInt;
flMinDistance: TD3DValue;
flMaxDistance: TD3DValue;
dwMode: DWORD;
end;
TCDS3DBuffer = ^TDS3DBuffer;
PDS3DListener = ^TDS3DListener;
TDS3DListener = packed record
dwSize: DWORD;
vPosition: TD3DVector;
vVelocity: TD3DVector;
vOrientFront: TD3DVector;
vOrientTop: TD3DVector;
flDistanceFactor: TD3DValue;
flRolloffFactor: TD3DValue;
flDopplerFactor: TD3DValue;
end;
PCDS3DListener = ^TDS3DListener;
PDSCCaps = ^TDSCCaps;
TDSCCaps = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwFormats: DWORD;
dwChannels: DWORD;
end;
PCDSCCaps = ^TDSCCaps;
PDSCBufferDesc = ^TDSCBufferDesc;
TDSCBufferDesc = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwBufferBytes: DWORD;
dwReserved: DWORD;
lpwfxFormat: PWaveFormatEx;
end;
PCDSCBufferDesc = ^TDSCBufferDesc;
PDSCBCaps = ^TDSCBCaps;
TDSCBCaps = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwBufferBytes: DWORD;
dwReserved: DWORD;
end;
PCDSCBCaps = ^TDSCBCaps;
PDSBPositionNotify = ^TDSBPositionNotify;
TDSBPositionNotify = packed record
dwOffset: DWORD;
hEventNotify: THandle;
end;
PCDSBPositionNotify = ^TDSBPositionNotify;
//
// DirectSound API
//
TDSEnumCallbackW = function (lpGuid: PGUID; lpstrDescription: PWideChar;
lpstrModule: PWideChar; lpContext: Pointer) : BOOL; stdcall;
TDSEnumCallbackA = function (lpGuid: PGUID; lpstrDescription: PAnsiChar;
lpstrModule: PAnsiChar; lpContext: Pointer) : BOOL; stdcall;
{$IFDEF UNICODE}
TDSEnumCallback = TDSEnumCallbackW;
{$ELSE}
TDSEnumCallback = TDSEnumCallbackA;
{$ENDIF}
//
// IDirectSound
//
IDirectSound = interface (IUnknown)
['{279AFA83-4981-11CE-A521-0020AF0BE560}']
// IDirectSound methods
function CreateSoundBuffer(const lpDSBufferDesc: TDSBufferDesc;
out lpIDirectSoundBuffer: IDirectSoundBuffer;
pUnkOuter: IUnknown) : HResult; stdcall;
function GetCaps(var lpDSCaps: TDSCaps) : HResult; stdcall;
function DuplicateSoundBuffer(lpDsbOriginal: IDirectSoundBuffer;
out lpDsbDuplicate: IDirectSoundBuffer) : HResult; stdcall;
function SetCooperativeLevel(hwnd: HWND; dwLevel: DWORD) : HResult; stdcall;
function Compact: HResult; stdcall;
function GetSpeakerConfig(var lpdwSpeakerConfig: DWORD) : HResult; stdcall;
function SetSpeakerConfig(dwSpeakerConfig: DWORD) : HResult; stdcall;
function Initialize(lpGuid: PGUID) : HResult; stdcall;
end;
//
// IDirectSoundBuffer
//
IDirectSoundBuffer = interface (IUnknown)
['{279AFA85-4981-11CE-A521-0020AF0BE560}']
// IDirectSoundBuffer methods
function GetCaps(var lpDSCaps: TDSBCaps) : HResult; stdcall;
function GetCurrentPosition
(lpdwCapturePosition, lpdwReadPosition : PDWORD) : HResult; stdcall;
function GetFormat(lpwfxFormat: PWaveFormatEx; dwSizeAllocated: DWORD;
lpdwSizeWritten: PDWORD) : HResult; stdcall;
function GetVolume(var lplVolume: integer) : HResult; stdcall;
function GetPan(var lplPan: integer) : HResult; stdcall;
function GetFrequency(var lpdwFrequency: DWORD) : HResult; stdcall;
function GetStatus(var lpdwStatus: DWORD) : HResult; stdcall;
function Initialize(lpDirectSound: IDirectSound;
const lpcDSBufferDesc: TDSBufferDesc) : HResult; stdcall;
function Lock(dwWriteCursor, dwWriteBytes: DWORD;
var lplpvAudioPtr1: Pointer; var lpdwAudioBytes1: DWORD;
var lplpvAudioPtr2: Pointer; var lpdwAudioBytes2: DWORD;
dwFlags: DWORD) : HResult; stdcall;
function Play(dwReserved1,dwReserved2,dwFlags: DWORD) : HResult; stdcall;
function SetCurrentPosition(dwPosition: DWORD) : HResult; stdcall;
function SetFormat(const lpcfxFormat: TWaveFormatEx) : HResult; stdcall;
function SetVolume(lVolume: integer) : HResult; stdcall;
function SetPan(lPan: integer) : HResult; stdcall;
function SetFrequency(dwFrequency: DWORD) : HResult; stdcall;
function Stop: HResult; stdcall;
function Unlock(lpvAudioPtr1: Pointer; dwAudioBytes1: DWORD;
lpvAudioPtr2: Pointer; dwAudioBytes2: DWORD) : HResult; stdcall;
function Restore: HResult; stdcall;
end;
//
// IDirectSound3DListener
//
IDirectSound3DListener = interface (IUnknown)
['{279AFA84-4981-11CE-A521-0020AF0BE560}']
// IDirectSound3D methods
function GetAllParameters(var lpListener: TDS3DListener) : HResult; stdcall;
function GetDistanceFactor(var lpflDistanceFactor: TD3DValue) : HResult; stdcall;
function GetDopplerFactor(var lpflDopplerFactor: TD3DValue) : HResult; stdcall;
function GetOrientation
(var lpvOrientFront, lpvOrientTop: TD3DVector) : HResult; stdcall;
function GetPosition(var lpvPosition: TD3DVector) : HResult; stdcall;
function GetRolloffFactor(var lpflRolloffFactor: TD3DValue) : HResult; stdcall;
function GetVelocity(var lpvVelocity: TD3DVector) : HResult; stdcall;
function SetAllParameters
(const lpcListener: 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, 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;
//
// IDirectSound3DBuffer
//
IDirectSound3DBuffer = interface (IUnknown)
['{279AFA86-4981-11CE-A521-0020AF0BE560}']
// IDirectSoundBuffer3D methods
function GetAllParameters(var lpDs3dBuffer: TDS3DBuffer) : HResult; stdcall;
function GetConeAngles
(var lpdwInsideConeAngle, lpdwOutsideConeAngle: DWORD) : HResult; stdcall;
function GetConeOrientation(var lpvOrientation: TD3DVector) : HResult; stdcall;
function GetConeOutsideVolume(var lplConeOutsideVolume: integer) : HResult; stdcall;
function GetMaxDistance(var lpflMaxDistance: TD3DValue) : HResult; stdcall;
function GetMinDistance(var lpflMinDistance: TD3DValue) : HResult; stdcall;
function GetMode(var lpdwMode: DWORD) : HResult; stdcall;
function GetPosition(var lpvPosition: TD3DVector) : HResult; stdcall;
function GetVelocity(var lpvVelocity: TD3DVector) : HResult; stdcall;
function SetAllParameters
(const lpcDs3dBuffer: TDS3DBuffer; dwApply: DWORD) : HResult; stdcall;
function SetConeAngles
(dwInsideConeAngle, dwOutsideConeAngle, 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;
//
// IDirectSoundCapture
//
IDirectSoundCapture = interface (IUnknown)
['{b0210781-89cd-11d0-af08-00a0c925cd16}']
// IDirectSoundCapture methods
function CreateCaptureBuffer(const lpDSCBufferDesc: TDSCBufferDesc;
var lplpDirectSoundCaptureBuffer: IDirectSoundCaptureBuffer;
pUnkOuter: IUnknown) : HResult; stdcall;
function GetCaps(var lpdwCaps: TDSCCaps) : HResult; stdcall;
function Initialize(lpGuid: PGUID) : HResult; stdcall;
end;
//
// IDirectSoundCaptureBuffer
//
IDirectSoundCaptureBuffer = interface (IUnknown)
['{b0210782-89cd-11d0-af08-00a0c925cd16}']
// IDirectSoundCaptureBuffer methods
function GetCaps(var lpdwCaps: TDSCBCaps) : HResult; stdcall;
function GetCurrentPosition
(lpdwCapturePosition, lpdwReadPosition: PDWORD) : HResult; stdcall;
function GetFormat(lpwfxFormat: PWaveFormatEx; dwSizeAllocated: DWORD;
lpdwSizeWritten : PDWORD) : HResult; stdcall;
function GetStatus(var lpdwStatus: DWORD) : HResult; stdcall;
function Initialize(lpDirectSoundCapture: IDirectSoundCapture;
const lpcDSBufferDesc: TDSCBufferDesc) : HResult; stdcall;
function Lock(dwReadCursor, dwReadBytes: DWORD;
var lplpvAudioPtr1: Pointer; var lpdwAudioBytes1: DWORD;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -