[PSDK]
[reactos.git] / include / dxsdk / dmusics.h
1
2 #ifndef _DMUSICS_
3 #define _DMUSICS_
4
5 #include "dmusicc.h"
6
7 #define REGSTR_PATH_SOFTWARESYNTHS "Software\\Microsoft\\DirectMusic\\SoftwareSynths"
8
9 interface IDirectMusicSynth;
10 interface IDirectMusicSynthSink;
11
12 #ifndef _DMUS_VOICE_STATE_DEFINED
13 #define _DMUS_VOICE_STATE_DEFINED
14
15
16 DEFINE_GUID(IID_IDirectMusicSynth, 0x9823661, 0x5C85, 0x11D2, 0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6);
17 DEFINE_GUID(IID_IDirectMusicSynth8, 0x53CAB625, 0x2711, 0x4C9F, 0x9D, 0xE7, 0x1B, 0x7F, 0x92, 0x5F, 0x6F, 0xC8);
18 DEFINE_GUID(IID_IDirectMusicSynthSink, 0x09823663, 0x5C85, 0x11D2, 0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6);
19 DEFINE_GUID(GUID_DMUS_PROP_SetSynthSink, 0x0A3A5BA5, 0x37B6, 0x11D2, 0xB9, 0xF9, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12);
20 DEFINE_GUID(GUID_DMUS_PROP_SinkUsesDSound, 0xBE208857, 0x8952, 0x11D2, 0xBA, 0x1C, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12);
21
22 #define REFRESH_F_LASTBUFFER 0x00000001
23
24 typedef struct _DMUS_VOICE_STATE
25 {
26 BOOL bExists;
27 SAMPLE_POSITION spPosition;
28 } DMUS_VOICE_STATE;
29
30 #endif
31
32 #undef INTERFACE
33 #define INTERFACE IDirectMusicSynth
34 DECLARE_INTERFACE_(IDirectMusicSynth, IUnknown)
35 {
36 STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
37 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
38 STDMETHOD_(ULONG,Release) (THIS) PURE;
39 STDMETHOD(Open) (THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
40 STDMETHOD(Close) (THIS) PURE;
41 STDMETHOD(SetNumChannelGroups) (THIS_ DWORD dwGroups) PURE;
42 STDMETHOD(Download) (THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree ) PURE;
43 STDMETHOD(Unload) (THIS_ HANDLE hDownload, HRESULT ( CALLBACK *lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData ) PURE;
44 STDMETHOD(PlayBuffer) (THIS_ REFERENCE_TIME rt,LPBYTE pbBuffer, DWORD cbBuffer) PURE;
45 STDMETHOD(GetRunningStats) (THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
46 STDMETHOD(GetPortCaps) (THIS_ LPDMUS_PORTCAPS pCaps) PURE;
47 STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
48 STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
49 STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
50 STDMETHOD(SetSynthSink) (THIS_ struct IDirectMusicSynthSink *pSynthSink) PURE;
51 STDMETHOD(Render) (THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE;
52 STDMETHOD(SetChannelPriority) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
53 STDMETHOD(GetChannelPriority) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
54 STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize) PURE;
55 STDMETHOD(GetAppend) (THIS_ DWORD* pdwAppend) PURE;
56 };
57 #undef INTERFACE
58
59 #if !defined(__cplusplus) || defined(CINTERFACE)
60 #define IDirectMusicSynth_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b)
61 #define IDirectMusicSynth_AddRef(p) (p)->lpVtbl->AddRef(p)
62 #define IDirectMusicSynth_Release(p) (p)->lpVtbl->Release(p)
63 #define IDirectMusicSynth_Open(p, a) (p)->lpVtbl->Open(p, a)
64 #define IDirectMusicSynth_Close(p) (p)->lpVtbl->Close(p)
65 #define IDirectMusicSynth_SetNumChannelGroups(p, a) (p)->lpVtbl->SetNumChannelGroups(p, a)
66 #define IDirectMusicSynth_Download(p, a, b, c) (p)->lpVtbl->Download(p, a, b, c)
67 #define IDirectMusicSynth_Unload(p, a, b, c) (p)->lpVtbl->Unload(p, a, b, c)
68 #define IDirectMusicSynth_PlayBuffer(p, a, b, c) (p)->lpVtbl->PlayBuffer(p, a, b, c)
69 #define IDirectMusicSynth_GetRunningStats(p, a) (p)->lpVtbl->GetRunningStats(p, a)
70 #define IDirectMusicSynth_GetPortCaps(p, a) (p)->lpVtbl->GetPortCaps(p, a)
71 #define IDirectMusicSynth_SetMasterClock(p, a) (p)->lpVtbl->SetMasterClock((p, a)
72 #define IDirectMusicSynth_GetLatencyClock(p, a) (p)->lpVtbl->GetLatencyClock(p, a)
73 #define IDirectMusicSynth_Activate(p, a) (p)->lpVtbl->Activate((p, a)
74 #define IDirectMusicSynth_SetSynthSink(p, a) (p)->lpVtbl->SetSynthSink(p, a)
75 #define IDirectMusicSynth_Render(p, a, b, c) (p)->lpVtbl->Render(p, a, b, c)
76 #define IDirectMusicSynth_SetChannelPriority(p, a, b, c) (p)->lpVtbl->SetChannelPriority(p, a, b, c)
77 #define IDirectMusicSynth_GetChannelPriority(p, a, b, c) (p)->lpVtbl->GetChannelPriority(p, a, b, c)
78 #define IDirectMusicSynth_GetFormat(p, a, b) (p)->lpVtbl->GetFormat(p, a, b)
79 #define IDirectMusicSynth_GetAppend(p, a) (p)->lpVtbl->GetAppend(p, a)
80 #endif
81
82 #define INTERFACE IDirectMusicSynth8
83 DECLARE_INTERFACE_(IDirectMusicSynth8, IDirectMusicSynth)
84 {
85 STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
86 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
87 STDMETHOD_(ULONG,Release) (THIS) PURE;
88 STDMETHOD(Open) (THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
89 STDMETHOD(Close) (THIS) PURE;
90 STDMETHOD(SetNumChannelGroups) (THIS_ DWORD dwGroups) PURE;
91 STDMETHOD(Download) (THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree ) PURE;
92 STDMETHOD(Unload) (THIS_ HANDLE hDownload, HRESULT ( CALLBACK *lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData ) PURE;
93 STDMETHOD(PlayBuffer) (THIS_ REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) PURE;
94 STDMETHOD(GetRunningStats) (THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
95 STDMETHOD(GetPortCaps) (THIS_ LPDMUS_PORTCAPS pCaps) PURE;
96 STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
97 STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
98 STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
99 STDMETHOD(SetSynthSink) (THIS_ struct IDirectMusicSynthSink *pSynthSink) PURE;
100 STDMETHOD(Render) (THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE;
101 STDMETHOD(SetChannelPriority) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
102 STDMETHOD(GetChannelPriority) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
103 STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize) PURE;
104 STDMETHOD(GetAppend) (THIS_ DWORD* pdwAppend) PURE;
105 STDMETHOD(PlayVoice) (THIS_ REFERENCE_TIME rt, DWORD dwVoiceId, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwDLId, long prPitch, long vrVolume, SAMPLE_TIME stVoiceStart, SAMPLE_TIME stLoopStart, SAMPLE_TIME stLoopEnd) PURE;
106 STDMETHOD(StopVoice) (THIS_ REFERENCE_TIME rt, DWORD dwVoiceId ) PURE;
107 STDMETHOD(GetVoiceState) (THIS_ DWORD dwVoice[], DWORD cbVoice, DMUS_VOICE_STATE dwVoiceState[] ) PURE;
108 STDMETHOD(Refresh) (THIS_ DWORD dwDownloadID, DWORD dwFlags) PURE;
109 STDMETHOD(AssignChannelToBuses) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwBuses, DWORD cBuses) PURE;
110 };
111 #undef INTERFACE
112
113 #if !defined(__cplusplus) || defined(CINTERFACE)
114 #define IDirectMusicSynth8_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b)
115 #define IDirectMusicSynth8_AddRef(p) (p)->lpVtbl->AddRef(p)
116 #define IDirectMusicSynth8_Release(p) (p)->lpVtbl->Release(p)
117 #define IDirectMusicSynth8_Open(p, a) (p)->lpVtbl->Open(p, a)
118 #define IDirectMusicSynth8_Close(p) (p)->lpVtbl->Close(p)
119 #define IDirectMusicSynth8_SetNumChannelGroups(p, a) (p)->lpVtbl->SetNumChannelGroups(p, a)
120 #define IDirectMusicSynth8_Download(p, a, b, c) (p)->lpVtbl->Download(p, a, b, c)
121 #define IDirectMusicSynth8_Unload(p, a, b, c) (p)->lpVtbl->Unload(p, a, b, c)
122 #define IDirectMusicSynth8_PlayBuffer(p, a, b, c) (p)->lpVtbl->PlayBuffer(p, a, b, c)
123 #define IDirectMusicSynth8_GetRunningStats(p, a) (p)->lpVtbl->GetRunningStats(p, a)
124 #define IDirectMusicSynth8_GetPortCaps(p, a) (p)->lpVtbl->GetPortCaps(p, a)
125 #define IDirectMusicSynth8_SetMasterClock(p, a) (p)->lpVtbl->SetMasterClock((p, a)
126 #define IDirectMusicSynth8_GetLatencyClock(p, a) (p)->lpVtbl->GetLatencyClock(p, a)
127 #define IDirectMusicSynth8_Activate(p, a) (p)->lpVtbl->Activate((p, a)
128 #define IDirectMusicSynth8_SetSynthSink(p, a) (p)->lpVtbl->SetSynthSink(p, a)
129 #define IDirectMusicSynth8_Render(p, a, b, c) (p)->lpVtbl->Render(p, a, b, c)
130 #define IDirectMusicSynth8_SetChannelPriority(p, a, b, c) (p)->lpVtbl->SetChannelPriority(p, a, b, c)
131 #define IDirectMusicSynth8_GetChannelPriority(p, a, b, c) (p)->lpVtbl->GetChannelPriority(p, a, b, c)
132 #define IDirectMusicSynth8_GetFormat(p, a, b) (p)->lpVtbl->GetFormat(p, a, b)
133 #define IDirectMusicSynth8_GetAppend(p, a) (p)->lpVtbl->GetAppend(p, a)
134 #define IDirectMusicSynth8_PlayVoice(p, a, b, c, d, e, f, g, h, i, j) (p)->lpVtbl->PlayVoice(p, a, b, c, d, e, f, g, h, i, j)
135 #define IDirectMusicSynth8_StopVoice(p, a, b) (p)->lpVtbl->StopVoice(p, a, b)
136 #define IDirectMusicSynth8_GetVoiceState(p, a, b, c) (p)->lpVtbl->GetVoiceState(p, a, b, c)
137 #define IDirectMusicSynth8_Refresh(p, a, b) (p)->lpVtbl->Refresh(p, a, b)
138 #define IDirectMusicSynth8_AssignChannelToBuses(p, a, b, c, d) (p)->lpVtbl->AssignChannelToBuses(p, a, b, c, d)
139 #endif
140
141 #define INTERFACE IDirectMusicSynthSink
142 DECLARE_INTERFACE_(IDirectMusicSynthSink, IUnknown)
143 {
144 STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
145 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
146 STDMETHOD_(ULONG,Release) (THIS) PURE;
147 STDMETHOD(Init) (THIS_ IDirectMusicSynth *pSynth) PURE;
148 STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
149 STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
150 STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
151 STDMETHOD(SampleToRefTime) (THIS_ LONGLONG llSampleTime, REFERENCE_TIME *prfTime) PURE;
152 STDMETHOD(RefTimeToSample) (THIS_ REFERENCE_TIME rfTime, LONGLONG *pllSampleTime) PURE;
153 STDMETHOD(SetDirectSound) (THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;
154 STDMETHOD(GetDesiredBufferSize) (THIS_ LPDWORD pdwBufferSizeInSamples) PURE;
155 };
156
157 #endif