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