1 |
/************************************************************************
|
2 |
* *
|
3 |
* dmusics.h -- Definitions for created a DirectMusic software synth *
|
4 |
* *
|
5 |
* Copyright (c) 1998-1999 Microsoft Corporation
|
6 |
* *
|
7 |
************************************************************************/
|
8 |
|
9 |
#ifndef _DMUSICS_
|
10 |
#define _DMUSICS_
|
11 |
|
12 |
#include "dmusicc.h"
|
13 |
|
14 |
/* Software synths are enumerated from under this registry key.
|
15 |
*/
|
16 |
#define REGSTR_PATH_SOFTWARESYNTHS "Software\\Microsoft\\DirectMusic\\SoftwareSynths"
|
17 |
|
18 |
interface IDirectMusicSynth;
|
19 |
interface IDirectMusicSynthSink;
|
20 |
|
21 |
#ifndef __cplusplus
|
22 |
typedef interface IDirectMusicSynth IDirectMusicSynth;
|
23 |
typedef interface IDirectMusicSynthSink IDirectMusicSynthSink;
|
24 |
#endif
|
25 |
|
26 |
#ifndef _DMUS_VOICE_STATE_DEFINED
|
27 |
#define _DMUS_VOICE_STATE_DEFINED
|
28 |
|
29 |
typedef struct _DMUS_VOICE_STATE
|
30 |
{
|
31 |
BOOL bExists;
|
32 |
SAMPLE_POSITION spPosition;
|
33 |
} DMUS_VOICE_STATE;
|
34 |
|
35 |
#endif /* _DMUS_VOICE_STATE_DEFINED */
|
36 |
|
37 |
/* IDirectMusicSynth::Refresh
|
38 |
*
|
39 |
* This is the last buffer of the stream. It may be a partial block.
|
40 |
*/
|
41 |
#define REFRESH_F_LASTBUFFER 0x00000001
|
42 |
|
43 |
#undef INTERFACE
|
44 |
#define INTERFACE IDirectMusicSynth
|
45 |
DECLARE_INTERFACE_(IDirectMusicSynth, IUnknown)
|
46 |
{
|
47 |
/* IUnknown */
|
48 |
STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
|
49 |
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
50 |
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
51 |
|
52 |
/* IDirectMusicSynth */
|
53 |
STDMETHOD(Open) (THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
|
54 |
STDMETHOD(Close) (THIS) PURE;
|
55 |
STDMETHOD(SetNumChannelGroups) (THIS_ DWORD dwGroups) PURE;
|
56 |
STDMETHOD(Download) (THIS_ LPHANDLE phDownload,
|
57 |
LPVOID pvData,
|
58 |
LPBOOL pbFree ) PURE;
|
59 |
STDMETHOD(Unload) (THIS_ HANDLE hDownload,
|
60 |
HRESULT ( CALLBACK *lpFreeHandle)(HANDLE,HANDLE),
|
61 |
HANDLE hUserData ) PURE;
|
62 |
STDMETHOD(PlayBuffer) (THIS_ REFERENCE_TIME rt,
|
63 |
LPBYTE pbBuffer,
|
64 |
DWORD cbBuffer) PURE;
|
65 |
STDMETHOD(GetRunningStats) (THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
|
66 |
STDMETHOD(GetPortCaps) (THIS_ LPDMUS_PORTCAPS pCaps) PURE;
|
67 |
STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
|
68 |
STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
|
69 |
STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
|
70 |
STDMETHOD(SetSynthSink) (THIS_ IDirectMusicSynthSink *pSynthSink) PURE;
|
71 |
STDMETHOD(Render) (THIS_ short *pBuffer,
|
72 |
DWORD dwLength,
|
73 |
LONGLONG llPosition) PURE;
|
74 |
STDMETHOD(SetChannelPriority) (THIS_ DWORD dwChannelGroup,
|
75 |
DWORD dwChannel,
|
76 |
DWORD dwPriority) PURE;
|
77 |
STDMETHOD(GetChannelPriority) (THIS_ DWORD dwChannelGroup,
|
78 |
DWORD dwChannel,
|
79 |
LPDWORD pdwPriority) PURE;
|
80 |
STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pWaveFormatEx,
|
81 |
LPDWORD pdwWaveFormatExSize) PURE;
|
82 |
STDMETHOD(GetAppend) (THIS_ DWORD* pdwAppend) PURE;
|
83 |
};
|
84 |
|
85 |
#undef INTERFACE
|
86 |
|
87 |
#define INTERFACE IDirectMusicSynth8
|
88 |
DECLARE_INTERFACE_(IDirectMusicSynth8, IDirectMusicSynth)
|
89 |
{
|
90 |
/* IUnknown */
|
91 |
STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
|
92 |
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
93 |
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
94 |
|
95 |
/* IDirectMusicSynth */
|
96 |
STDMETHOD(Open) (THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
|
97 |
STDMETHOD(Close) (THIS) PURE;
|
98 |
STDMETHOD(SetNumChannelGroups) (THIS_ DWORD dwGroups) PURE;
|
99 |
STDMETHOD(Download) (THIS_ LPHANDLE phDownload,
|
100 |
LPVOID pvData,
|
101 |
LPBOOL pbFree ) PURE;
|
102 |
STDMETHOD(Unload) (THIS_ HANDLE hDownload,
|
103 |
HRESULT ( CALLBACK *lpFreeHandle)(HANDLE,HANDLE),
|
104 |
HANDLE hUserData ) PURE;
|
105 |
STDMETHOD(PlayBuffer) (THIS_ REFERENCE_TIME rt,
|
106 |
LPBYTE pbBuffer,
|
107 |
DWORD cbBuffer) PURE;
|
108 |
STDMETHOD(GetRunningStats) (THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
|
109 |
STDMETHOD(GetPortCaps) (THIS_ LPDMUS_PORTCAPS pCaps) PURE;
|
110 |
STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
|
111 |
STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
|
112 |
STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
|
113 |
STDMETHOD(SetSynthSink) (THIS_ IDirectMusicSynthSink *pSynthSink) PURE;
|
114 |
STDMETHOD(Render) (THIS_ short *pBuffer,
|
115 |
DWORD dwLength,
|
116 |
LONGLONG llPosition) PURE;
|
117 |
STDMETHOD(SetChannelPriority) (THIS_ DWORD dwChannelGroup,
|
118 |
DWORD dwChannel,
|
119 |
DWORD dwPriority) PURE;
|
120 |
STDMETHOD(GetChannelPriority) (THIS_ DWORD dwChannelGroup,
|
121 |
DWORD dwChannel,
|
122 |
LPDWORD pdwPriority) PURE;
|
123 |
STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pWaveFormatEx,
|
124 |
LPDWORD pdwWaveFormatExSize) PURE;
|
125 |
STDMETHOD(GetAppend) (THIS_ DWORD* pdwAppend) PURE;
|
126 |
|
127 |
/* IDirectMusicSynth8 */
|
128 |
STDMETHOD(PlayVoice) (THIS_ REFERENCE_TIME rt,
|
129 |
DWORD dwVoiceId,
|
130 |
DWORD dwChannelGroup,
|
131 |
DWORD dwChannel,
|
132 |
DWORD dwDLId,
|
133 |
long prPitch, /* PREL not defined here */
|
134 |
long vrVolume, /* VREL not defined here */
|
135 |
SAMPLE_TIME stVoiceStart,
|
136 |
SAMPLE_TIME stLoopStart,
|
137 |
SAMPLE_TIME stLoopEnd) PURE;
|
138 |
|
139 |
STDMETHOD(StopVoice) (THIS_ REFERENCE_TIME rt,
|
140 |
DWORD dwVoiceId ) PURE;
|
141 |
|
142 |
STDMETHOD(GetVoiceState) (THIS_ DWORD dwVoice[],
|
143 |
DWORD cbVoice,
|
144 |
DMUS_VOICE_STATE dwVoiceState[] ) PURE;
|
145 |
STDMETHOD(Refresh) (THIS_ DWORD dwDownloadID,
|
146 |
DWORD dwFlags) PURE;
|
147 |
STDMETHOD(AssignChannelToBuses) (THIS_ DWORD dwChannelGroup,
|
148 |
DWORD dwChannel,
|
149 |
LPDWORD pdwBuses,
|
150 |
DWORD cBuses) PURE;
|
151 |
};
|
152 |
|
153 |
#undef INTERFACE
|
154 |
#define INTERFACE IDirectMusicSynthSink
|
155 |
DECLARE_INTERFACE_(IDirectMusicSynthSink, IUnknown)
|
156 |
{
|
157 |
/* IUnknown */
|
158 |
STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
|
159 |
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
160 |
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
161 |
|
162 |
/* IDirectMusicSynthSink */
|
163 |
STDMETHOD(Init) (THIS_ IDirectMusicSynth *pSynth) PURE;
|
164 |
STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
|
165 |
STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
|
166 |
STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
|
167 |
STDMETHOD(SampleToRefTime) (THIS_ LONGLONG llSampleTime,
|
168 |
REFERENCE_TIME *prfTime) PURE;
|
169 |
STDMETHOD(RefTimeToSample) (THIS_ REFERENCE_TIME rfTime,
|
170 |
LONGLONG *pllSampleTime) PURE;
|
171 |
STDMETHOD(SetDirectSound) (THIS_ LPDIRECTSOUND pDirectSound,
|
172 |
LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;
|
173 |
STDMETHOD(GetDesiredBufferSize) (THIS_ LPDWORD pdwBufferSizeInSamples) PURE;
|
174 |
};
|
175 |
|
176 |
DEFINE_GUID(IID_IDirectMusicSynth, 0x9823661, 0x5c85, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
|
177 |
DEFINE_GUID(IID_IDirectMusicSynth8,0x53cab625, 0x2711, 0x4c9f, 0x9d, 0xe7, 0x1b, 0x7f, 0x92, 0x5f, 0x6f, 0xc8);
|
178 |
DEFINE_GUID(IID_IDirectMusicSynthSink,0x9823663, 0x5c85, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
|
179 |
|
180 |
/* Property Set GUID_DMUS_PROP_SetSynthSink
|
181 |
*
|
182 |
* Item 0: An IUnknown on which the port can QueryInterface for a user-mode synth sink.
|
183 |
*/
|
184 |
DEFINE_GUID(GUID_DMUS_PROP_SetSynthSink,0x0a3a5ba5, 0x37b6, 0x11d2, 0xb9, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
|
185 |
|
186 |
/* Property Set GUID_DMUS_PROP_SinkUsesDSound
|
187 |
*
|
188 |
* Item 0: A DWORD boolean indicating whether or not the sink requires an IDirectSound interface. The
|
189 |
* default is FALSE if this property item is not implemented by the sink.
|
190 |
*/
|
191 |
DEFINE_GUID(GUID_DMUS_PROP_SinkUsesDSound, 0xbe208857, 0x8952, 0x11d2, 0xba, 0x1c, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
|
192 |
|
193 |
#endif
|