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

init
author Ritor1
date Sat, 12 Jan 2013 09:45:18 +0600
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:9c0607679772
1 /************************************************************************
2 * *
3 * dmusics.h -- Definitions for created a DirectMusic software synth *
4 * *
5 * Copyright (c) Microsoft Corporation. All rights reserved. *
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