19fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*==========================================================================;
29fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *
39fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *  Copyright (C) 1995,1996 Microsoft Corporation.  All Rights Reserved.
49fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *
59fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *  File:       dsound.h
69fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *  Content:    DirectSound include file
79fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *
89fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ***************************************************************************/
99fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifndef __DSOUND_INCLUDED__
119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define __DSOUND_INCLUDED__
129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifdef _WIN32
149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define COM_NO_WINDOWS_H
159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include <objbase.h>
169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define _FACDS  0x878
199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAKE_DSHRESULT( code )  MAKE_HRESULT( 1, _FACDS, code )
209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifdef __cplusplus
229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern "C" {
239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// Direct Sound Component GUID    {47D4D946-62E8-11cf-93BC-444553540000}
269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDEFINE_GUID(CLSID_DirectSound,
279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// DirectSound 279afa83-4981-11ce-a521-0020af0be560
309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDEFINE_GUID(IID_IDirectSound,0x279AFA83,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// DirectSoundBuffer 279afa85-4981-11ce-a521-0020af0be560
329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDEFINE_GUID(IID_IDirectSoundBuffer,0x279AFA85,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//==========================================================================;
379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//                            Structures...
399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//==========================================================================;
419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifdef __cplusplus
429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined */
439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstruct IDirectSound;
449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstruct IDirectSoundBuffer;
459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct IDirectSound           *LPDIRECTSOUND;
489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct IDirectSoundBuffer     *LPDIRECTSOUNDBUFFER;
499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct IDirectSoundBuffer    **LPLPDIRECTSOUNDBUFFER;
509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct _DSCAPS
539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwSize;
559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwFlags;
569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwMinSecondarySampleRate;
579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwMaxSecondarySampleRate;
589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwPrimaryBuffers;
599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwMaxHwMixingAllBuffers;
609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwMaxHwMixingStaticBuffers;
619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwMaxHwMixingStreamingBuffers;
629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwFreeHwMixingAllBuffers;
639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwFreeHwMixingStaticBuffers;
649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwFreeHwMixingStreamingBuffers;
659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwMaxHw3DAllBuffers;
669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwMaxHw3DStaticBuffers;
679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwMaxHw3DStreamingBuffers;
689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwFreeHw3DAllBuffers;
699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwFreeHw3DStaticBuffers;
709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwFreeHw3DStreamingBuffers;
719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwTotalHwMemBytes;
729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwFreeHwMemBytes;
739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwMaxContigFreeHwMemBytes;
749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwUnlockTransferRateHwBuffers;
759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwPlayCpuOverheadSwBuffers;
769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwReserved1;
779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwReserved2;
789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} DSCAPS, *LPDSCAPS;
799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct _DSBCAPS
819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwSize;
849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwFlags;
859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwBufferBytes;
869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwUnlockTransferRate;
879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD       dwPlayCpuOverhead;
889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} DSBCAPS, *LPDSBCAPS;
899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct _DSBUFFERDESC
919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD                   dwSize;
939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD                   dwFlags;
949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD                   dwBufferBytes;
959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    DWORD                   dwReserved;
969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    LPWAVEFORMATEX          lpwfxFormat;
979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} DSBUFFERDESC, *LPDSBUFFERDESC;
989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef LPVOID* LPLPVOID;
1029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef BOOL (FAR PASCAL * LPDSENUMCALLBACKW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID);
1059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef BOOL (FAR PASCAL * LPDSENUMCALLBACKA)(GUID FAR *, LPSTR, LPSTR, LPVOID);
1069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern HRESULT WINAPI DirectSoundCreate(GUID FAR * lpGUID, LPDIRECTSOUND * ppDS, IUnknown FAR *pUnkOuter );
1089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW lpCallback, LPVOID lpContext );
1099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA lpCallback, LPVOID lpContext );
1109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifdef UNICODE
1129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPDSENUMCALLBACK        LPDSENUMCALLBACKW
1139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DirectSoundEnumerate    DirectSoundEnumerateW
1149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#else
1159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPDSENUMCALLBACK        LPDSENUMCALLBACKA
1169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DirectSoundEnumerate    DirectSoundEnumerateA
1179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
1189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// IDirectSound
1219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#undef INTERFACE
1239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define INTERFACE IDirectSound
1249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifdef _WIN32
1259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDECLARE_INTERFACE_( IDirectSound, IUnknown )
1269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
1279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    /*** IUnknown methods ***/
1289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
1299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
1309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD_(ULONG,Release) (THIS) PURE;
1319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    /*** IDirectSound methods ***/
1329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD( CreateSoundBuffer)(THIS_ LPDSBUFFERDESC, LPLPDIRECTSOUNDBUFFER, IUnknown FAR *) PURE;
1349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD( GetCaps)(THIS_ LPDSCAPS ) PURE;
1359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD( DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER, LPLPDIRECTSOUNDBUFFER ) PURE;
1369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD( SetCooperativeLevel)(THIS_ HWND, DWORD ) PURE;
1379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD( Compact)(THIS ) PURE;
1389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD( GetSpeakerConfig)(THIS_ LPDWORD ) PURE;
1399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD( SetSpeakerConfig)(THIS_ DWORD ) PURE;
1409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD( Initialize)(THIS_ GUID FAR * ) PURE;
1419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream};
1429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#if !defined(__cplusplus) || defined(CINTERFACE)
1449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSound_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
1459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSound_AddRef(p)                   (p)->lpVtbl->AddRef(p)
1469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSound_Release(p)                  (p)->lpVtbl->Release(p)
1479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSound_CreateSoundBuffer(p,a,b,c)  (p)->lpVtbl->CreateSoundBuffer(p,a,b,c)
1489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSound_GetCaps(p,a)                (p)->lpVtbl->GetCaps(p,a)
1499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)
1509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSound_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)
1519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSound_Compact(p)                  (p)->lpVtbl->Compact(p)
1529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSound_GetSpeakerConfig(p,a)       (p)->lpVtbl->GetSpeakerConfig(p,a)
1539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSound_SetSpeakerConfig(p,b)       (p)->lpVtbl->SetSpeakerConfig(p,b)
1549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSound_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)
1559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
1569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
1589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// IDirectSoundBuffer
1619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#undef INTERFACE
1639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define INTERFACE IDirectSoundBuffer
1649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifdef _WIN32
1659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDECLARE_INTERFACE_( IDirectSoundBuffer, IUnknown )
1669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
1679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    /*** IUnknown methods ***/
1689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
1699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
1709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD_(ULONG,Release) (THIS) PURE;
1719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    /*** IDirectSoundBuffer methods ***/
1729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(           GetCaps)(THIS_ LPDSBCAPS ) PURE;
1749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD,LPDWORD ) PURE;
1759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(         GetFormat)(THIS_ LPWAVEFORMATEX, DWORD, LPDWORD ) PURE;
1769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(         GetVolume)(THIS_ LPLONG ) PURE;
1779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(            GetPan)(THIS_ LPLONG ) PURE;
1789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(      GetFrequency)(THIS_ LPDWORD ) PURE;
1799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(         GetStatus)(THIS_ LPDWORD ) PURE;
1809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(        Initialize)(THIS_ LPDIRECTSOUND, LPDSBUFFERDESC ) PURE;
1819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(              Lock)(THIS_ DWORD,DWORD,LPVOID,LPDWORD,LPVOID,LPDWORD,DWORD ) PURE;
1829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(              Play)(THIS_ DWORD,DWORD,DWORD ) PURE;
1839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(SetCurrentPosition)(THIS_ DWORD ) PURE;
1849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(         SetFormat)(THIS_ LPWAVEFORMATEX ) PURE;
1859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(         SetVolume)(THIS_ LONG ) PURE;
1869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(            SetPan)(THIS_ LONG ) PURE;
1879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(      SetFrequency)(THIS_ DWORD ) PURE;
1889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(              Stop)(THIS  ) PURE;
1899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(            Unlock)(THIS_ LPVOID,DWORD,LPVOID,DWORD ) PURE;
1909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    STDMETHOD(           Restore)(THIS  ) PURE;
1919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream};
1929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#if !defined(__cplusplus) || defined(CINTERFACE)
1949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
1959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_AddRef(p)                    (p)->lpVtbl->AddRef(p)
1969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_Release(p)                   (p)->lpVtbl->Release(p)
1979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)
1989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_GetCurrentPosition(p,a,b)    (p)->lpVtbl->GetCurrentPosition(p,a,b)
1999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_GetFormat(p,a,b,c)           (p)->lpVtbl->GetFormat(p,a,b,c)
2009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_GetVolume(p,a)               (p)->lpVtbl->GetVolume(p,a)
2019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_GetPan(p,a)                  (p)->lpVtbl->GetPan(p,a)
2029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_GetFrequency(p,a)            (p)->lpVtbl->GetFrequency(p,a)
2039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_GetStatus(p,a)               (p)->lpVtbl->GetStatus(p,a)
2049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
2059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g)        (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
2069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_Play(p,a,b,c)                (p)->lpVtbl->Play(p,a,b,c)
2079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_SetCurrentPosition(p,a)      (p)->lpVtbl->SetCurrentPosition(p,a)
2089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_SetFormat(p,a)               (p)->lpVtbl->SetFormat(p,a)
2099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_SetVolume(p,a)               (p)->lpVtbl->SetVolume(p,a)
2109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_SetPan(p,a)                  (p)->lpVtbl->SetPan(p,a)
2119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_SetFrequency(p,a)            (p)->lpVtbl->SetFrequency(p,a)
2129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_Stop(p)                      (p)->lpVtbl->Stop(p)
2139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_Unlock(p,a,b,c,d)            (p)->lpVtbl->Unlock(p,a,b,c,d)
2149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDirectSoundBuffer_Restore(p)                   (p)->lpVtbl->Restore(p)
2159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
2169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
2189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Return Codes
2239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DS_OK                           0
2269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * The call failed because resources (such as a priority level)
2299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *  were already being used by another caller.
2309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_ALLOCATED                 MAKE_DSHRESULT( 10 )
2329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * The control (vol,pan,etc.) requested by the caller is not available.
2349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_CONTROLUNAVAIL            MAKE_DSHRESULT( 30 )
2369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * An invalid parameter was passed to the returning function
2389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_INVALIDPARAM              E_INVALIDARG
2409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * This call is not valid for the current state of this object
2429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_INVALIDCALL               MAKE_DSHRESULT( 50 )
2449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * An undetermined error occured inside the DSound subsystem
2469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_GENERIC                   E_FAIL
2489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * The caller does not have the priority level required for the function to
2509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * succeed.
2519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_PRIOLEVELNEEDED           MAKE_DSHRESULT( 70 )
2539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * The DSound subsystem couldn't allocate sufficient memory to complete the
2559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * caller's request.
2569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_OUTOFMEMORY               E_OUTOFMEMORY
2589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * The specified WAVE format is not supported
2609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_BADFORMAT                 MAKE_DSHRESULT( 100 )
2629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * The function called is not supported at this time
2649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_UNSUPPORTED               E_NOTIMPL
2669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * No sound driver is available for use
2689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_NODRIVER                  MAKE_DSHRESULT( 120 )
2709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * This object is already initialized
2729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_ALREADYINITIALIZED        MAKE_DSHRESULT( 130 )
2749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * This object does not support aggregation
2769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_NOAGGREGATION             CLASS_E_NOAGGREGATION
2789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * The buffer memory has been lost, and must be Restored.
2809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_BUFFERLOST                MAKE_DSHRESULT( 150 )
2829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Another app has a higher priority level, preventing this call from
2849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * succeeding.
2859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_OTHERAPPHASPRIO           MAKE_DSHRESULT( 160 )
2879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * The Initialize() member on the Direct Sound Object has not been
2899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * called or called successfully before calls to other members.
2909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSERR_UNINITIALIZED             MAKE_DSHRESULT( 170 )
2929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//==========================================================================;
2979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
2989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//                               Flags...
2999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//==========================================================================;
3019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSCAPS_PRIMARYMONO          0x00000001
3039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSCAPS_PRIMARYSTEREO        0x00000002
3049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSCAPS_PRIMARY8BIT          0x00000004
3059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSCAPS_PRIMARY16BIT         0x00000008
3069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSCAPS_CONTINUOUSRATE       0x00000010
3079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSCAPS_EMULDRIVER           0x00000020
3089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSCAPS_CERTIFIED            0x00000040
3099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSCAPS_SECONDARYMONO        0x00000100
3109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSCAPS_SECONDARYSTEREO      0x00000200
3119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSCAPS_SECONDARY8BIT        0x00000400
3129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSCAPS_SECONDARY16BIT       0x00000800
3139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBPLAY_LOOPING         0x00000001
3179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBSTATUS_PLAYING           0x00000001
3219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBSTATUS_BUFFERLOST        0x00000002
3229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBSTATUS_LOOPING           0x00000004
3239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBLOCK_FROMWRITECURSOR         0x00000001
3269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSSCL_NORMAL                1
3309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSSCL_PRIORITY              2
3319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSSCL_EXCLUSIVE             3
3329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSSCL_WRITEPRIMARY          4
3339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBCAPS_PRIMARYBUFFER       0x00000001
3379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBCAPS_STATIC              0x00000002
3389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBCAPS_LOCHARDWARE         0x00000004
3399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBCAPS_LOCSOFTWARE         0x00000008
3409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBCAPS_CTRLFREQUENCY       0x00000020
3419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBCAPS_CTRLPAN             0x00000040
3429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBCAPS_CTRLVOLUME          0x00000080
3439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBCAPS_CTRLDEFAULT         0x000000E0  // Pan + volume + frequency.
3449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBCAPS_CTRLALL             0x000000E0  // All control capabilities
3459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBCAPS_STICKYFOCUS         0x00004000
3469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSBCAPS_GETCURRENTPOSITION2 0x00010000  // More accurate play cursor under emulation
3479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSSPEAKER_HEADPHONE     1
3529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSSPEAKER_MONO          2
3539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSSPEAKER_QUAD          3
3549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSSPEAKER_STEREO        4
3559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define DSSPEAKER_SURROUND      5
3569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifdef __cplusplus
3639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream};
3649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
3659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif  /* __DSOUND_INCLUDED__ */
367