mirror of https://github.com/tongzx/nt5src
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.
193 lines
9.2 KiB
193 lines
9.2 KiB
/************************************************************************
|
|
* *
|
|
* dmusics.h -- Definitions for created a DirectMusic software synth *
|
|
* *
|
|
* Copyright (c) 1998-1999 Microsoft Corporation
|
|
* *
|
|
************************************************************************/
|
|
|
|
#ifndef _DMUSICS_
|
|
#define _DMUSICS_
|
|
|
|
#include "dmusicc.h"
|
|
|
|
/* Software synths are enumerated from under this registry key.
|
|
*/
|
|
#define REGSTR_PATH_SOFTWARESYNTHS "Software\\Microsoft\\DirectMusic\\SoftwareSynths"
|
|
|
|
interface IDirectMusicSynth;
|
|
interface IDirectMusicSynthSink;
|
|
|
|
#ifndef __cplusplus
|
|
typedef interface IDirectMusicSynth IDirectMusicSynth;
|
|
typedef interface IDirectMusicSynthSink IDirectMusicSynthSink;
|
|
#endif
|
|
|
|
#ifndef _DMUS_VOICE_STATE_DEFINED
|
|
#define _DMUS_VOICE_STATE_DEFINED
|
|
|
|
typedef struct _DMUS_VOICE_STATE
|
|
{
|
|
BOOL bExists;
|
|
SAMPLE_POSITION spPosition;
|
|
} DMUS_VOICE_STATE;
|
|
|
|
#endif /* _DMUS_VOICE_STATE_DEFINED */
|
|
|
|
/* IDirectMusicSynth::Refresh
|
|
*
|
|
* This is the last buffer of the stream. It may be a partial block.
|
|
*/
|
|
#define REFRESH_F_LASTBUFFER 0x00000001
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IDirectMusicSynth
|
|
DECLARE_INTERFACE_(IDirectMusicSynth, IUnknown)
|
|
{
|
|
/* IUnknown */
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
|
|
/* IDirectMusicSynth */
|
|
STDMETHOD(Open) (THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
|
|
STDMETHOD(Close) (THIS) PURE;
|
|
STDMETHOD(SetNumChannelGroups) (THIS_ DWORD dwGroups) PURE;
|
|
STDMETHOD(Download) (THIS_ LPHANDLE phDownload,
|
|
LPVOID pvData,
|
|
LPBOOL pbFree ) PURE;
|
|
STDMETHOD(Unload) (THIS_ HANDLE hDownload,
|
|
HRESULT ( CALLBACK *lpFreeHandle)(HANDLE,HANDLE),
|
|
HANDLE hUserData ) PURE;
|
|
STDMETHOD(PlayBuffer) (THIS_ REFERENCE_TIME rt,
|
|
LPBYTE pbBuffer,
|
|
DWORD cbBuffer) PURE;
|
|
STDMETHOD(GetRunningStats) (THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
|
|
STDMETHOD(GetPortCaps) (THIS_ LPDMUS_PORTCAPS pCaps) PURE;
|
|
STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
|
|
STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
|
|
STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
|
|
STDMETHOD(SetSynthSink) (THIS_ IDirectMusicSynthSink *pSynthSink) PURE;
|
|
STDMETHOD(Render) (THIS_ short *pBuffer,
|
|
DWORD dwLength,
|
|
LONGLONG llPosition) PURE;
|
|
STDMETHOD(SetChannelPriority) (THIS_ DWORD dwChannelGroup,
|
|
DWORD dwChannel,
|
|
DWORD dwPriority) PURE;
|
|
STDMETHOD(GetChannelPriority) (THIS_ DWORD dwChannelGroup,
|
|
DWORD dwChannel,
|
|
LPDWORD pdwPriority) PURE;
|
|
STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pWaveFormatEx,
|
|
LPDWORD pdwWaveFormatExSize) PURE;
|
|
STDMETHOD(GetAppend) (THIS_ DWORD* pdwAppend) PURE;
|
|
};
|
|
|
|
#undef INTERFACE
|
|
|
|
#define INTERFACE IDirectMusicSynth8
|
|
DECLARE_INTERFACE_(IDirectMusicSynth8, IDirectMusicSynth)
|
|
{
|
|
/* IUnknown */
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
|
|
/* IDirectMusicSynth */
|
|
STDMETHOD(Open) (THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
|
|
STDMETHOD(Close) (THIS) PURE;
|
|
STDMETHOD(SetNumChannelGroups) (THIS_ DWORD dwGroups) PURE;
|
|
STDMETHOD(Download) (THIS_ LPHANDLE phDownload,
|
|
LPVOID pvData,
|
|
LPBOOL pbFree ) PURE;
|
|
STDMETHOD(Unload) (THIS_ HANDLE hDownload,
|
|
HRESULT ( CALLBACK *lpFreeHandle)(HANDLE,HANDLE),
|
|
HANDLE hUserData ) PURE;
|
|
STDMETHOD(PlayBuffer) (THIS_ REFERENCE_TIME rt,
|
|
LPBYTE pbBuffer,
|
|
DWORD cbBuffer) PURE;
|
|
STDMETHOD(GetRunningStats) (THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
|
|
STDMETHOD(GetPortCaps) (THIS_ LPDMUS_PORTCAPS pCaps) PURE;
|
|
STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
|
|
STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
|
|
STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
|
|
STDMETHOD(SetSynthSink) (THIS_ IDirectMusicSynthSink *pSynthSink) PURE;
|
|
STDMETHOD(Render) (THIS_ short *pBuffer,
|
|
DWORD dwLength,
|
|
LONGLONG llPosition) PURE;
|
|
STDMETHOD(SetChannelPriority) (THIS_ DWORD dwChannelGroup,
|
|
DWORD dwChannel,
|
|
DWORD dwPriority) PURE;
|
|
STDMETHOD(GetChannelPriority) (THIS_ DWORD dwChannelGroup,
|
|
DWORD dwChannel,
|
|
LPDWORD pdwPriority) PURE;
|
|
STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pWaveFormatEx,
|
|
LPDWORD pdwWaveFormatExSize) PURE;
|
|
STDMETHOD(GetAppend) (THIS_ DWORD* pdwAppend) PURE;
|
|
|
|
/* IDirectMusicSynth8 */
|
|
STDMETHOD(PlayVoice) (THIS_ REFERENCE_TIME rt,
|
|
DWORD dwVoiceId,
|
|
DWORD dwChannelGroup,
|
|
DWORD dwChannel,
|
|
DWORD dwDLId,
|
|
long prPitch, /* PREL not defined here */
|
|
long vrVolume, /* VREL not defined here */
|
|
SAMPLE_TIME stVoiceStart,
|
|
SAMPLE_TIME stLoopStart,
|
|
SAMPLE_TIME stLoopEnd) PURE;
|
|
|
|
STDMETHOD(StopVoice) (THIS_ REFERENCE_TIME rt,
|
|
DWORD dwVoiceId ) PURE;
|
|
|
|
STDMETHOD(GetVoiceState) (THIS_ DWORD dwVoice[],
|
|
DWORD cbVoice,
|
|
DMUS_VOICE_STATE dwVoiceState[] ) PURE;
|
|
STDMETHOD(Refresh) (THIS_ DWORD dwDownloadID,
|
|
DWORD dwFlags) PURE;
|
|
STDMETHOD(AssignChannelToBuses) (THIS_ DWORD dwChannelGroup,
|
|
DWORD dwChannel,
|
|
LPDWORD pdwBuses,
|
|
DWORD cBuses) PURE;
|
|
};
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IDirectMusicSynthSink
|
|
DECLARE_INTERFACE_(IDirectMusicSynthSink, IUnknown)
|
|
{
|
|
/* IUnknown */
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
|
|
/* IDirectMusicSynthSink */
|
|
STDMETHOD(Init) (THIS_ IDirectMusicSynth *pSynth) PURE;
|
|
STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
|
|
STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
|
|
STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
|
|
STDMETHOD(SampleToRefTime) (THIS_ LONGLONG llSampleTime,
|
|
REFERENCE_TIME *prfTime) PURE;
|
|
STDMETHOD(RefTimeToSample) (THIS_ REFERENCE_TIME rfTime,
|
|
LONGLONG *pllSampleTime) PURE;
|
|
STDMETHOD(SetDirectSound) (THIS_ LPDIRECTSOUND pDirectSound,
|
|
LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;
|
|
STDMETHOD(GetDesiredBufferSize) (THIS_ LPDWORD pdwBufferSizeInSamples) PURE;
|
|
};
|
|
|
|
DEFINE_GUID(IID_IDirectMusicSynth, 0x9823661, 0x5c85, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
|
|
DEFINE_GUID(IID_IDirectMusicSynth8,0x53cab625, 0x2711, 0x4c9f, 0x9d, 0xe7, 0x1b, 0x7f, 0x92, 0x5f, 0x6f, 0xc8);
|
|
DEFINE_GUID(IID_IDirectMusicSynthSink,0x9823663, 0x5c85, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
|
|
|
|
/* Property Set GUID_DMUS_PROP_SetSynthSink
|
|
*
|
|
* Item 0: An IUnknown on which the port can QueryInterface for a user-mode synth sink.
|
|
*/
|
|
DEFINE_GUID(GUID_DMUS_PROP_SetSynthSink,0x0a3a5ba5, 0x37b6, 0x11d2, 0xb9, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
|
|
|
|
/* Property Set GUID_DMUS_PROP_SinkUsesDSound
|
|
*
|
|
* Item 0: A DWORD boolean indicating whether or not the sink requires an IDirectSound interface. The
|
|
* default is FALSE if this property item is not implemented by the sink.
|
|
*/
|
|
DEFINE_GUID(GUID_DMUS_PROP_SinkUsesDSound, 0xbe208857, 0x8952, 0x11d2, 0xba, 0x1c, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
|
|
|
|
#endif
|