1 module win32.directx.dsound8;
2 
3 //import tango.sys.win32.Types;
4 import win32.windows;
5 
6 alias GUID* LPCGUID;
7 
8 interface IUnknown
9 {
10 	HRESULT QueryInterface(IID* riid, void** pvObject);
11 	ULONG AddRef();
12 	ULONG Release();
13 }
14 
15 alias IUnknown LPUNKNOWN;
16 
17 interface IDirectSound : IUnknown
18 {
19 	extern(Windows):
20 
21     // IDirectSound methods
22     HRESULT CreateSoundBuffer    (LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter);
23     HRESULT GetCaps              (LPDSCAPS pDSCaps);
24     HRESULT DuplicateSoundBuffer (LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate);
25     HRESULT SetCooperativeLevel  (HWND hwnd, DWORD dwLevel);
26     HRESULT Compact              ();
27     HRESULT GetSpeakerConfig     (LPDWORD pdwSpeakerConfig);
28     HRESULT SetSpeakerConfig     (DWORD dwSpeakerConfig);
29     HRESULT Initialize           (LPCGUID pcGuidDevice);
30 }
31 
32 alias IDirectSound LPDIRECTSOUND;
33 
34 interface IDirectSound8 : IDirectSound
35 {
36 	extern(Windows):
37 
38     // IDirectSound8 methods
39     HRESULT VerifyCertification  (LPDWORD pdwCertified);
40 }
41 
42 alias IDirectSound8 LPDIRECTSOUND8;
43 
44 interface IDirectSoundBuffer : IUnknown
45 {
46 	extern(Windows):
47 
48     // IDirectSoundBuffer methods
49     HRESULT GetCaps              (LPDSBCAPS pDSBufferCaps);
50     HRESULT GetCurrentPosition   (LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor);
51     HRESULT GetFormat            (LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten);
52     HRESULT GetVolume            (LPLONG plVolume);
53     HRESULT GetPan               (LPLONG plPan);
54     HRESULT GetFrequency         (LPDWORD pdwFrequency);
55     HRESULT GetStatus            (LPDWORD pdwStatus);
56     HRESULT Initialize           (LPDIRECTSOUND pDirectSound, LPCDSBUFFERDESC pcDSBufferDesc);
57     HRESULT Lock                 (DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1,
58                                            LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags);
59     HRESULT Play                 (DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags);
60     HRESULT SetCurrentPosition   (DWORD dwNewPosition);
61     HRESULT SetFormat            (LPCWAVEFORMATEX pcfxFormat);
62     HRESULT SetVolume            (LONG lVolume);
63     HRESULT SetPan               (LONG lPan);
64     HRESULT SetFrequency         (DWORD dwFrequency);
65     HRESULT Stop                 ();
66     HRESULT Unlock               (LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2);
67     HRESULT Restore              ();
68 }
69 
70 alias IDirectSoundBuffer LPDIRECTSOUNDBUFFER;
71 
72 interface IDirectSound3DListener : IUnknown
73 {
74 	extern(Windows):
75 
76     // IDirectSound3DListener methods
77     HRESULT GetAllParameters         (LPDS3DLISTENER pListener);
78     HRESULT GetDistanceFactor        (D3DVALUE* pflDistanceFactor);
79     HRESULT GetDopplerFactor         (D3DVALUE* pflDopplerFactor);
80     HRESULT GetOrientation           (D3DVECTOR* pvOrientFront, D3DVECTOR* pvOrientTop);
81     HRESULT GetPosition              (D3DVECTOR* pvPosition);
82     HRESULT GetRolloffFactor         (D3DVALUE* pflRolloffFactor);
83     HRESULT GetVelocity              (D3DVECTOR* pvVelocity);
84     HRESULT SetAllParameters         (LPCDS3DLISTENER pcListener, DWORD dwApply);
85     HRESULT SetDistanceFactor        (D3DVALUE flDistanceFactor, DWORD dwApply);
86     HRESULT SetDopplerFactor         (D3DVALUE flDopplerFactor, DWORD dwApply);
87     HRESULT SetOrientation           (D3DVALUE xFront, D3DVALUE yFront, D3DVALUE zFront,
88                                                D3DVALUE xTop, D3DVALUE yTop, D3DVALUE zTop, DWORD dwApply);
89     HRESULT SetPosition              (D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply);
90     HRESULT SetRolloffFactor         (D3DVALUE flRolloffFactor, DWORD dwApply);
91     HRESULT SetVelocity              (D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply);
92     HRESULT CommitDeferredSettings   ();
93 }
94 
95 struct WAVEFORMATEX
96 {
97 	ushort wFormatTag;
98 	ushort nChannels;
99 	uint nSamplesPerSec;
100 	uint nAvgBytesPerSec;
101 	ushort nBlockAlign;
102 	ushort wBitsPerSample;
103 	ushort cbSize;
104 }
105 
106 alias WAVEFORMATEX* LPWAVEFORMATEX, LPCWAVEFORMATEX;
107 
108 enum : uint
109 {
110 	WAVE_FORMAT_PCM = 1
111 }
112 
113 struct DSCBUFFERDESC
114 {
115     DWORD           dwSize;
116     DWORD           dwFlags;
117     DWORD           dwBufferBytes;
118     DWORD           dwReserved;
119     LPWAVEFORMATEX  lpwfxFormat;
120     DWORD           dwFXCount;
121     LPDSCEFFECTDESC lpDSCFXDesc;
122 }
123 
124 alias DSCBUFFERDESC* LPDSCBUFFERDESC;
125 
126 struct DSBUFFERDESC
127 {
128     DWORD           dwSize;
129     DWORD           dwFlags;
130     DWORD           dwBufferBytes;
131     DWORD           dwReserved;
132     LPWAVEFORMATEX  lpwfxFormat;
133     GUID            guid3DAlgorithm;
134 }
135 
136 alias DSBUFFERDESC* LPCDSBUFFERDESC;
137 
138 struct DSCAPS
139 {
140     DWORD           dwSize;
141     DWORD           dwFlags;
142     DWORD           dwMinSecondarySampleRate;
143     DWORD           dwMaxSecondarySampleRate;
144     DWORD           dwPrimaryBuffers;
145     DWORD           dwMaxHwMixingAllBuffers;
146     DWORD           dwMaxHwMixingStaticBuffers;
147     DWORD           dwMaxHwMixingStreamingBuffers;
148     DWORD           dwFreeHwMixingAllBuffers;
149     DWORD           dwFreeHwMixingStaticBuffers;
150     DWORD           dwFreeHwMixingStreamingBuffers;
151     DWORD           dwMaxHw3DAllBuffers;
152     DWORD           dwMaxHw3DStaticBuffers;
153     DWORD           dwMaxHw3DStreamingBuffers;
154     DWORD           dwFreeHw3DAllBuffers;
155     DWORD           dwFreeHw3DStaticBuffers;
156     DWORD           dwFreeHw3DStreamingBuffers;
157     DWORD           dwTotalHwMemBytes;
158     DWORD           dwFreeHwMemBytes;
159     DWORD           dwMaxContigFreeHwMemBytes;
160     DWORD           dwUnlockTransferRateHwBuffers;
161     DWORD           dwPlayCpuOverheadSwBuffers;
162     DWORD           dwReserved1;
163     DWORD           dwReserved2;
164 }
165 
166 alias DSCAPS* LPDSCAPS;
167 
168 struct DSBCAPS
169 {
170     DWORD           dwSize;
171     DWORD           dwFlags;
172     DWORD           dwBufferBytes;
173     DWORD           dwUnlockTransferRate;
174     DWORD           dwPlayCpuOverhead;
175 }
176 
177 alias DSBCAPS *LPDSBCAPS;
178 
179 struct DSCEFFECTDESC
180 {
181     DWORD       dwSize;
182     DWORD       dwFlags;
183     GUID        guidDSCFXClass;
184     GUID        guidDSCFXInstance;
185     DWORD       dwReserved1;
186     DWORD       dwReserved2;
187 }
188 
189 alias DSCEFFECTDESC *LPDSCEFFECTDESC;
190 
191 struct DS3DLISTENER
192 {
193     DWORD           dwSize;
194     D3DVECTOR       vPosition;
195     D3DVECTOR       vVelocity;
196     D3DVECTOR       vOrientFront;
197     D3DVECTOR       vOrientTop;
198     D3DVALUE        flDistanceFactor;
199     D3DVALUE        flRolloffFactor;
200     D3DVALUE        flDopplerFactor;
201 }
202 
203 alias DS3DLISTENER *LPDS3DLISTENER, LPCDS3DLISTENER;
204 
205 alias float D3DVALUE;
206 
207 struct D3DVECTOR
208 {
209     float x;
210     float y;
211     float z;
212 }
213 
214 extern(Windows) export HRESULT DirectSoundCreate8(LPCGUID pcGuidDevice, LPDIRECTSOUND8 *ppDS8, LPUNKNOWN pUnkOuter);
215 
216 const DSSCL_PRIORITY = 0x00000002;
217 const DSBCAPS_PRIMARYBUFFER = 0x00000001;
218 const DSBCAPS_CTRL3D = 0x00000010;
219 const DSBCAPS_GETCURRENTPOSITION2 = 0x00010000;
220 const DSBCAPS_LOCDEFER = 0x00040000;
221 const DSBPLAY_LOOPING = 0x00000001;
222 const DSBSTATUS_PLAYING = 0x00000001;
223 const DSBCAPS_CTRLFREQUENCY = 0x00000020;
224 const DSBCAPS_CTRLPAN = 0x00000040;
225 const DSBCAPS_CTRLVOLUME = 0x00000080;
226 const DSBLOCK_ENTIREBUFFER = 0x00000002;
227 
228 const GUID IID_IDirectSound3DListener8 = {0x279AFA84,0x4981,0x11CE,[0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60]};