' dsound.sbp
Const DIRECTSOUND_VERSION = &H0900


Const _FACDS = &H878   'DirectSound's facility code
Const MAKE_DSHRESULT(code) = MAKE_HRESULT(1, _FACDS, code)


' DirectSound Component GUID {47D4D946-62E8-11CF-93BC-444553540000}
Dim CLSID_DirectSound = [&H47d4d946, &H62e8, &H11cf, [&H93, &Hbc, &H44, &H45, &H53, &H54, &H0, &H0]] As GUID

' DirectSound 8.0 Component GUID {3901CC3F-84B5-4FA4-BA35-AA8172B8A09B}
Dim CLSID_DirectSound8 = [&H3901cc3f, &H84b5, &H4fa4, [&Hba, &H35, &Haa, &H81, &H72, &Hb8, &Ha0, &H9b]] As GUID

' DirectSound Capture Component GUID {B0210780-89CD-11D0-AF08-00A0C925CD16}
Dim CLSID_DirectSoundCapture = [&Hb0210780, &H89cd, &H11d0, [&Haf, &H8, &H0, &Ha0, &Hc9, &H25, &Hcd, &H16]] As GUID

' DirectSound 8.0 Capture Component GUID {E4BCAC13-7F99-4908-9A8E-74E3BF24B6E1}
Dim CLSID_DirectSoundCapture8 = [&He4bcac13, &H7f99, &H4908, [&H9a, &H8e, &H74, &He3, &Hbf, &H24, &Hb6, &He1]] As GUID

' DirectSound Full Duplex Component GUID {FEA4300C-7959-4147-B26A-2377B9E7A91D}
Dim CLSID_DirectSoundFullDuplex = [&Hfea4300c, &H7959, &H4147, [&Hb2, &H6a, &H23, &H77, &Hb9, &He7, &Ha9, &H1d]] As GUID


' DirectSound default playback device GUID {DEF00000-9C6D-47ED-AAF1-4DDA8F2B5C03}
Dim DSDEVID_DefaultPlayback = [&Hdef00000, &H9c6d, &H47ed, [&Haa, &Hf1, &H4d, &Hda, &H8f, &H2b, &H5c, &H03]] As GUID

' DirectSound default capture device GUID {DEF00001-9C6D-47ED-AAF1-4DDA8F2B5C03}
Dim DSDEVID_DefaultCapture = [&Hdef00001, &H9c6d, &H47ed, [&Haa, &Hf1, &H4d, &Hda, &H8f, &H2b, &H5c, &H03]] As GUID

' DirectSound default device for voice playback {DEF00002-9C6D-47ED-AAF1-4DDA8F2B5C03}
Dim DSDEVID_DefaultVoicePlayback = [&Hdef00002, &H9c6d, &H47ed, [&Haa, &Hf1, &H4d, &Hda, &H8f, &H2b, &H5c, &H03]] As GUID

' DirectSound default device for voice capture {DEF00003-9C6D-47ED-AAF1-4DDA8F2B5C03}
Dim DSDEVID_DefaultVoiceCapture = [&Hdef00003, &H9c6d, &H47ed, [&Haa, &Hf1, &H4d, &Hda, &H8f, &H2b, &H5c, &H03]] As GUID


Type DSCAPS
	dwSize As DWord
	dwFlags As DWord
	dwMinSecondarySampleRate As DWord
	dwMaxSecondarySampleRate As DWord
	dwPrimaryBuffers As DWord
	dwMaxHwMixingAllBuffers As DWord
	dwMaxHwMixingStaticBuffers As DWord
	dwMaxHwMixingStreamingBuffers As DWord
	dwFreeHwMixingAllBuffers As DWord
	dwFreeHwMixingStaticBuffers As DWord
	dwFreeHwMixingStreamingBuffers As DWord
	dwMaxHw3DAllBuffers As DWord
	dwMaxHw3DStaticBuffers As DWord
	dwMaxHw3DStreamingBuffers As DWord
	dwFreeHw3DAllBuffers As DWord
	dwFreeHw3DStaticBuffers As DWord
	dwFreeHw3DStreamingBuffers As DWord
	dwTotalHwMemBytes As DWord
	dwFreeHwMemBytes As DWord
	dwMaxContigFreeHwMemBytes As DWord
	dwUnlockTransferRateHwBuffers As DWord
	dwPlayCpuOverheadSwBuffers As DWord
	dwReserved1 As DWord
	dwReserved2 As DWord
End Type

Type DSBCAPS
	dwSize As DWord
	dwFlags As DWord
	dwBufferBytes As DWord
	dwUnlockTransferRate As DWord
	dwPlayCpuOverhead As DWord
End Type

Const DSFX_LOCHARDWARE = &H00000001
Const DSFX_LOCSOFTWARE = &H00000002
Type DSEFFECTDESC
	dwSize As DWord
	dwFlags As DWord
	guidDSFXClass As GUID
	dwReserved1 As DWord
	dwReserved2 As DWord
