Home | History | Annotate | Download | only in INC
      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