📄 mmdsound.pas
字号:
{========================================================================}
{= (c) 1995-98 SwiftSoft Ronald Dittrich =}
{========================================================================}
{= All Rights Reserved =}
{========================================================================}
{= D 01099 Dresden = Fax.: +49(0)351-8037944 =}
{= Loewenstr.7a = info@swiftsoft.de =}
{========================================================================}
{= Actual versions on http://www.swiftsoft.de/index.html =}
{========================================================================}
{= This code is for reference purposes only and may not be copied or =}
{= distributed in any format electronic or otherwise except one copy =}
{= for backup purposes. =}
{= =}
{= No Delphi Component Kit or Component individually or in a collection=}
{= subclassed or otherwise from the code in this unit, or associated =}
{= .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed =}
{= without express permission from SwiftSoft. =}
{= =}
{= For more licence informations please refer to the associated =}
{= HelpFile. =}
{========================================================================}
{= $Date: 11.11.98 - 18:19:23 $ =}
{========================================================================}
unit MMDSound;
{$I COMPILER.INC}
interface
uses
Windows,
SysUtils,
Classes,
MMOLE2,
MMSystem,
MMRegs,
MMD3DTyp;
type
LONG = LongInt;
PLONG = ^LONG;
const
// Direct Sound Component GUID {47D4D946-62E8-11cf-93BC-444553540000}
CLSID_DirectSound : TGUID =
(D1:$47d4d946;D2:$62e8;D3:$11cf;D4:($93,$bc,$44,$45,$53,$54,$0,$0));
// DirectSound 279afa83-4981-11ce-a521-0020af0be560
IID_IDirectSound : TGUID =
(D1:$279AFA83;D2:$4981;D3:$11CE;D4:($A5,$21,$00,$20,$AF,$0B,$E5,$60));
// DirectSoundBuffer 279afa85-4981-11ce-a521-0020af0be560
IID_IDirectSoundBuffer : TGUID =
(D1:$279AFA85;D2:$4981;D3:$11CE;D4:($A5,$21,$00,$20,$AF,$0B,$E5,$60));
// DirectSound3DListener 279afa84-4981-11ce-a521-0020af0be560
IID_IDirectSound3DListener : TGUID =
(D1:$279AFA84;D2:$4981;D3:$11CE;D4:($A5,$21,$00,$20,$AF,$0B,$E5,$60));
// DirectSound3DBuffer 279afa86-4981-11ce-a521-0020af0be560
IID_IDirectSound3DBuffer : TGUID =
(D1:$279AFA86;D2:$4981;D3:$11CE;D4:($A5,$21,$00,$20,$AF,$0B,$E5,$60));
// DirectSoundCapture B0210781-89CD-11D0-AF08-00A0C925CD16
IID_IDirectSoundCapture: TGUID =
(D1:$b0210781;D2:$89cd;D3:$11d0;D4:($af,$8,$0,$a0,$c9,$25,$cd,$16));
// DirectSoundCapureBuffer B0210782-89CD-11D0-AF08-00A0C925CD16
IID_IDirectSoundCaptureBuffer: TGUID =
(D1:$b0210782;D2:$89cd;D3:$11d0;D4:($af,$8,$0,$a0,$c9,$25,$cd,$16));
// DirectSoundNotify B0210783-89CD-11D0-AF08-00A0C925CD16
IID_IDirectSoundNotify : TGUID =
(D1:$b0210783;D2:$89cd;D3:$11d0;D4:($af,$08,$00,$a0,$c9,$25,$cd,$16));
const
{ Return Codes }
DS_OK = 0;
{ The call failed because resources (such as a priority level)
were already being used by another caller. }
DSERR_ALLOCATED = $88780000 + 10;
{ The control (vol,pan,etc.) requested by the caller is not available. }
DSERR_CONTROLUNAVAIL = $88780000 + 30;
{ An invalid parameter was passed to the returning function }
DSERR_INVALIDPARAM = E_INVALIDARG;
{ This call is not valid for the current state of this object }
DSERR_INVALIDCALL = $88780000 + 50;
{ An undetermined error occured inside the DSound subsystem }
DSERR_GENERIC = E_FAIL;
{ The caller does not have the priority level required for the function
to succeed. }
DSERR_PRIOLEVELNEEDED = $88780000 + 70;
{ The DSound subsystem couldn't allocate sufficient memory to complete
the caller's request. }
DSERR_OUTOFMEMORY = E_OUTOFMEMORY;
{ The specified WAVE format is not supported }
DSERR_BADFORMAT = $88780000 + 100;
{ The function called is not supported at this time }
DSERR_UNSUPPORTED = E_NOTIMPL;
{ No sound driver is available for use }
DSERR_NODRIVER = $88780000 + 120;
{ This object is already initialized }
DSERR_ALREADYINITIALIZED = $88780000 + 130;
{ This object does not support aggregation }
DSERR_NOAGGREGATION = CLASS_E_NOAGGREGATION ;
{ The buffer memory has been lost, and must be Restored. }
DSERR_BUFFERLOST = $88780000 + 150;
{ Another app has a higher priority level, preventing this call from
succeeding. }
DSERR_OTHERAPPHASPRIO = $88780000 + 160;
{ DSound v2.0 }
{ The Initialize() member on the Direct Sound Object has not been
called or called successfully before calls to other members. }
DSERR_UNINITIALIZED = $88780000 + 170;
const
{ Flags }
DSCAPS_PRIMARYMONO = $00000001;
DSCAPS_PRIMARYSTEREO = $00000002;
DSCAPS_PRIMARY8BIT = $00000004;
DSCAPS_PRIMARY16BIT = $00000008;
DSCAPS_CONTINUOUSRATE = $00000010;
DSCAPS_EMULDRIVER = $00000020;
DSCAPS_CERTIFIED = $00000040;
DSCAPS_SECONDARYMONO = $00000100;
DSCAPS_SECONDARYSTEREO = $00000200;
DSCAPS_SECONDARY8BIT = $00000400;
DSCAPS_SECONDARY16BIT = $00000800;
DSBPLAY_LOOPING = $00000001;
DSBSTATUS_PLAYING = $00000001;
DSBSTATUS_BUFFERLOST = $00000002;
DSBSTATUS_LOOPING = $00000004;
DSBLOCK_FROMWRITECURSOR = $00000001;
DSBLOCK_ENTIREBUFFER = $00000002;
DSSCL_NORMAL = 1;
DSSCL_PRIORITY = 2;
DSSCL_EXCLUSIVE = 3;
DSSCL_WRITEPRIMARY = 4;
{ DSound v3.0 }
{ flags for IDirectSound3DBuffer::SetMode }
DS3DMODE_NORMAL = 0; { default must be 0 }
DS3DMODE_HEADRELATIVE = 1;
DS3DMODE_DISABLE = 2;
{ flags for dwApply parameter of some 3D functions }
DS3D_IMMEDIATE = 0;
DS3D_DEFERRED = 1;
DS3D_MINDISTANCEFACTOR = 0.0;
DS3D_MAXDISTANCEFACTOR = 10.0;
DS3D_DEFAULTDISTANCEFACTOR = 1.0;
DS3D_MINROLLOFFFACTOR = 0.0;
DS3D_MAXROLLOFFFACTOR = 10.0;
DS3D_DEFAULTROLLOFFFACTOR = 1.0;
DS3D_MINDOPPLERFACTOR = 0.0;
DS3D_MAXDOPPLERFACTOR = 10.0;
DS3D_DEFAULTDOPPLERFACTOR = 1.0;
DS3D_DEFAULTMINDISTANCE = 1.0;
DS3D_DEFAULTMAXDISTANCE = 1000000000.0;
DS3D_MINCONEANGLE = 0;
DS3D_MAXCONEANGLE = 360;
DS3D_DEFAULTCONEANGLE = 360;
DS3D_DEFAULTCONEOUTSIDEVOLUME = 0;
DSBCAPS_PRIMARYBUFFER = $00000001;
DSBCAPS_STATIC = $00000002;
DSBCAPS_LOCHARDWARE = $00000004;
DSBCAPS_LOCSOFTWARE = $00000008;
DSBCAPS_CTRL3D = $00000010; { v3.0 }
DSBCAPS_CTRLFREQUENCY = $00000020; { v3.0 }
DSBCAPS_CTRLPAN = $00000040; { v3.0 }
DSBCAPS_CTRLVOLUME = $00000080; { v3.0 }
DSBCAPS_CTRLDEFAULT = $000000E0; { Pan + volume + frequency. }
DSBCAPS_CTRLPOSITIONNOTIFY = $00000100; { v5.0 }
DSBCAPS_CTRLALL = $000001F0; { All control capabilities }
DSBCAPS_STICKYFOCUS = $00004000; { v2.0 }
DSBCAPS_GLOBALFOCUS = $00008000; { v3.0 }
DSBCAPS_GETCURRENTPOSITION2 = $00010000; { More accurate play cursor under emulation }
DSBCAPS_MUTE3DATMAXDISTANCE = $00020000; { The sound is reduced to silence at the maximum distance. }
DSBCAPS_LIMITED = $80000000; { used only for SwiftSoft Audio Engine}
{ buffers with this Flag will be Mono when 3D to save HW Buffers }
DSCBCAPS_WAVEMAPPED = $80000000;
DSSPEAKER_HEADPHONE = 1;
DSSPEAKER_MONO = 2;
DSSPEAKER_QUAD = 3;
DSSPEAKER_STEREO = 4;
DSSPEAKER_SURROUND = 5;
DSSPEAKER_GEOMETRY_MIN = $00000005; { 5 degrees }
DSSPEAKER_GEOMETRY_NARROW = $0000000A; { 10 degrees }
DSSPEAKER_GEOMETRY_WIDE = $00000014; { 20 degrees }
DSSPEAKER_GEOMETRY_MAX = $000000B4; { 180 degrees }
DSCCAPS_EMULDRIVER = $00000020;
DSCBLOCK_ENTIREBUFFER = $00000001;
DSCBSTATUS_CAPTURING = $00000001;
DSCBSTATUS_LOOPING = $00000002;
DSCBSTART_LOOPING = $00000001;
DSBFREQUENCY_MIN = 100;
DSBFREQUENCY_MAX = 100000;
DSBFREQUENCY_ORIGINAL = 0;
DSBPAN_LEFT = -10000;
DSBPAN_CENTER = 0;
DSBPAN_RIGHT = 10000;
DSBVOLUME_NONE = -100000;
DSBVOLUME_MIN = -10000;
DSBVOLUME_MAX = 0;
DSBSIZE_MIN = 4;
DSBSIZE_MAX = $0FFFFFFF;
DSBPN_OFFSETSTOP = $FFFFFFFF;
type
IDirectSound = class;
IDirectSoundBuffer = class;
{ Structures }
PDSCAPS = ^TDSCAPS;
TDSCAPS = 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;
PDSBCAPS = ^TDSBCAPS;
TDSBCAPS = record
dwSize : DWORD;
dwFlags : DWORD;
dwBufferBytes : DWORD;
dwUnlockTransferRate: DWORD;
dwPlayCpuOverhead : DWORD;
end;
PDSBUFFERDESC = ^TDSBUFFERDESC;
TDSBUFFERDESC = record
dwSize : DWORD;
dwFlags : DWORD;
dwBufferBytes: DWORD;
dwReserved : DWORD;
lpwfxFormat : PWaveFormatEx;
end;
PDS3DBUFFER = ^TDS3DBUFFER;
TDS3DBUFFER = record
dwSize : DWORD;
vPosition : TD3DVECTOR;
vVelocity : TD3DVECTOR;
dwInsideConeAngle : DWORD;
dwOutsideConeAngle : DWORD;
vConeOrientation : TD3DVECTOR;
lConeOutsideVolume : LONG;
flMinDistance : D3DVALUE;
flMaxDistance : D3DVALUE;
dwMode : DWORD;
end;
PDS3DLISTENER = ^TDS3DLISTENER;
TDS3DLISTENER = record
dwSize : DWORD;
vPosition : TD3DVECTOR;
vVelocity : TD3DVECTOR;
vOrientFront : TD3DVECTOR;
vOrientTop : TD3DVECTOR;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -