90c6d57681cb417e85dc27a0fe76b7867236f0f3
[reactos.git] / reactos / 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 __cplusplus
13 typedef interface IDirectMusicSynth IDirectMusicSynth;
14 typedef interface IDirectMusicSynthSink IDirectMusicSynthSink;
15 #endif
16
17 #ifndef _DMUS_VOICE_STATE_DEFINED
18 #define _DMUS_VOICE_STATE_DEFINED
19
20
21 DEFINE_GUID(IID_IDirectMusicSynth, 0x9823661, 0x5C85, 0x11D2, 0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6);
22 DEFINE_GUID(IID_IDirectMusicSynth8, 0x53CAB625, 0x2711, 0x4C9F, 0x9D, 0xE7, 0x1B, 0x7F, 0x92, 0x5F, 0x6F, 0xC8);
23 DEFINE_GUID(IID_IDirectMusicSynthSink, 0x09823663, 0x5C85, 0x11D2, 0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6);
24 DEFINE_GUID(GUID_DMUS_PROP_SetSynthSink, 0x0A3A5BA5, 0x37B6, 0x11D2, 0xB9, 0xF9, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12);
25 DEFINE_GUID(GUID_DMUS_PROP_SinkUsesDSound, 0xBE208857, 0x8952, 0x11D2, 0xBA, 0x1C, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12);
26
27 #define REFRESH_F_LASTBUFFER 0x00000001
28
29 typedef struct _DMUS_VOICE_STATE
30 {
31 BOOL bExists;
32 SAMPLE_POSITION spPosition;
33 } DMUS_VOICE_STATE;
34
35 #endif
36
37 #undef INTERFACE
38 #define INTERFACE IDirectMusicSynth
39 DECLARE_INTERFACE_(IDirectMusicSynth, IUnknown)
40 {
41 STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
42 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
43 STDMETHOD_(ULONG,Release) (THIS) PURE;
44 STDMETHOD(Open) (THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
45 STDMETHOD(Close) (THIS) PURE;
46 STDMETHOD(SetNumChannelGroups) (THIS_ DWORD dwGroups) PURE;
47 STDMETHOD(Download) (THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree ) PURE;
48 STDMETHOD(Unload) (THIS_ HANDLE hDownload, HRESULT ( CALLBACK *lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData ) PURE;
49 STDMETHOD(PlayBuffer) (THIS_ REFERENCE_TIME rt,LPBYTE pbBuffer, DWORD cbBuffer) PURE;
50 STDMETHOD(GetRunningStats) (THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
51 STDMETHOD(GetPortCaps) (THIS_ LPDMUS_PORTCAPS pCaps) PURE;
52 STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
53 STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
54 STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
55 STDMETHOD(SetSynthSink) (THIS_ IDirectMusicSynthSink *pSynthSink) PURE;
56 STDMETHOD(Render) (THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE;
57 STDMETHOD(SetChannelPriority) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
58 STDMETHOD(GetChannelPriority) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
59 STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize) PURE;
60 STDMETHOD(GetAppend) (THIS_ DWORD* pdwAppend) PURE;
61 };
62
63 #undef INTERFACE
64
65 #define INTERFACE IDirectMusicSynth8
66 DECLARE_INTERFACE_(IDirectMusicSynth8, IDirectMusicSynth)
67 {
68 STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
69 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
70 STDMETHOD_(ULONG,Release) (THIS) PURE;
71 STDMETHOD(Open) (THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
72 STDMETHOD(Close) (THIS) PURE;
73 STDMETHOD(SetNumChannelGroups) (THIS_ DWORD dwGroups) PURE;
74 STDMETHOD(Download) (THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree ) PURE;
75 STDMETHOD(Unload) (THIS_ HANDLE hDownload, HRESULT ( CALLBACK *lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData ) PURE;
76 STDMETHOD(PlayBuffer) (THIS_ REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) PURE;
77 STDMETHOD(GetRunningStats) (THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
78 STDMETHOD(GetPortCaps) (THIS_ LPDMUS_PORTCAPS pCaps) PURE;
79 STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
80 STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
81 STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
82 STDMETHOD(SetSynthSink) (THIS_ IDirectMusicSynthSink *pSynthSink) PURE;
83 STDMETHOD(Render) (THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE;
84 STDMETHOD(SetChannelPriority) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
85 STDMETHOD(GetChannelPriority) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
86 STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize) PURE;
87 STDMETHOD(GetAppend) (THIS_ DWORD* pdwAppend) PURE;
88 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;
89 STDMETHOD(StopVoice) (THIS_ REFERENCE_TIME rt, DWORD dwVoiceId ) PURE;
90 STDMETHOD(GetVoiceState) (THIS_ DWORD dwVoice[], DWORD cbVoice, DMUS_VOICE_STATE dwVoiceState[] ) PURE;
91 STDMETHOD(Refresh) (THIS_ DWORD dwDownloadID, DWORD dwFlags) PURE;
92 STDMETHOD(AssignChannelToBuses) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwBuses, DWORD cBuses) PURE;
93 };
94
95 #undef INTERFACE
96 #define INTERFACE IDirectMusicSynthSink
97 DECLARE_INTERFACE_(IDirectMusicSynthSink, IUnknown)
98 {
99 STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
100 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
101 STDMETHOD_(ULONG,Release) (THIS) PURE;
102 STDMETHOD(Init) (THIS_ IDirectMusicSynth *pSynth) PURE;
103 STDMETHOD(SetMasterClock) (THIS_ IReferenceClock *pClock) PURE;
104 STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
105 STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
106 STDMETHOD(SampleToRefTime) (THIS_ LONGLONG llSampleTime, REFERENCE_TIME *prfTime) PURE;
107 STDMETHOD(RefTimeToSample) (THIS_ REFERENCE_TIME rfTime, LONGLONG *pllSampleTime) PURE;
108 STDMETHOD(SetDirectSound) (THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;
109 STDMETHOD(GetDesiredBufferSize) (THIS_ LPDWORD pdwBufferSizeInSamples) PURE;
110 };
111
112 #endif