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]};