1 /*==========================================================================; 2 * 3 * Copyright (C) 1995,1996 Microsoft Corporation. All Rights Reserved. 4 * 5 * File: dsound.h 6 * Content: DirectSound include file 7 * 8 ***************************************************************************/ 9 10 #ifndef __DSOUND_INCLUDED__ 11 #define __DSOUND_INCLUDED__ 12 13 #ifdef _WIN32 14 #define COM_NO_WINDOWS_H 15 #include <objbase.h> 16 #endif 17 18 #define _FACDS 0x878 19 #define MAKE_DSHRESULT( code ) MAKE_HRESULT( 1, _FACDS, code ) 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 // Direct Sound Component GUID {47D4D946-62E8-11cf-93BC-444553540000} 26 DEFINE_GUID(CLSID_DirectSound, 27 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0); 28 29 // DirectSound 279afa83-4981-11ce-a521-0020af0be560 30 DEFINE_GUID(IID_IDirectSound,0x279AFA83,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60); 31 // DirectSoundBuffer 279afa85-4981-11ce-a521-0020af0be560 32 DEFINE_GUID(IID_IDirectSoundBuffer,0x279AFA85,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60); 33 34 35 36 //==========================================================================; 37 // 38 // Structures... 39 // 40 //==========================================================================; 41 #ifdef __cplusplus 42 /* 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined */ 43 struct IDirectSound; 44 struct IDirectSoundBuffer; 45 #endif 46 47 typedef struct IDirectSound *LPDIRECTSOUND; 48 typedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER; 49 typedef struct IDirectSoundBuffer **LPLPDIRECTSOUNDBUFFER; 50 51 52 typedef struct _DSCAPS 53 { 54 DWORD dwSize; 55 DWORD dwFlags; 56 DWORD dwMinSecondarySampleRate; 57 DWORD dwMaxSecondarySampleRate; 58 DWORD dwPrimaryBuffers; 59 DWORD dwMaxHwMixingAllBuffers; 60 DWORD dwMaxHwMixingStaticBuffers; 61 DWORD dwMaxHwMixingStreamingBuffers; 62 DWORD dwFreeHwMixingAllBuffers; 63 DWORD dwFreeHwMixingStaticBuffers; 64 DWORD dwFreeHwMixingStreamingBuffers; 65 DWORD dwMaxHw3DAllBuffers; 66 DWORD dwMaxHw3DStaticBuffers; 67 DWORD dwMaxHw3DStreamingBuffers; 68 DWORD dwFreeHw3DAllBuffers; 69 DWORD dwFreeHw3DStaticBuffers; 70 DWORD dwFreeHw3DStreamingBuffers; 71 DWORD dwTotalHwMemBytes; 72 DWORD dwFreeHwMemBytes; 73 DWORD dwMaxContigFreeHwMemBytes; 74 DWORD dwUnlockTransferRateHwBuffers; 75 DWORD dwPlayCpuOverheadSwBuffers; 76 DWORD dwReserved1; 77 DWORD dwReserved2; 78 } DSCAPS, *LPDSCAPS; 79 80 typedef struct _DSBCAPS 81 { 82 83 DWORD dwSize; 84 DWORD dwFlags; 85 DWORD dwBufferBytes; 86 DWORD dwUnlockTransferRate; 87 DWORD dwPlayCpuOverhead; 88 } DSBCAPS, *LPDSBCAPS; 89 90 typedef struct _DSBUFFERDESC 91 { 92 DWORD dwSize; 93 DWORD dwFlags; 94 DWORD dwBufferBytes; 95 DWORD dwReserved; 96 LPWAVEFORMATEX lpwfxFormat; 97 } DSBUFFERDESC, *LPDSBUFFERDESC; 98 99 100 101 typedef LPVOID* LPLPVOID; 102 103 104 typedef BOOL (FAR PASCAL * LPDSENUMCALLBACKW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID); 105 typedef BOOL (FAR PASCAL * LPDSENUMCALLBACKA)(GUID FAR *, LPSTR, LPSTR, LPVOID); 106 107 extern HRESULT WINAPI DirectSoundCreate(GUID FAR * lpGUID, LPDIRECTSOUND * ppDS, IUnknown FAR *pUnkOuter ); 108 extern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW lpCallback, LPVOID lpContext ); 109 extern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA lpCallback, LPVOID lpContext ); 110 111 #ifdef UNICODE 112 #define LPDSENUMCALLBACK LPDSENUMCALLBACKW 113 #define DirectSoundEnumerate DirectSoundEnumerateW 114 #else 115 #define LPDSENUMCALLBACK LPDSENUMCALLBACKA 116 #define DirectSoundEnumerate DirectSoundEnumerateA 117 #endif 118 119 // 120 // IDirectSound 121 // 122 #undef INTERFACE 123 #define INTERFACE IDirectSound 124 #ifdef _WIN32 125 DECLARE_INTERFACE_( IDirectSound, IUnknown ) 126 { 127 /*** IUnknown methods ***/ 128 STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; 129 STDMETHOD_(ULONG,AddRef) (THIS) PURE; 130 STDMETHOD_(ULONG,Release) (THIS) PURE; 131 /*** IDirectSound methods ***/ 132 133 STDMETHOD( CreateSoundBuffer)(THIS_ LPDSBUFFERDESC, LPLPDIRECTSOUNDBUFFER, IUnknown FAR *) PURE; 134 STDMETHOD( GetCaps)(THIS_ LPDSCAPS ) PURE; 135 STDMETHOD( DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER, LPLPDIRECTSOUNDBUFFER ) PURE; 136 STDMETHOD( SetCooperativeLevel)(THIS_ HWND, DWORD ) PURE; 137 STDMETHOD( Compact)(THIS ) PURE; 138 STDMETHOD( GetSpeakerConfig)(THIS_ LPDWORD ) PURE; 139 STDMETHOD( SetSpeakerConfig)(THIS_ DWORD ) PURE; 140 STDMETHOD( Initialize)(THIS_ GUID FAR * ) PURE; 141 }; 142 143 #if !defined(__cplusplus) || defined(CINTERFACE) 144 #define IDirectSound_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) 145 #define IDirectSound_AddRef(p) (p)->lpVtbl->AddRef(p) 146 #define IDirectSound_Release(p) (p)->lpVtbl->Release(p) 147 #define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c) 148 #define IDirectSound_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) 149 #define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b) 150 #define IDirectSound_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) 151 #define IDirectSound_Compact(p) (p)->lpVtbl->Compact(p) 152 #define IDirectSound_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a) 153 #define IDirectSound_SetSpeakerConfig(p,b) (p)->lpVtbl->SetSpeakerConfig(p,b) 154 #define IDirectSound_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) 155 #endif 156 157 #endif 158 159 // 160 // IDirectSoundBuffer 161 // 162 #undef INTERFACE 163 #define INTERFACE IDirectSoundBuffer 164 #ifdef _WIN32 165 DECLARE_INTERFACE_( IDirectSoundBuffer, IUnknown ) 166 { 167 /*** IUnknown methods ***/ 168 STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; 169 STDMETHOD_(ULONG,AddRef) (THIS) PURE; 170 STDMETHOD_(ULONG,Release) (THIS) PURE; 171 /*** IDirectSoundBuffer methods ***/ 172 173 STDMETHOD( GetCaps)(THIS_ LPDSBCAPS ) PURE; 174 STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD,LPDWORD ) PURE; 175 STDMETHOD( GetFormat)(THIS_ LPWAVEFORMATEX, DWORD, LPDWORD ) PURE; 176 STDMETHOD( GetVolume)(THIS_ LPLONG ) PURE; 177 STDMETHOD( GetPan)(THIS_ LPLONG ) PURE; 178 STDMETHOD( GetFrequency)(THIS_ LPDWORD ) PURE; 179 STDMETHOD( GetStatus)(THIS_ LPDWORD ) PURE; 180 STDMETHOD( Initialize)(THIS_ LPDIRECTSOUND, LPDSBUFFERDESC ) PURE; 181 STDMETHOD( Lock)(THIS_ DWORD,DWORD,LPVOID,LPDWORD,LPVOID,LPDWORD,DWORD ) PURE; 182 STDMETHOD( Play)(THIS_ DWORD,DWORD,DWORD ) PURE; 183 STDMETHOD(SetCurrentPosition)(THIS_ DWORD ) PURE; 184 STDMETHOD( SetFormat)(THIS_ LPWAVEFORMATEX ) PURE; 185 STDMETHOD( SetVolume)(THIS_ LONG ) PURE; 186 STDMETHOD( SetPan)(THIS_ LONG ) PURE; 187 STDMETHOD( SetFrequency)(THIS_ DWORD ) PURE; 188 STDMETHOD( Stop)(THIS ) PURE; 189 STDMETHOD( Unlock)(THIS_ LPVOID,DWORD,LPVOID,DWORD ) PURE; 190 STDMETHOD( Restore)(THIS ) PURE; 191 }; 192 193 #if !defined(__cplusplus) || defined(CINTERFACE) 194 #define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) 195 #define IDirectSoundBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) 196 #define IDirectSoundBuffer_Release(p) (p)->lpVtbl->Release(p) 197 #define IDirectSoundBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) 198 #define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) 199 #define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) 200 #define IDirectSoundBuffer_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a) 201 #define IDirectSoundBuffer_GetPan(p,a) (p)->lpVtbl->GetPan(p,a) 202 #define IDirectSoundBuffer_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a) 203 #define IDirectSoundBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) 204 #define IDirectSoundBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) 205 #define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) 206 #define IDirectSoundBuffer_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c) 207 #define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a) 208 #define IDirectSoundBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a) 209 #define IDirectSoundBuffer_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a) 210 #define IDirectSoundBuffer_SetPan(p,a) (p)->lpVtbl->SetPan(p,a) 211 #define IDirectSoundBuffer_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a) 212 #define IDirectSoundBuffer_Stop(p) (p)->lpVtbl->Stop(p) 213 #define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) 214 #define IDirectSoundBuffer_Restore(p) (p)->lpVtbl->Restore(p) 215 #endif 216 217 #endif 218 219 220 221 /* 222 * Return Codes 223 */ 224 225 #define DS_OK 0 226 227 /* 228 * The call failed because resources (such as a priority level) 229 * were already being used by another caller. 230 */ 231 #define DSERR_ALLOCATED MAKE_DSHRESULT( 10 ) 232 /* 233 * The control (vol,pan,etc.) requested by the caller is not available. 234 */ 235 #define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT( 30 ) 236 /* 237 * An invalid parameter was passed to the returning function 238 */ 239 #define DSERR_INVALIDPARAM E_INVALIDARG 240 /* 241 * This call is not valid for the current state of this object 242 */ 243 #define DSERR_INVALIDCALL MAKE_DSHRESULT( 50 ) 244 /* 245 * An undetermined error occured inside the DSound subsystem 246 */ 247 #define DSERR_GENERIC E_FAIL 248 /* 249 * The caller does not have the priority level required for the function to 250 * succeed. 251 */ 252 #define DSERR_PRIOLEVELNEEDED MAKE_DSHRESULT( 70 ) 253 /* 254 * The DSound subsystem couldn't allocate sufficient memory to complete the 255 * caller's request. 256 */ 257 #define DSERR_OUTOFMEMORY E_OUTOFMEMORY 258 /* 259 * The specified WAVE format is not supported 260 */ 261 #define DSERR_BADFORMAT MAKE_DSHRESULT( 100 ) 262 /* 263 * The function called is not supported at this time 264 */ 265 #define DSERR_UNSUPPORTED E_NOTIMPL 266 /* 267 * No sound driver is available for use 268 */ 269 #define DSERR_NODRIVER MAKE_DSHRESULT( 120 ) 270 /* 271 * This object is already initialized 272 */ 273 #define DSERR_ALREADYINITIALIZED MAKE_DSHRESULT( 130 ) 274 /* 275 * This object does not support aggregation 276 */ 277 #define DSERR_NOAGGREGATION CLASS_E_NOAGGREGATION 278 /* 279 * The buffer memory has been lost, and must be Restored. 280 */ 281 #define DSERR_BUFFERLOST MAKE_DSHRESULT( 150 ) 282 /* 283 * Another app has a higher priority level, preventing this call from 284 * succeeding. 285 */ 286 #define DSERR_OTHERAPPHASPRIO MAKE_DSHRESULT( 160 ) 287 /* 288 * The Initialize() member on the Direct Sound Object has not been 289 * called or called successfully before calls to other members. 290 */ 291 #define DSERR_UNINITIALIZED MAKE_DSHRESULT( 170 ) 292 293 294 295 296 //==========================================================================; 297 // 298 // Flags... 299 // 300 //==========================================================================; 301 302 #define DSCAPS_PRIMARYMONO 0x00000001 303 #define DSCAPS_PRIMARYSTEREO 0x00000002 304 #define DSCAPS_PRIMARY8BIT 0x00000004 305 #define DSCAPS_PRIMARY16BIT 0x00000008 306 #define DSCAPS_CONTINUOUSRATE 0x00000010 307 #define DSCAPS_EMULDRIVER 0x00000020 308 #define DSCAPS_CERTIFIED 0x00000040 309 #define DSCAPS_SECONDARYMONO 0x00000100 310 #define DSCAPS_SECONDARYSTEREO 0x00000200 311 #define DSCAPS_SECONDARY8BIT 0x00000400 312 #define DSCAPS_SECONDARY16BIT 0x00000800 313 314 315 316 #define DSBPLAY_LOOPING 0x00000001 317 318 319 320 #define DSBSTATUS_PLAYING 0x00000001 321 #define DSBSTATUS_BUFFERLOST 0x00000002 322 #define DSBSTATUS_LOOPING 0x00000004 323 324 325 #define DSBLOCK_FROMWRITECURSOR 0x00000001 326 327 328 329 #define DSSCL_NORMAL 1 330 #define DSSCL_PRIORITY 2 331 #define DSSCL_EXCLUSIVE 3 332 #define DSSCL_WRITEPRIMARY 4 333 334 335 336 #define DSBCAPS_PRIMARYBUFFER 0x00000001 337 #define DSBCAPS_STATIC 0x00000002 338 #define DSBCAPS_LOCHARDWARE 0x00000004 339 #define DSBCAPS_LOCSOFTWARE 0x00000008 340 #define DSBCAPS_CTRLFREQUENCY 0x00000020 341 #define DSBCAPS_CTRLPAN 0x00000040 342 #define DSBCAPS_CTRLVOLUME 0x00000080 343 #define DSBCAPS_CTRLDEFAULT 0x000000E0 // Pan + volume + frequency. 344 #define DSBCAPS_CTRLALL 0x000000E0 // All control capabilities 345 #define DSBCAPS_STICKYFOCUS 0x00004000 346 #define DSBCAPS_GETCURRENTPOSITION2 0x00010000 // More accurate play cursor under emulation 347 348 349 350 351 #define DSSPEAKER_HEADPHONE 1 352 #define DSSPEAKER_MONO 2 353 #define DSSPEAKER_QUAD 3 354 #define DSSPEAKER_STEREO 4 355 #define DSSPEAKER_SURROUND 5 356 357 358 359 360 361 362 #ifdef __cplusplus 363 }; 364 #endif 365 366 #endif /* __DSOUND_INCLUDED__ */ 367