End Type

Const DSCFX_LOCHARDWARE  = &H00000001
Const DSCFX_LOCSOFTWARE  = &H00000002
Const DSCFXR_LOCHARDWARE = &H00000010
Const DSCFXR_LOCSOFTWARE = &H00000020
Type DSCEFFECTDESC
	dwSize As DWord
	dwFlags As DWord
	guidDSCFXClass As GUID
	guidDSCFXInstance As GUID
	dwReserved1 As DWord
	dwReserved2 As DWord
End Type

Type DSBUFFERDESC
	dwSize As DWord
	dwFlags As DWord
	dwBufferBytes As DWord
	dwReserved As DWord
	lpwfxFormat As *WAVEFORMATEX
	guid3DAlgorithm As GUID
End Type

Type DS3DBUFFER
	dwSize As DWord
	vPosition As D3DVECTOR
	vVelocity As D3DVECTOR
	dwInsideConeAngle As DWord
	dwOutsideConeAngle As DWord
	vConeOrientation As D3DVECTOR
	lConeOutsideVolume As Long
	flMinDistance As Single
	flMaxDistance As Single
	dwMode As DWord
End Type

Type DS3DLISTENER
	dwSize As DWord
	vPosition As D3DVECTOR
	vVelocity As D3DVECTOR
	vOrientFront As D3DVECTOR
	vOrientTop As D3DVECTOR
	flDistanceFactor As Single
	flRolloffFactor As Single
	flDopplerFactor As Single
End Type

Type DSCCAPS
	dwSize As DWord
	dwFlags As DWord
	dwFormats As DWord
	dwChannels As DWord
End Type

Type DSCBUFFERDESC
	dwSize As DWord
	dwFlags As DWord
	dwBufferBytes As DWord
	dwReserved As DWord
	lpwfxFormat As *WAVEFORMATEX
	dwFXCount As DWord
	lpDSCFXDesc As *DSCEFFECTDESC
End Type

Type DSCBCAPS
	dwSize As DWord
	dwFlags As DWord
	dwBufferBytes As DWord
	dwReserved As DWord
End Type

Type DSBPOSITIONNOTIFY
	dwOffset As DWord
	hEventNotify As HANDLE
End Type


'------------------------
' DirectSound Interfaces
'------------------------

Class IReferenceClock
	Inherits IUnknown
Public
	'IReferenceClock methods
	Abstract Function GetTime(pTime As *REFERENCE_TIME) As DWord
	Abstract Function AdviseTime(rtBaseTime As REFERENCE_TIME, rtStreamTime As REFERENCE_TIME, hEvent As HANDLE, pdwAdviseCookie As DWordPtr) As DWord
	Abstract Function AdvisePeriodic(rtStartTime As REFERENCE_TIME, rtPeriodTime As REFERENCE_TIME, hSemaphore As HANDLE, pdwAdviseCookie As DWordPtr) As DWord
	Abstract Function Unadvise(dwAdviseCookie As DWord) As DWord
End Class

Dim IID_IDirectSound = [&H279AFA83, &H4981, &H11CE, [&HA5, &H21, &H00, &H20, &HAF, &H0B, &HE5, &H60]] As GUID
Class IDirectSound
	Inherits IUnknown
Public
	'IDirectSound methods
	Abstract Function CreateSoundBuffer(pcDSBufferDesc As *DSBUFFERDESC, ppDSBuffer As *LPDIRECTSOUNDBUFFER, pUnkOuter As LPUNKNOWN) As DWord
	Abstract Function GetCaps(pDSCaps As *DSCAPS) As DWord
	Abstract Function DuplicateSoundBuffer(pDSBufferOriginal As LPDIRECTSOUNDBUFFER, ppDSBufferDuplicate As *LPDIRECTSOUNDBUFFER) As DWord
	Abstract Function SetCooperativeLevel(hwnd As HWND, dwLevel As DWord) As DWord
	Abstract Function Compact() As DWord
	Abstract Function GetSpeakerConfig(pdwSpeakerConfig As DWordPtr) As DWord
	Abstract Function SetSpeakerConfig(dwSpeakerConfig As DWord) As DWord
	Abstract Function Initialize(pcGuidDevice As *GUID) As DWord
End Class
TypeDef LPDIRECTSOUND = *IDirectSound

Dim IID_IDirectSound8 = [&HC50A7E93, &HF395, &H4834, [&H9E, &HF6, &H7F, &HA9, &H9D, &HE5, &H09, &H66]] As GUID
Class IDirectSound8
	Inherits IDirectSound
Public
	'IDirectSound8 methods
	Abstract Function VerifyCertification(pdwCertified As DWordPtr) As DWord
End Class
TypeDef LPDIRECTSOUND8 = *IDirectSound8

Dim IID_IDirectSoundBuffer = [&H279AFA85, &H4981, &H11CE, [&HA5, &H21, &H00, &H20, &HAF, &H0B, &HE5, &H60]] As GUID
Class IDirectSoundBuffer
	Inherits IUnknown
