1 // Copyright © 2015, Peter Atashian
2 // Licensed under the MIT License <LICENSE.md>
3 //! DSound procedure declarations, constant definitions and macros
4 STRUCT
!{struct DSCAPS
{
7 dwMinSecondarySampleRate
: ::DWORD
,
8 dwMaxSecondarySampleRate
: ::DWORD
,
9 dwPrimaryBuffers
: ::DWORD
,
10 dwMaxHwMixingAllBuffers
: ::DWORD
,
11 dwMaxHwMixingStaticBuffers
: ::DWORD
,
12 dwMaxHwMixingStreamingBuffers
: ::DWORD
,
13 dwFreeHwMixingAllBuffers
: ::DWORD
,
14 dwFreeHwMixingStaticBuffers
: ::DWORD
,
15 dwFreeHwMixingStreamingBuffers
: ::DWORD
,
16 dwMaxHw3DAllBuffers
: ::DWORD
,
17 dwMaxHw3DStaticBuffers
: ::DWORD
,
18 dwMaxHw3DStreamingBuffers
: ::DWORD
,
19 dwFreeHw3DAllBuffers
: ::DWORD
,
20 dwFreeHw3DStaticBuffers
: ::DWORD
,
21 dwFreeHw3DStreamingBuffers
: ::DWORD
,
22 dwTotalHwMemBytes
: ::DWORD
,
23 dwFreeHwMemBytes
: ::DWORD
,
24 dwMaxContigFreeHwMemBytes
: ::DWORD
,
25 dwUnlockTransferRateHwBuffers
: ::DWORD
,
26 dwPlayCpuOverheadSwBuffers
: ::DWORD
,
30 pub type LPDSCAPS
= *mut DSCAPS
;
31 STRUCT
!{struct DSBCAPS
{
34 dwBufferBytes
: ::DWORD
,
35 dwUnlockTransferRate
: ::DWORD
,
36 dwPlayCpuOverhead
: ::DWORD
,
38 pub type LPDSBCAPS
= *mut DSBCAPS
;
39 STRUCT
!{struct DSBUFFERDESC
{
42 dwBufferBytes
: ::DWORD
,
44 lpwfxFormat
: ::LPWAVEFORMATEX
,
45 guid3DAlgorithm
: ::GUID
,
47 pub type LPCDSBUFFERDESC
= *const DSBUFFERDESC
;
49 interface
IDirectSoundBuffer(IDirectSoundBufferVtbl
): IUnknown(IUnknownVtbl
) {
50 fn GetCaps(&mut self, pDSBufferCaps
: ::LPDSBCAPS
) -> ::HRESULT
,
51 fn GetCurrentPosition(
52 &mut self, pdwCurrentPlayCursor
: ::LPDWORD
, pdwCurrentWriteCursor
: ::LPDWORD
55 &mut self, pwfxFormat
: ::LPWAVEFORMATEX
, dwSizeAllocated
: ::DWORD
,
56 pdwSizeWritten
: ::LPDWORD
58 fn GetVolume(&mut self, plVolume
: ::LPLONG
) -> ::HRESULT
,
59 fn GetPan(&mut self, plPan
: ::LPLONG
) -> ::HRESULT
,
60 fn GetFrequency(&mut self, pdwFrequency
: ::LPDWORD
) -> ::HRESULT
,
61 fn GetStatus(&mut self, pdwStatus
: ::LPDWORD
) -> ::HRESULT
,
63 &mut self, pDirectSound
: ::LPDIRECTSOUND
, pcDSBufferDesc
: ::LPCDSBUFFERDESC
66 &mut self, dwOffset
: ::DWORD
, dwBytes
: ::DWORD
, ppvAudioPtr1
: *mut ::LPVOID
,
67 pdwAudioBytes1
: ::LPDWORD
, ppvAudioPtr2
: *mut ::LPVOID
, pdwAudioBytes2
: ::LPDWORD
,
70 fn Play(&mut self, dwReserved1
: ::DWORD
, dwPriority
: ::DWORD
, dwFlags
: ::DWORD
) -> ::HRESULT
,
71 fn SetCurrentPosition(&mut self, dwNewPosition
: ::DWORD
) -> ::HRESULT
,
72 fn SetFormat(&mut self, pcfxFormat
: ::LPCWAVEFORMATEX
) -> ::HRESULT
,
73 fn SetVolume(&mut self, lVolume
: ::LONG
) -> ::HRESULT
,
74 fn SetPan(&mut self, lPan
: ::LONG
) -> ::HRESULT
,
75 fn SetFrequency(&mut self, dwFrequency
: ::DWORD
) -> ::HRESULT
,
76 fn Stop(&mut self) -> ::HRESULT
,
78 &mut self, pvAudioPtr1
: ::LPVOID
, dwAudioBytes1
: ::DWORD
, pvAudioPtr2
: ::LPVOID
,
79 dwAudioBytes2
: ::DWORD
81 fn Restore(&mut self) -> ::HRESULT
84 pub type LPDIRECTSOUNDBUFFER
= *mut IDirectSoundBuffer
;
86 interface
IDirectSound(IDirectSoundVtbl
): IUnknown(IUnknownVtbl
)
89 &mut self, pcDSBufferDesc
: ::LPCDSBUFFERDESC
, ppDSBuffer
: *mut ::LPDIRECTSOUNDBUFFER
,
90 pUnkOuter
: ::LPUNKNOWN
92 fn GetCaps(&mut self, pDSCaps
: ::LPDSCAPS
) -> ::HRESULT
,
93 fn DuplicateSoundBuffer(
94 &mut self, pDSBufferOriginal
: LPDIRECTSOUNDBUFFER
,
95 ppDSBufferDuplicate
: *mut ::LPDIRECTSOUNDBUFFER
97 fn SetCooperativeLevel(&mut self, hWnd
: ::HWND
, dwLevel
: ::DWORD
) -> ::HRESULT
,
98 fn Compact(&mut self) -> ::HRESULT
,
99 fn GetSpeakerConfig(&mut self, pdwSpeakerConfig
: ::LPDWORD
) -> ::HRESULT
,
100 fn SetSpeakerConfig(&mut self, dwSpeakerConfig
: ::DWORD
) -> ::HRESULT
,
101 fn Initialize(&mut self, pcGuidDevice
: ::LPCGUID
) -> ::HRESULT
104 pub type LPDIRECTSOUND
= *mut IDirectSound
;
105 pub const DS_OK
: ::HRESULT
= ::S_OK
;
106 pub const DSERR_GENERIC
: ::HRESULT
= ::E_FAIL
;
107 pub const DSSCL_NORMAL
: ::DWORD
= 0x00000001;
108 pub const DSSCL_PRIORITY
: ::DWORD
= 0x00000002;
109 pub const DSSCL_EXCLUSIVE
: ::DWORD
= 0x00000003;
110 pub const DSSCL_WRITEPRIMARY
: ::DWORD
= 0x00000004;
111 pub const DSBCAPS_PRIMARYBUFFER
: ::DWORD
= 0x00000001;
112 pub const DSBCAPS_STATIC
: ::DWORD
= 0x00000002;
113 pub const DSBCAPS_LOCHARDWARE
: ::DWORD
= 0x00000004;
114 pub const DSBCAPS_LOCSOFTWARE
: ::DWORD
= 0x00000008;
115 pub const DSBCAPS_CTRL3D
: ::DWORD
= 0x00000010;
116 pub const DSBCAPS_CTRLFREQUENCY
: ::DWORD
= 0x00000020;
117 pub const DSBCAPS_CTRLPAN
: ::DWORD
= 0x00000040;
118 pub const DSBCAPS_CTRLVOLUME
: ::DWORD
= 0x00000080;
119 pub const DSBCAPS_CTRLPOSITIONNOTIFY
: ::DWORD
= 0x00000100;
120 pub const DSBCAPS_CTRLFX
: ::DWORD
= 0x00000200;
121 pub const DSBCAPS_STICKYFOCUS
: ::DWORD
= 0x00004000;
122 pub const DSBCAPS_GLOBALFOCUS
: ::DWORD
= 0x00008000;
123 pub const DSBCAPS_GETCURRENTPOSITION2
: ::DWORD
= 0x00010000;
124 pub const DSBCAPS_MUTE3DATMAXDISTANCE
: ::DWORD
= 0x00020000;
125 pub const DSBCAPS_LOCDEFER
: ::DWORD
= 0x00040000;
126 pub const DSBCAPS_TRUEPLAYPOSITION
: ::DWORD
= 0x00080000;
127 pub const DSBPLAY_LOOPING
: ::DWORD
= 0x00000001;
128 pub const DSBPLAY_LOCHARDWARE
: ::DWORD
= 0x00000002;
129 pub const DSBPLAY_LOCSOFTWARE
: ::DWORD
= 0x00000004;
130 pub const DSBPLAY_TERMINATEBY_TIME
: ::DWORD
= 0x00000008;
131 pub const DSBPLAY_TERMINATEBY_DISTANCE
: ::DWORD
= 0x000000010;
132 pub const DSBPLAY_TERMINATEBY_PRIORITY
: ::DWORD
= 0x000000020;