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

#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)