Public
	'IDirectSoundBuffer methods
	Abstract Function GetCaps(pDSBufferCaps As *DSBCAPS) As DWord
	Abstract Function GetCurrentPosition(pdwCurrentPlayCursor As DWordPtr, pdwCurrentWriteCursor As DWordPtr) As DWord
	Abstract Function GetFormat(pwfxFormat As *WAVEFORMATEX, dwSizeAllocated As DWord, pdwSizeWritten As DWordPtr) As DWord
	Abstract Function GetVolume(plVolume As *Long) As DWord
	Abstract Function GetPan(plPan As *Long) As DWord
	Abstract Function GetFrequency(pdwFrequency As DWordPtr) As DWord
	Abstract Function GetStatus(pdwStatus As DWordPtr) As DWord
	Abstract Function Initialize(pDirectSound As LPDIRECTSOUND, pcDSBufferDesc As *DSBUFFERDESC) As DWord
	Abstract Function Lock(dwOffset As DWord, dwBytes As DWord, ppvAudioPtr1 As DWordPtr, pdwAudioBytes1 As DWordPtr, ppvAudioPtr2 As DWordPtr, pdwAudioBytes2 As DWordPtr, dwFlags As DWord) As DWord
	Abstract Function Play(dwReserved1 As DWord, dwPriority As DWord, dwFlags As DWord) As DWord
	Abstract Function SetCurrentPosition(dwNewPosition As DWord) As DWord
	Abstract Function SetFormat(pcfxFormat As *WAVEFORMATEX) As DWord
	Abstract Function SetVolume(lVolume As Long) As DWord
	Abstract Function SetPan(lPan As Long) As DWord
	Abstract Function SetFrequency(dwFrequency As DWord) As DWord
	Abstract Function Stop() As DWord
	Abstract Function Unlock(pvAudioPtr1 As VoidPtr, dwAudioBytes1 As DWord, pvAudioPtr2 As VoidPtr, dwAudioBytes2 As DWord) As DWord
	Abstract Function Restore() As DWord
End Class
TypeDef LPDIRECTSOUNDBUFFER = *IDirectSoundBuffer

Dim IID_IDirectSoundBuffer8 = [&H6825a449, &H7524, &H4d82, [&H92, &H0f, &H50, &He3, &H6a, &Hb3, &Hab, &H1e]] As GUID
Class IDirectSoundBuffer8
	Inherits IDirectSoundBuffer
Public
	'IDirectSoundBuffer8 methods
	Abstract Function SetFX(dwEffectsCount As DWord, pDSFXDesc As *DSEFFECTDESC, pdwResultCodes As DWordPtr) As DWord
	Abstract Function AcquireResources(dwFlags As DWord, dwEffectsCount As DWord, pdwResultCodes As DWordPtr) As DWord
	Abstract Function GetObjectInPath(ByRef rguidObject As GUID, dwIndex As DWord, ByRef rguidInterface As GUID, ppObject As DWordPtr) As DWord
End Class
TypeDef LPDIRECTSOUNDBUFFER8 = *IDirectSoundBuffer8

' Special GUID meaning "select all objects" for use in GetObjectInPath()
Dim GUID_All_Objects = [&Haa114de5, &Hc262, &H4169, [&Ha1, &Hc8, &H23, &Hd6, &H98, &Hcc, &H73, &Hb5]] As GUID

Dim IID_IDirectSound3DListener = [&H279AFA84, &H4981, &H11CE, [&HA5, &H21, &H00, &H20, &HAF, &H0B, &HE5, &H60]] As GUID
Class IDirectSound3DListener
	Inherits IUnknown
Public
	'IDirectSound3DListener methods
	Abstract Function GetAllParameters(pListener As *DS3DLISTENER) As DWord
	Abstract Function GetDistanceFactor(pflDistanceFactor As SinglePtr) As DWord
	Abstract Function GetDopplerFactor(pflDopplerFactor As SinglePtr) As DWord
	Abstract Function GetOrientation(pvOrientFront As *D3DVECTOR, pvOrientTop As *D3DVECTOR) As DWord
	Abstract Function GetPosition(pvPosition As *D3DVECTOR) As DWord
	Abstract Function GetRolloffFactor(pflRolloffFactor As SinglePtr) As DWord
	Abstract Function GetVelocity(pvVelocity As *D3DVECTOR) As DWord
	Abstract Function SetAllParameters(pcListener As *DS3DLISTENER, dwApply As DWord) As DWord
	Abstract Function SetDistanceFactor(flDistanceFactor As Single, dwApply As DWord) As DWord
	Abstract Function SetDopplerFactor(flDopplerFactor As Single, dwApply As DWord) As DWord
	Abstract Function SetOrientation(xFront As Single, yFront As Single, zFront As Single, xTop As Single, yTop As Single, zTop As Single, dwApply As DWord) As DWord
	Abstract Function SetPosition(x As Single, y As Single, z As Single, dwApply As DWord) As DWord
	Abstract Function SetRolloffFactor(flRolloffFactor As Single, dwApply As DWord) As DWord
	Abstract Function SetVelocity(x As Single, y As Single, z As Single, dwApply As DWord) As DWord
	Abstract Function CommitDeferredSettings() As DWord
