Niotso  git revision 558726a9f13d7c3423a683dd2f4323589b66c310
The New Implementation of The Sims Online
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
xaudio2.hpp
Go to the documentation of this file.
1 /*
2  xaudio2.hpp (2010-08-14)
3  author: OV2
4 
5  ruby-specific header to provide mingw-friendly xaudio2 interfaces
6 */
7 
8 #include <unknwn.h>
9 #include <mmreg.h>
10 
11 DEFINE_GUID(CLSID_XAudio2, 0xe21a7345, 0xeb21, 0x468e, 0xbe, 0x50, 0x80, 0x4d, 0xb9, 0x7c, 0xf7, 0x08);
12 DEFINE_GUID(CLSID_XAudio2_Debug, 0xf7a76c21, 0x53d4, 0x46bb, 0xac, 0x53, 0x8b, 0x45, 0x9c, 0xae, 0x46, 0xbd);
13 DEFINE_GUID(IID_IXAudio2, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a, 0xc6, 0xe2, 0xad, 0xc4, 0x65, 0xc8, 0xbb);
14 
15 DECLARE_INTERFACE(IXAudio2Voice);
16 
17 #define XAUDIO2_COMMIT_NOW 0
18 #define XAUDIO2_DEFAULT_CHANNELS 0
19 #define XAUDIO2_DEFAULT_SAMPLERATE 0
20 #define XAUDIO2_DEFAULT_FREQ_RATIO 4.0f
21 #define XAUDIO2_DEBUG_ENGINE 0x0001
22 #define XAUDIO2_LOOP_INFINITE 255
23 #define XAUDIO2_VOICE_NOSRC 0x0004
24 
26 {
34 };
35 
37 {
38  WCHAR DeviceID[256];
39  WCHAR DisplayName[256];
41  WAVEFORMATEXTENSIBLE OutputFormat;
42 };
43 
45 {
46  UINT32 CreationFlags;
47  UINT32 InputChannels;
49 };
50 
52 {
53  Processor1 = 0x00000001,
54  Processor2 = 0x00000002,
55  Processor3 = 0x00000004,
56  Processor4 = 0x00000008,
57  Processor5 = 0x00000010,
58  Processor6 = 0x00000020,
59  Processor7 = 0x00000040,
60  Processor8 = 0x00000080,
61  Processor9 = 0x00000100,
62  Processor10 = 0x00000200,
63  Processor11 = 0x00000400,
64  Processor12 = 0x00000800,
65  Processor13 = 0x00001000,
66  Processor14 = 0x00002000,
67  Processor15 = 0x00004000,
68  Processor16 = 0x00008000,
69  Processor17 = 0x00010000,
70  Processor18 = 0x00020000,
71  Processor19 = 0x00040000,
72  Processor20 = 0x00080000,
73  Processor21 = 0x00100000,
74  Processor22 = 0x00200000,
75  Processor23 = 0x00400000,
76  Processor24 = 0x00800000,
77  Processor25 = 0x01000000,
78  Processor26 = 0x02000000,
79  Processor27 = 0x04000000,
80  Processor28 = 0x08000000,
81  Processor29 = 0x10000000,
82  Processor30 = 0x20000000,
83  Processor31 = 0x40000000,
84  Processor32 = 0x80000000,
85  XAUDIO2_ANY_PROCESSOR = 0xffffffff,
88 
90 {
91  UINT32 OutputCount;
92  IXAudio2Voice* *pOutputVoices;
93 };
94 
96 {
97  IUnknown *pEffect;
100 };
101 
103 {
104  UINT32 EffectCount;
106 };
107 
109 {
113 };
114 
116 {
118  float Frequency;
119  float OneOverQ;
120 };
121 
123 {
124  UINT32 Flags;
125  UINT32 AudioBytes;
126  const BYTE *pAudioData;
127  UINT32 PlayBegin;
128  UINT32 PlayLength;
129  UINT32 LoopBegin;
130  UINT32 LoopLength;
131  UINT32 LoopCount;
132  void *pContext;
133 };
134 
136 {
138  UINT32 PacketCount;
139 };
140 
142 {
146 };
147 
149 {
163 };
164 
166 {
167  UINT32 TraceMask;
168  UINT32 BreakMask;
172  BOOL LogTiming;
173 };
174 
175 DECLARE_INTERFACE(IXAudio2EngineCallback)
176 {
177  STDMETHOD_(void, OnProcessingPassStart) (void);
178  STDMETHOD_(void, OnProcessingPassEnd) (void);
179  STDMETHOD_(void, OnCriticalError) (HRESULT Error);
180 };
181 
182 DECLARE_INTERFACE(IXAudio2VoiceCallback)
183 {
184  STDMETHOD_(void, OnVoiceProcessingPassStart) (UINT32 BytesRequired);
185  STDMETHOD_(void, OnVoiceProcessingPassEnd) (void);
186  STDMETHOD_(void, OnStreamEnd) (void);
187  STDMETHOD_(void, OnBufferStart) (void *pBufferContext);
188  STDMETHOD_(void, OnBufferEnd) (void *pBufferContext);
189  STDMETHOD_(void, OnLoopEnd) (void *pBufferContext);
190  STDMETHOD_(void, OnVoiceError) (void *pBufferContext, HRESULT Error);
191 };
192 
193 DECLARE_INTERFACE(IXAudio2Voice)
194 {
195  STDMETHOD_(void, GetVoiceDetails) (XAUDIO2_VOICE_DETAILS *pVoiceDetails);
196  STDMETHOD(SetOutputVoices) (const XAUDIO2_VOICE_SENDS *pSendList);
197  STDMETHOD(SetEffectChain) (const XAUDIO2_EFFECT_CHAIN *pEffectChain);
198  STDMETHOD(EnableEffect) (UINT32 EffectIndex, UINT32 OperationSet = XAUDIO2_COMMIT_NOW);
199  STDMETHOD(DisableEffect) (UINT32 EffectIndex, UINT32 OperationSet = XAUDIO2_COMMIT_NOW);
200  STDMETHOD_(void, GetEffectState) (UINT32 EffectIndex, BOOL *pEnabled);
201  STDMETHOD(SetEffectParameters) (UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize,
202  UINT32 OperationSet = XAUDIO2_COMMIT_NOW);
203  STDMETHOD(GetEffectParameters) (UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize);
204  STDMETHOD(SetFilterParameters) (const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet = XAUDIO2_COMMIT_NOW);
205  STDMETHOD_(void, GetFilterParameters) (XAUDIO2_FILTER_PARAMETERS *pParameters);
206  STDMETHOD(SetVolume) (float Volume, UINT32 OperationSet = XAUDIO2_COMMIT_NOW);
207  STDMETHOD_(void, GetVolume) (float *pVolume);
208  STDMETHOD(SetChannelVolumes) (UINT32 Channels, const float *pVolumes, UINT32 OperationSet = XAUDIO2_COMMIT_NOW);
209  STDMETHOD_(void, GetChannelVolumes) (UINT32 Channels, float *pVolumes);
210  STDMETHOD(SetOutputMatrix) (IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, UINT32 DestinationChannels,
211  const float *pLevelMatrix, UINT32 OperationSet = XAUDIO2_COMMIT_NOW);
212  STDMETHOD_(void, GetOutputMatrix) (IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels,
213  UINT32 DestinationChannels, float *pLevelMatrix);
214  STDMETHOD_(void, DestroyVoice) (void);
215 };
216 
217 DECLARE_INTERFACE_(IXAudio2MasteringVoice, IXAudio2Voice){};
218 
219 DECLARE_INTERFACE_(IXAudio2SubmixVoice, IXAudio2Voice){};
220 
221 DECLARE_INTERFACE_(IXAudio2SourceVoice, IXAudio2Voice)
222 {
223  STDMETHOD(Start) (UINT32 Flags, UINT32 OperationSet = XAUDIO2_COMMIT_NOW);
224  STDMETHOD(Stop) (UINT32 Flags, UINT32 OperationSet = XAUDIO2_COMMIT_NOW);
225  STDMETHOD(SubmitSourceBuffer) (const XAUDIO2_BUFFER *pBuffer, const XAUDIO2_BUFFER_WMA *pBufferWMA = NULL);
226  STDMETHOD(FlushSourceBuffers) (void);
227  STDMETHOD(Discontinuity) (void);
228  STDMETHOD(ExitLoop) (UINT32 OperationSet = XAUDIO2_COMMIT_NOW);
229  STDMETHOD_(void, GetState) (XAUDIO2_VOICE_STATE *pVoiceState);
230  STDMETHOD(SetFrequencyRatio) (float Ratio, UINT32 OperationSet = XAUDIO2_COMMIT_NOW);
231  STDMETHOD_(void, GetFrequencyRatio) (float *pRatio);
232 };
233 
234 DECLARE_INTERFACE_(IXAudio2, IUnknown)
235 {
236  STDMETHOD(GetDeviceCount) (UINT32 *pCount);
237  STDMETHOD(GetDeviceDetails) (UINT32 Index, XAUDIO2_DEVICE_DETAILS *pDeviceDetails);
238  STDMETHOD(Initialize) (UINT32 Flags = 0, XAUDIO2_PROCESSOR XAudio2Processor = XAUDIO2_DEFAULT_PROCESSOR);
239  STDMETHOD(RegisterForCallbacks) (IXAudio2EngineCallback *pCallback);
240  STDMETHOD_(void, UnregisterForCallbacks) (IXAudio2EngineCallback *pCallback);
241  STDMETHOD(CreateSourceVoice) (IXAudio2SourceVoice* *ppSourceVoice, const WAVEFORMATEX *pSourceFormat, UINT32 Flags = 0,
242  float MaxFrequencyRatio = XAUDIO2_DEFAULT_FREQ_RATIO, IXAudio2VoiceCallback *pCallback = NULL,
243  const XAUDIO2_VOICE_SENDS *pSendList = NULL, const XAUDIO2_EFFECT_CHAIN *pEffectChain = NULL);
244  STDMETHOD(CreateSubmixVoice) (IXAudio2SubmixVoice* *ppSubmixVoice, UINT32 InputChannels, UINT32 InputSampleRate,
245  UINT32 Flags = 0, UINT32 ProcessingStage = 0, const XAUDIO2_VOICE_SENDS *pSendList = NULL,
246  const XAUDIO2_EFFECT_CHAIN *pEffectChain = NULL);
247  STDMETHOD(CreateMasteringVoice) (IXAudio2MasteringVoice* *ppMasteringVoice,
248  UINT32 InputChannels = XAUDIO2_DEFAULT_CHANNELS, UINT32 InputSampleRate = XAUDIO2_DEFAULT_SAMPLERATE,
249  UINT32 Flags = 0, UINT32 DeviceIndex = 0, const XAUDIO2_EFFECT_CHAIN *pEffectChain = NULL);
250  STDMETHOD(StartEngine) (void);
251  STDMETHOD_(void, StopEngine) (void);
252  STDMETHOD(CommitChanges) (UINT32 OperationSet);
253  STDMETHOD_(void, GetPerformanceData) (XAUDIO2_PERFORMANCE_DATA *pPerfData);
254  STDMETHOD_(void, SetDebugConfiguration) (const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration, void *pReserved = NULL);
255 };
256 
257 inline HRESULT XAudio2Create(IXAudio2* *ppXAudio2, UINT32 Flags = 0,
258  XAUDIO2_PROCESSOR XAudio2Processor = XAUDIO2_DEFAULT_PROCESSOR)
259 {
260  IXAudio2 *pXAudio2;
261  HRESULT hr = CoCreateInstance((Flags & XAUDIO2_DEBUG_ENGINE) ? CLSID_XAudio2_Debug : CLSID_XAudio2, NULL,
262  CLSCTX_INPROC_SERVER, IID_IXAudio2, (void**)&pXAudio2);
263  if(SUCCEEDED(hr)){
264  hr = pXAudio2->Initialize(Flags, XAudio2Processor);
265  if(SUCCEEDED(hr))
266  *ppXAudio2 = pXAudio2;
267  else
268  pXAudio2->Release();
269  }
270  return hr;
271 }