You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.7 KiB
65 lines
2.7 KiB
#pragma once |
|
|
|
typedef void *LPDSBCAPS, *LPCDSBUFFERDESC; |
|
|
|
struct IDirectSound; |
|
typedef IDirectSound *LPDIRECTSOUND; |
|
|
|
DECLARE_INTERFACE_(IDirectSoundBuffer, IUnknown) |
|
{ |
|
// clang-format off |
|
STDMETHOD(GetCaps)(THIS_ LPDSBCAPS pDSBufferCaps); |
|
STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor); |
|
STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten); |
|
STDMETHOD(GetVolume)(THIS_ LPLONG plVolume); |
|
STDMETHOD(GetPan)(THIS_ LPLONG plPan); |
|
STDMETHOD(GetFrequency)(THIS_ LPDWORD pdwFrequency); |
|
STDMETHOD(GetStatus)(THIS_ LPDWORD pdwStatus); |
|
STDMETHOD(Initialize)(THIS_ LPDIRECTSOUND pDirectSound, LPCDSBUFFERDESC pcDSBufferDesc); |
|
STDMETHOD(Lock)(THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, |
|
LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags); |
|
STDMETHOD(Play)(THIS_ DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags); |
|
STDMETHOD(SetCurrentPosition)(THIS_ DWORD dwNewPosition); |
|
STDMETHOD(SetFormat)(THIS_ LPCWAVEFORMATEX pcfxFormat); |
|
STDMETHOD(SetVolume)(THIS_ LONG lVolume); |
|
STDMETHOD(SetPan)(THIS_ LONG lPan); |
|
STDMETHOD(SetFrequency)(THIS_ DWORD dwFrequency); |
|
STDMETHOD(Stop)(THIS); |
|
STDMETHOD(Unlock)(THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2); |
|
STDMETHOD(Restore)(THIS); |
|
// clang-format on |
|
}; |
|
|
|
typedef IDirectSoundBuffer *LPDIRECTSOUNDBUFFER; |
|
typedef void *LPDSCAPS, *LPUNKNOWN, *LPCGUID; |
|
|
|
DECLARE_INTERFACE_(IDirectSound, IUnknown) |
|
{ |
|
// clang-format off |
|
STDMETHOD(CreateSoundBuffer)(THIS_ LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter); |
|
STDMETHOD(GetCaps)(THIS_ LPDSCAPS pDSCaps); |
|
STDMETHOD(DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate); |
|
STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwLevel); |
|
STDMETHOD(Compact)(THIS); |
|
STDMETHOD(GetSpeakerConfig)(THIS_ LPDWORD pdwSpeakerConfig); |
|
STDMETHOD(SetSpeakerConfig)(THIS_ DWORD dwSpeakerConfig); |
|
STDMETHOD(Initialize)(THIS_ LPCGUID pcGuidDevice); |
|
// clang-format on |
|
}; |
|
|
|
#define _FACDS 0x878 |
|
#define MAKE_DSHRESULT(code) MAKE_HRESULT(1, _FACDS, code) |
|
|
|
#define E_NOINTERFACE 0x80004002 |
|
#define DSERR_PRIOLEVELNEEDED MAKE_DSHRESULT(70) |
|
#define DSERR_BADFORMAT MAKE_DSHRESULT(100) |
|
#define DSERR_NODRIVER MAKE_DSHRESULT(120) |
|
#define DSERR_ALREADYINITIALIZED MAKE_DSHRESULT(130) |
|
#define DSERR_BUFFERLOST MAKE_DSHRESULT(150) |
|
#define DS_OK 0 |
|
#define DSERR_INVALIDCALL MAKE_DSHRESULT(50) |
|
#define DSERR_NOAGGREGATION 0x80040110 |
|
#define DSERR_OUTOFMEMORY 0x8007000E |
|
#define DSERR_INVALIDPARAM 0x80070057 |
|
#define DSERR_ALLOCATED MAKE_DSHRESULT(10) |
|
#define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT(30)
|
|
|