End Class
TypeDef LPDIRECTSOUND3DLISTENER = *IDirectSound3DListener
Dim IID_IDirectSound3DListener8 As GUID
IID_IDirectSound3DListener8=IID_IDirectSound3DListener
TypeDef IDirectSound3DListener8 = IDirectSound3DListener
TypeDef LPDIRECTSOUND3DLISTENER8 = *IDirectSound3DListener8

Dim IID_IDirectSound3DBuffer = [&H279AFA86, &H4981, &H11CE, [&HA5, &H21, &H00, &H20, &HAF, &H0B, &HE5, &H60]] As GUID
Class IDirectSound3DBuffer
	Inherits IUnknown
Public
	'IDirectSound3DBuffer methods
	Abstract Function GetAllParameters(pDs3dBuffer As *DS3DBUFFER) As DWord
	Abstract Function GetConeAngles(pdwInsideConeAngle As DWordPtr, pdwOutsideConeAngle As DWordPtr) As DWord
	Abstract Function GetConeOrientation(pvOrientation As *D3DVECTOR) As DWord
	Abstract Function GetConeOutsideVolume(plConeOutsideVolume As *Long) As DWord
	Abstract Function GetMaxDistance(pflMaxDistance As SinglePtr) As DWord
	Abstract Function GetMinDistance(pflMinDistance As SinglePtr) As DWord
	Abstract Function GetMode(pdwMode As DWordPtr) As DWord
	Abstract Function GetPosition(pvPosition As *D3DVECTOR) As DWord
	Abstract Function GetVelocity(pvVelocity As *D3DVECTOR) As DWord
	Abstract Function SetAllParameters(pcDs3dBuffer As *DS3DBUFFER, dwApply As DWord) As DWord
	Abstract Function SetConeAngles(dwInsideConeAngle As DWord, dwOutsideConeAngle As DWord, dwApply As DWord) As DWord
	Abstract Function SetConeOrientation(x As Single, y As Single, z As Single, dwApply As DWord) As DWord
	Abstract Function SetConeOutsideVolume(lConeOutsideVolume As Long, dwApply As DWord) As DWord
	Abstract Function SetMaxDistance(flMaxDistance As Single, dwApply As DWord) As DWord
	Abstract Function SetMinDistance(flMinDistance As Single, dwApply As DWord) As DWord
	Abstract Function SetMode(dwMode As DWord, dwApply As DWord) As DWord
	Abstract Function SetPosition(x As Single, y As Single, z As Single, dwApply As DWord) As DWord
	Abstract Function SetVelocity(x As Single, y As Single, z As Single, dwApply As DWord) As DWord
End Class
TypeDef LPDIRECTSOUND3DBUFFER = *IDirectSound3DBuffer
Dim IID_IDirectSound3DBuffer8 As GUID
IID_IDirectSound3DBuffer8=IID_IDirectSound3DBuffer
TypeDef IDirectSound3DBuffer8 = IDirectSound3DBuffer
TypeDef LPDIRECTSOUND3DBUFFER8 = *IDirectSound3DBuffer8

Dim IID_IDirectSoundCapture = [&Hb0210781, &H89cd, &H11d0, [&Haf, &H8, &H0, &Ha0, &Hc9, &H25, &Hcd, &H16]] As GUID
Class IDirectSoundCapture
	Inherits IUnknown
Public
	'IDirectSoundCapture methods
	Abstract Function CreateCaptureBuffer(pcDSCBufferDesc As *DSCBUFFERDESC, ppDSCBuffer As *LPDIRECTSOUNDCAPTUREBUFFER, pUnkOuter As LPUNKNOWN) As DWord
	Abstract Function GetCaps(pDSCCaps As *DSCCAPS) As DWord
	Abstract Function Initialize(pcGuidDevice As *GUID) As DWord
End Class
TypeDef LPDIRECTSOUNDCAPTURE = *IDirectSoundCapture
TypeDef IDirectSoundCapture8 = IDirectSoundCapture
TypeDef LPDIRECTSOUNDCAPTURE8 = *IDirectSoundCapture8

Dim IID_IDirectSoundCaptureBuffer = [&Hb0210782, &H89cd, &H11d0, [&Haf, &H8, &H0, &Ha0, &Hc9, &H25, &Hcd, &H16]] As GUID
Class IDirectSoundCaptureBuffer
	Inherits IUnknown
