diff lib/legacy_dx/dmusics.h @ 0:9c0607679772

init
author Ritor1
date Sat, 12 Jan 2013 09:45:18 +0600
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/legacy_dx/dmusics.h	Sat Jan 12 09:45:18 2013 +0600
@@ -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