summaryrefslogtreecommitdiffstats
path: root/sdk/dx8sdk/Include/dmusics.h
diff options
context:
space:
mode:
Diffstat (limited to 'sdk/dx8sdk/Include/dmusics.h')
-rw-r--r--sdk/dx8sdk/Include/dmusics.h193
1 files changed, 193 insertions, 0 deletions
diff --git a/sdk/dx8sdk/Include/dmusics.h b/sdk/dx8sdk/Include/dmusics.h
new file mode 100644
index 00000000..8f1e45d8
--- /dev/null
+++ b/sdk/dx8sdk/Include/dmusics.h
@@ -0,0 +1,193 @@
+/************************************************************************
+* *
+* 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