Public
	'IDirectSoundCaptureBuffer methods
	Abstract Function GetCaps(pDSCBCaps As *DSCBCAPS) As DWord
	Abstract Function GetCurrentPosition(pdwCapturePosition As DWordPtr, pdwReadPosition As DWordPtr) As DWord
	Abstract Function GetFormat(pwfxFormat As *WAVEFORMATEX, dwSizeAllocated As DWord, pdwSizeWritten As DWordPtr) As DWord
	Abstract Function GetStatus(pdwStatus As DWordPtr) As DWord
	Abstract Function Initialize(pDirectSoundCapture As LPDIRECTSOUNDCAPTURE, pcDSCBufferDesc As *DSCBUFFERDESC) As DWord
	Abstract Function Lock(dwOffset As DWord, dwBytes As DWord, ppvAudioPtr1 As DWordPtr, pdwAudioBytes1 As DWordPtr, ppvAudioPtr2 As DWordPtr, pdwAudioBytes2 As DWordPtr, dwFlags As DWord) As DWord
	Abstract Function Start(dwFlags As DWord) As DWord
	Abstract Function Stop() As DWord
	Abstract Function Unlock(pvAudioPtr1 As VoidPtr, dwAudioBytes1 As DWord, pvAudioPtr2 As VoidPtr, dwAudioBytes2 As DWord) As DWord
End Class
TypeDef LPDIRECTSOUNDCAPTUREBUFFER = *IDirectSoundCaptureBuffer

Dim IID_IDirectSoundCaptureBuffer8 = [&H990df4, &Hdbb, &H4872, [&H83, &H3e, &H6d, &H30, &H3e, &H80, &Hae, &Hb6]] As GUID
Class IDirectSoundCaptureBuffer8
	Inherits IDirectSoundCaptureBuffer
Public
	'IDirectSoundCaptureBuffer8 methods
	Abstract Function GetObjectInPath(ByRef rguidObject As GUID, dwIndex As DWord, ByRef rguidInterface As GUID, ppObject As DWord) As DWord
	Abstract Function GetFXStatus(dwFXCount As DWord, pdwFXStatus As DWordPtr) As DWord
End Class
TypeDef LPDIRECTSOUNDCAPTUREBUFFER8 = *IDirectSoundCaptureBuffer8

Dim IID_IDirectSoundNotify = [&Hb0210783, &H89cd, &H11d0, [&Haf, &H8, &H0, &Ha0, &Hc9, &H25, &Hcd, &H16]] As GUID
Class IDirectSoundNotify
	Inherits IUnknown
Public
	'IDirectSoundNotify methods
	Abstract Function SetNotificationPositions(dwPositionNotifies As DWord, pcPositionNotifies As *DSBPOSITIONNOTIFY) As DWord
End Class
TypeDef LPDIRECTSOUNDNOTIFY = *IDirectSoundNotify

Dim IID_IKsPropertySet = [&H31efac30, &H515c, &H11d0, [&Ha9, &Haa, &H00, &Haa, &H00, &H61, &Hbe, &H93]] As GUID
Class IKsPropertySet
	Inherits IUnknown
Public
	'IKsPropertySet methods
	Abstract Function Get(ByRef rguidPropSet As GUID, ulId As DWord, pInstanceData As VoidPtr, ulInstanceLength As DWord, pPropertyData As VoidPtr, ulDataLength As DWord, pulBytesReturned As DWordPtr) As DWord
	Abstract Function Set(ByRef rguidPropSet As GUID, ulId As DWord, pInstanceData As VoidPtr, ulInstanceLength As DWord, pPropertyData As VoidPtr, ulDataLength As DWord) As DWord
	Abstract Function QuerySupport(ByRef rguidPropSet As GUID, ulId As DWord, pulTypeSupport As DWordPtr) As DWord
End Class
TypeDef LPKSPROPERTYSET = *IKsPropertySet

Dim IID_IDirectSoundFullDuplex = [&Hedcb4c7a, &Hdaab, &H4216, [&Ha4, &H2e, &H6c, &H50, &H59, &H6d, &Hdc, &H1d]] As GUID
Class IDirectSoundFullDuplex
	Inherits IUnknown
Public
	'IDirectSoundFullDuplex methods
	Abstract Function Initialize(pCaptureGuid As *GUID, pRenderGuid As *GUID, lpDscBufferDesc As *DSCBUFFERDESC, lpDsBufferDesc As *DSBUFFERDESC, hWnd As HWND, dwLevel As DWord, lplpDirectSoundCaptureBuffer8 As *LPDIRECTSOUNDCAPTUREBUFFER8, lplpDirectSoundBuffer8 As *LPDIRECTSOUNDBUFFER8) As DWord
End Class
TypeDef LPDIRECTSOUNDFULLDUPLEX = *IDirectSoundFullDuplex


'-------------------
' DirectSound APIs
'-------------------

