|
|
/************************************************************************
* * * dmusics.h -- Definitions for created a DirectMusic software synth * * * * Copyright (c) Microsoft Corporation. All rights reserved. * * * ************************************************************************/
#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
|