Declare Function DirectSoundCreate Lib "dsound" (pcGuidDevice As *GUID, ppDS As *LPDIRECTSOUND, pUnkOuter As LPUNKNOWN) As DWord
Declare Function DirectSoundEnumerate Lib "dsound" Alias "DirectSoundEnumerateA" (pDSEnumCallback As VoidPtr, pContext As VoidPtr) As DWord
Declare Function DirectSoundCaptureCreate Lib "dsound" (pcGuidDevice As *GUID, ppDSC As *LPDIRECTSOUNDCAPTURE, pUnkOuter As LPUNKNOWN) As DWord
Declare Function DirectSoundCaptureEnumerate Lib "dsound" Alias "DirectSoundCaptureEnumerateA" (pDSEnumCallback As VoidPtr, pContext As VoidPtr) As DWord
Declare Function DirectSoundCreate8 Lib "dsound" (pcGuidDevice As *GUID, ppDS8 As *LPDIRECTSOUND8, pUnkOuter As LPUNKNOWN) As DWord
Declare Function DirectSoundCaptureCreate8 Lib "dsound" (pcGuidDevice As *GUID, ppDSC8 As *LPDIRECTSOUNDCAPTURE8, pUnkOuter As LPUNKNOWN) As DWord
Declare Function DirectSoundFullDuplexCreate Lib "dsound" (pcGuidCaptureDevice As *GUID, pcGuidRenderDevice As *GUID, pcDSCBufferDesc As *DSCBUFFERDESC, pcDSBufferDesc As *DSBUFFERDESC, hWnd As HWND, dwLevel As DWord, ppDSFD As *LPDIRECTSOUNDFULLDUPLEX, ppDSCBuffer8 As *LPDIRECTSOUNDCAPTUREBUFFER8, ppDSBuffer8 As *LPDIRECTSOUNDBUFFER8, pUnkOuter As LPUNKNOWN) As DWord
Declare Function GetDeviceID Lib "dsound" (pGuidSrc As *GUID, pGuidDest As *GUID) As DWord


'--------------
' Return Codes
'--------------

' The function completed successfully
Const DS_OK                        = S_OK

' The call succeeded, but we had to substitute the 3D algorithm
Const DS_NO_VIRTUALIZATION         = MAKE_HRESULT(0, _FACDS, 10)

' The call failed because resources (such as a priority level)
' were already being used by another caller
Const DSERR_ALLOCATED              = MAKE_DSHRESULT(10)

' The control (vol, pan, etc.) requested by the caller is not available
Const DSERR_CONTROLUNAVAIL         = MAKE_DSHRESULT(30)

' An invalid parameter was passed to the returning function
Const DSERR_INVALIDPARAM           = E_INVALIDARG

' This call is not valid for the current state of this object
Const DSERR_INVALIDCALL            = MAKE_DSHRESULT(50)

' An undetermined error occurred inside the DirectSound subsystem
Const DSERR_GENERIC                = E_FAIL

' The caller does not have the priority level required for the function to
' succeed
Const DSERR_PRIOLEVELNEEDED        = MAKE_DSHRESULT(70)

' Not enough free memory is available to complete the operation
Const DSERR_OUTOFMEMORY            = E_OUTOFMEMORY

' The specified WAVE format is not supported
Const DSERR_BADFORMAT              = MAKE_DSHRESULT(100)

' The function called is not supported at this time
Const DSERR_UNSUPPORTED            = E_NOTIMPL

' No sound driver is available for use
Const DSERR_NODRIVER               = MAKE_DSHRESULT(120)

' This object is already initialized
Const DSERR_ALREADYINITIALIZED     = MAKE_DSHRESULT(130)

' This object does not support aggregation
Const DSERR_NOAGGREGATION          = CLASS_E_NOAGGREGATION

' The buffer memory has been lost, and must be restored
Const DSERR_BUFFERLOST             = MAKE_DSHRESULT(150)

' Another app has a higher priority level, preventing this call from
' succeeding
Const DSERR_OTHERAPPHASPRIO        = MAKE_DSHRESULT(160)

' This object has not been initialized
Const DSERR_UNINITIALIZED          = MAKE_DSHRESULT(170)

' The requested COM interface is not available
Const DSERR_NOINTERFACE            = E_NOINTERFACE

' Access is denied
Const DSERR_ACCESSDENIED           = E_ACCESSDENIED

' Tried to create a DSBCAPS_CTRLFX buffer shorter than DSBSIZE_FX_MIN milliseconds
Const DSERR_BUFFERTOOSMALL         = MAKE_DSHRESULT(180)

' Attempt to use DirectSound 8 functionality on an older DirectSound object
Const DSERR_DS8_REQUIRED           = MAKE_DSHRESULT(190)

' A circular loop of send effects was detected
Const DSERR_SENDLOOP               = MAKE_DSHRESULT(200)

' The GUID specified in an audiopath file does not match a valid MIXIN buffer
Const DSERR_BADSENDBUFFERGUID      = MAKE_DSHRESULT(210)

' The object requested was not found (numerically equal to DMUS_E_NOT_FOUND)
Const DSERR_OBJECTNOTFOUND         = MAKE_DSHRESULT(4449)

' 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.
Const DSERR_FXUNAVAILABLE          = MAKE_DSHRESULT(220)


'--------
' Flags
'--------

Const DSCAPS_PRIMARYMONO          = &H00000001
Const DSCAPS_PRIMARYSTEREO        = &H00000002
Const DSCAPS_PRIMARY8BIT          = &H00000004
Const DSCAPS_PRIMARY16BIT         = &H00000008
Const DSCAPS_CONTINUOUSRATE       = &H00000010
Const DSCAPS_EMULDRIVER           = &H00000020
Const DSCAPS_CERTIFIED            = &H00000040
Const DSCAPS_SECONDARYMONO        = &H00000100
Const DSCAPS_SECONDARYSTEREO      = &H00000200
Const DSCAPS_SECONDARY8BIT        = &H00000400
Const DSCAPS_SECONDARY16BIT       = &H00000800

Const DSSCL_NORMAL                = &H00000001
Const DSSCL_PRIORITY              = &H00000002
Const DSSCL_EXCLUSIVE             = &H00000003
Const DSSCL_WRITEPRIMARY          = &H00000004

Const DSSPEAKER_DIRECTOUT         = &H00000000
Const DSSPEAKER_HEADPHONE         = &H00000001
Const DSSPEAKER_MONO              = &H00000002
Const DSSPEAKER_QUAD              = &H00000003
Const DSSPEAKER_STEREO            = &H00000004
Const DSSPEAKER_SURROUND          = &H00000005
Const DSSPEAKER_5POINT1           = &H00000006
Const DSSPEAKER_7POINT1           = &H00000007

Const DSSPEAKER_GEOMETRY_MIN      = &H00000005  '   5 degrees
Const DSSPEAKER_GEOMETRY_NARROW   = &H0000000A  '  10 degrees
Const DSSPEAKER_GEOMETRY_WIDE     = &H00000014  '  20 degrees
Const DSSPEAKER_GEOMETRY_MAX      = &H000000B4  ' 180 degrees

Const DSBCAPS_PRIMARYBUFFER       = &H00000001
Const DSBCAPS_STATIC              = &H00000002
Const DSBCAPS_LOCHARDWARE         = &H00000004
Const DSBCAPS_LOCSOFTWARE         = &H00000008
Const DSBCAPS_CTRL3D              = &H00000010
Const DSBCAPS_CTRLFREQUENCY       = &H00000020
Const DSBCAPS_CTRLPAN             = &H00000040
Const DSBCAPS_CTRLVOLUME          = &H00000080
Const DSBCAPS_CTRLPOSITIONNOTIFY  = &H00000100
Const DSBCAPS_CTRLFX              = &H00000200
Const DSBCAPS_STICKYFOCUS         = &H00004000
Const DSBCAPS_GLOBALFOCUS         = &H00008000
Const DSBCAPS_GETCURRENTPOSITION2 = &H00010000
Const DSBCAPS_MUTE3DATMAXDISTANCE = &H00020000
Const DSBCAPS_LOCDEFER            = &H00040000

Const DSBPLAY_LOOPING             = &H00000001
Const DSBPLAY_LOCHARDWARE         = &H00000002
Const DSBPLAY_LOCSOFTWARE         = &H00000004
Const DSBPLAY_TERMINATEBY_TIME    = &H00000008
Const DSBPLAY_TERMINATEBY_DISTANCE    = &H000000010
Const DSBPLAY_TERMINATEBY_PRIORITY    = &H000000020

Const DSBSTATUS_PLAYING           = &H00000001
Const DSBSTATUS_BUFFERLOST        = &H00000002
Const DSBSTATUS_LOOPING           = &H00000004
Const DSBSTATUS_LOCHARDWARE       = &H00000008
Const DSBSTATUS_LOCSOFTWARE       = &H00000010
Const DSBSTATUS_TERMINATED        = &H00000020

Const DSBLOCK_FROMWRITECURSOR     = &H00000001
Const DSBLOCK_ENTIREBUFFER        = &H00000002

Const DSBFREQUENCY_ORIGINAL       = 0
Const DSBFREQUENCY_MIN            = 100
Const DSBFREQUENCY_MAX            = 200000

Const DSBPAN_LEFT                 = -10000
Const DSBPAN_CENTER               = 0
Const DSBPAN_RIGHT                = 10000

Const DSBVOLUME_MIN               = -10000
Const DSBVOLUME_MAX               = 0

Const DSBSIZE_MIN                 = 4
Const DSBSIZE_MAX                 = &H0FFFFFFF
Const DSBSIZE_FX_MIN              = 150  ' NOTE: Milliseconds, not bytes

Const DS3DMODE_NORMAL             = &H00000000
Const DS3DMODE_HEADRELATIVE       = &H00000001
Const DS3DMODE_DISABLE            = &H00000002

Const DS3D_IMMEDIATE              = &H00000000
Const DS3D_DEFERRED               = &H00000001

Const DS3D_MINDISTANCEFACTOR      = FLT_MIN
Const DS3D_MAXDISTANCEFACTOR      = FLT_MAX
Const DS3D_DEFAULTDISTANCEFACTOR  = 1.0

Const DS3D_MINROLLOFFFACTOR       = 0.0
Const DS3D_MAXROLLOFFFACTOR       = 10.0
Const DS3D_DEFAULTROLLOFFFACTOR   = 1.0

Const DS3D_MINDOPPLERFACTOR       = 0.0
Const DS3D_MAXDOPPLERFACTOR       = 10.0
Const DS3D_DEFAULTDOPPLERFACTOR   = 1.0

Const DS3D_DEFAULTMINDISTANCE     = 1.0
Const DS3D_DEFAULTMAXDISTANCE     = 1000000000.0

Const DS3D_MINCONEANGLE           = 0
Const DS3D_MAXCONEANGLE           = 360
Const DS3D_DEFAULTCONEANGLE       = 360

Const DS3D_DEFAULTCONEOUTSIDEVOLUME = DSBVOLUME_MAX

' IDirectSoundCapture attributes

Const DSCCAPS_EMULDRIVER          = DSCAPS_EMULDRIVER
Const DSCCAPS_CERTIFIED           = DSCAPS_CERTIFIED
Const DSCCAPS_MULTIPLECAPTURE     = &H00000001

' IDirectSoundCaptureBuffer attributes

Const DSCBCAPS_WAVEMAPPED         = &H80000000

Const DSCBCAPS_CTRLFX             = &H00000200


Const DSCBLOCK_ENTIREBUFFER       = &H00000001

Const DSCBSTATUS_CAPTURING        = &H00000001
Const DSCBSTATUS_LOOPING          = &H00000002

Const DSCBSTART_LOOPING           = &H00000001

Const DSBPN_OFFSETSTOP            = &HFFFFFFFF

Const DS_CERTIFIED                = &H00000000
Const DS_UNCERTIFIED              = &H00000001


'----------------------------------------
' DirectSound Internal Effect Algorithms
'----------------------------------------

' Gargle {DAFD8210-5711-4B91-9FE3-F75B7AE279BF}
Dim GUID_DSFX_STANDARD_GARGLE = [&Hdafd8210, &H5711, &H4b91, [&H9f, &He3, &Hf7, &H5b, &H7a, &He2, &H79, &Hbf]] As GUID

' Chorus {EFE6629C-81F7-4281-BD91-C9D604A95AF6}
Dim GUID_DSFX_STANDARD_CHORUS = [&Hefe6629c, &H81f7, &H4281, [&Hbd, &H91, &Hc9, &Hd6, &H04, &Ha9, &H5a, &Hf6]] As GUID

' Flanger {EFCA3D92-DFD8-4672-A603-7420894BAD98}
Dim GUID_DSFX_STANDARD_FLANGER = [&Hefca3d92, &Hdfd8, &H4672, [&Ha6, &H03, &H74, &H20, &H89, &H4b, &Had, &H98]] As GUID

' Echo/Delay {EF3E932C-D40B-4F51-8CCF-3F98F1B29D5D}
Dim GUID_DSFX_STANDARD_ECHO = [&Hef3e932c, &Hd40b, &H4f51, [&H8c, &Hcf, &H3f, &H98, &Hf1, &Hb2, &H9d, &H5d]] As GUID

' Distortion {EF114C90-CD1D-484E-96E5-09CFAF912A21}
Dim GUID_DSFX_STANDARD_DISTORTION = [&Hef114c90, &Hcd1d, &H484e, [&H96, &He5, &H09, &Hcf, &Haf, &H91, &H2a, &H21]] As GUID

' Compressor/Limiter {EF011F79-4000-406D-87AF-BFFB3FC39D57}
Dim GUID_DSFX_STANDARD_COMPRESSOR = [&Hef011f79, &H4000, &H406d, [&H87, &Haf, &Hbf, &Hfb, &H3f, &Hc3, &H9d, &H57]] As GUID

' Parametric Equalization {120CED89-3BF4-4173-A132-3CB406CF3231}
Dim GUID_DSFX_STANDARD_PARAMEQ = [&H120ced89, &H3bf4, &H4173, [&Ha1, &H32, &H3c, &Hb4, &H06, &Hcf, &H32, &H31]] As GUID

' I3DL2 Environmental Reverberation: Reverb (Listener) Effect {EF985E71-D5C7-42D4-BA4D-2D073E2E96F4}
Dim GUID_DSFX_STANDARD_I3DL2REVERB = [&Hef985e71, &Hd5c7, &H42d4, [&Hba, &H4d, &H2d, &H07, &H3e, &H2e, &H96, &Hf4]] As GUID

' Waves Reverberation {87FC0268-9A55-4360-95AA-004A1D9DE26C}
Dim GUID_DSFX_WAVES_REVERB = [&H87fc0268, &H9a55, &H4360, [&H95, &Haa, &H00, &H4a, &H1d, &H9d, &He2, &H6c]] As GUID
