2 * Copyright (c) 2015 Andrew Eikum for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 * Some versions of XAudio2 add or remove functions to the COM vtables, or
21 * incompatibly change structures. This file provides implementations of the
22 * older XAudio2 versions onto the new XAudio2 APIs.
24 * Below is a list of significant changes to the main XAudio2 interfaces and
25 * API. There may be further changes to effects and other parts that Wine
26 * doesn't currently implement.
32 * Change CLSID_XAudio2
33 * Re-order Error codes
34 * Change XAUDIO2_LOOP_INFINITE
35 * Change struct XAUDIO2_PERFORMANCE_DATA
36 * Change IXAudio2Voice::GetOutputMatrix return value to void
37 * Add parameter to IXAudio2VoiceCallback::OnVoiceProcessingPassStart
38 * Change struct XAPO_REGISTRATION_PROPERTIES. CAREFUL when using! Not all
39 * implementations of IXAPO are Wine implementations.
42 * Change CLSID_XAudio2
46 * Change CLSID_XAudio2
48 * Change struct XAUDIO2_PERFORMANCE_DATA
51 * Change CLSID_XAudio2
53 * Add IXAudio2Voice::SetOutputFilterParameters
54 * Add IXAudio2Voice::GetOutputFilterParameters
55 * Add IXAudio2SourceVoice::SetSourceSampleRate
56 * Change struct XAUDIO2_VOICE_SENDS
59 * Change CLSID_XAudio2
63 * Change CLSID_XAudio2
67 * Change CLSID_XAudio2
71 * Remove CLSID_XAudio2
73 * Add xaudio2_8.XAudio2Create
75 * Remove IXAudio2::GetDeviceCount
76 * Remove IXAudio2::GetDeviceDetails
77 * Remove IXAudio2::Initialize
78 * Change parameter of IXAudio2::CreateMasteringVoice
79 * Add Flags parameter to IXAudio2SourceVoice::GetState
80 * Add IXAudio2MasteringVoice::GetChannelMask
81 * Add DisableLateField member to XAUDIO2FX_REVERB_PARAMETERS
82 * Add ActiveFlags member to XAUDIO2_VOICE_DETAILS
86 * New flags: XAUDIO2_STOP_ENGINE_WHEN_IDLE, XAUDIO2_1024_QUANTUM,
87 * XAUDIO2_NO_VIRTUAL_AUDIO_CLIENT
89 * Add SideDelay member to XAUDIO2FX_REVERB_PARAMETERS
94 #define NONAMELESSUNION
95 #define NONAMELESSSTRUCT
100 #include "xaudio_private.h"
102 #include "wine/debug.h"
105 WINE_DEFAULT_DEBUG_CHANNEL(xaudio2
);
109 static XAUDIO2_SEND_DESCRIPTOR
*convert_send_descriptors23(const XAUDIO23_VOICE_SENDS
*sends
)
111 XAUDIO2_SEND_DESCRIPTOR
*ret
;
114 ret
= HeapAlloc(GetProcessHeap(), 0, sends
->OutputCount
* sizeof(XAUDIO2_SEND_DESCRIPTOR
));
116 for(i
= 0; i
< sends
->OutputCount
; ++i
){
118 ret
[i
].pOutputVoice
= sends
->pOutputVoices
[i
];
125 /* BEGIN IXAudio2SourceVoice */
127 XA2VoiceImpl
*impl_from_IXAudio20SourceVoice(IXAudio20SourceVoice
*iface
)
129 return CONTAINING_RECORD(iface
, XA2VoiceImpl
, IXAudio20SourceVoice_iface
);
132 static void WINAPI
XA20SRC_GetVoiceDetails(IXAudio20SourceVoice
*iface
,
133 XAUDIO27_VOICE_DETAILS
*pVoiceDetails
)
135 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
136 XAUDIO2_VOICE_DETAILS details
;
138 IXAudio2SourceVoice_GetVoiceDetails(&This
->IXAudio2SourceVoice_iface
, &details
);
140 pVoiceDetails
->CreationFlags
= details
.CreationFlags
;
141 pVoiceDetails
->InputChannels
= details
.InputChannels
;
142 pVoiceDetails
->InputSampleRate
= details
.InputSampleRate
;
145 static HRESULT WINAPI
XA20SRC_SetOutputVoices(IXAudio20SourceVoice
*iface
,
146 const XAUDIO23_VOICE_SENDS
*pSendList
)
148 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
149 XAUDIO2_VOICE_SENDS sends
, *psends
= NULL
;
152 TRACE("%p, %p\n", This
, pSendList
);
155 sends
.SendCount
= pSendList
->OutputCount
;
156 sends
.pSends
= convert_send_descriptors23(pSendList
);
160 hr
= IXAudio2SourceVoice_SetOutputVoices(&This
->IXAudio2SourceVoice_iface
, psends
);
163 HeapFree(GetProcessHeap(), 0, sends
.pSends
);
168 static HRESULT WINAPI
XA20SRC_SetEffectChain(IXAudio20SourceVoice
*iface
,
169 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
171 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
172 return IXAudio2SourceVoice_SetEffectChain(&This
->IXAudio2SourceVoice_iface
, pEffectChain
);
175 static HRESULT WINAPI
XA20SRC_EnableEffect(IXAudio20SourceVoice
*iface
,
176 UINT32 EffectIndex
, UINT32 OperationSet
)
178 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
179 return IXAudio2SourceVoice_EnableEffect(&This
->IXAudio2SourceVoice_iface
,
180 EffectIndex
, OperationSet
);
183 static HRESULT WINAPI
XA20SRC_DisableEffect(IXAudio20SourceVoice
*iface
,
184 UINT32 EffectIndex
, UINT32 OperationSet
)
186 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
187 return IXAudio2SourceVoice_DisableEffect(&This
->IXAudio2SourceVoice_iface
,
188 EffectIndex
, OperationSet
);
191 static void WINAPI
XA20SRC_GetEffectState(IXAudio20SourceVoice
*iface
,
192 UINT32 EffectIndex
, BOOL
*pEnabled
)
194 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
195 return IXAudio2SourceVoice_GetEffectState(&This
->IXAudio2SourceVoice_iface
,
196 EffectIndex
, pEnabled
);
199 static HRESULT WINAPI
XA20SRC_SetEffectParameters(IXAudio20SourceVoice
*iface
,
200 UINT32 EffectIndex
, const void *pParameters
, UINT32 ParametersByteSize
,
203 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
204 return IXAudio2SourceVoice_SetEffectParameters(&This
->IXAudio2SourceVoice_iface
,
205 EffectIndex
, pParameters
, ParametersByteSize
, OperationSet
);
208 static HRESULT WINAPI
XA20SRC_GetEffectParameters(IXAudio20SourceVoice
*iface
,
209 UINT32 EffectIndex
, void *pParameters
, UINT32 ParametersByteSize
)
211 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
212 return IXAudio2SourceVoice_GetEffectParameters(&This
->IXAudio2SourceVoice_iface
,
213 EffectIndex
, pParameters
, ParametersByteSize
);
216 static HRESULT WINAPI
XA20SRC_SetFilterParameters(IXAudio20SourceVoice
*iface
,
217 const XAUDIO2_FILTER_PARAMETERS
*pParameters
, UINT32 OperationSet
)
219 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
220 return IXAudio2SourceVoice_SetFilterParameters(&This
->IXAudio2SourceVoice_iface
,
221 pParameters
, OperationSet
);
224 static void WINAPI
XA20SRC_GetFilterParameters(IXAudio20SourceVoice
*iface
,
225 XAUDIO2_FILTER_PARAMETERS
*pParameters
)
227 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
228 return IXAudio2SourceVoice_GetFilterParameters(&This
->IXAudio2SourceVoice_iface
, pParameters
);
231 static HRESULT WINAPI
XA20SRC_SetVolume(IXAudio20SourceVoice
*iface
,
232 float Volume
, UINT32 OperationSet
)
234 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
235 return IXAudio2SourceVoice_SetVolume(&This
->IXAudio2SourceVoice_iface
,
236 Volume
, OperationSet
);
239 static void WINAPI
XA20SRC_GetVolume(IXAudio20SourceVoice
*iface
,
242 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
243 return IXAudio2SourceVoice_GetVolume(&This
->IXAudio2SourceVoice_iface
, pVolume
);
246 static HRESULT WINAPI
XA20SRC_SetChannelVolumes(IXAudio20SourceVoice
*iface
,
247 UINT32 Channels
, const float *pVolumes
, UINT32 OperationSet
)
249 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
250 return IXAudio2SourceVoice_SetChannelVolumes(&This
->IXAudio2SourceVoice_iface
,
251 Channels
, pVolumes
, OperationSet
);
254 static void WINAPI
XA20SRC_GetChannelVolumes(IXAudio20SourceVoice
*iface
,
255 UINT32 Channels
, float *pVolumes
)
257 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
258 return IXAudio2SourceVoice_GetChannelVolumes(&This
->IXAudio2SourceVoice_iface
,
262 static HRESULT WINAPI
XA20SRC_SetOutputMatrix(IXAudio20SourceVoice
*iface
,
263 IXAudio2Voice
*pDestinationVoice
, UINT32 SourceChannels
,
264 UINT32 DestinationChannels
, const float *pLevelMatrix
,
267 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
268 return IXAudio2SourceVoice_SetOutputMatrix(&This
->IXAudio2SourceVoice_iface
,
269 pDestinationVoice
, SourceChannels
, DestinationChannels
,
270 pLevelMatrix
, OperationSet
);
273 static HRESULT WINAPI
XA20SRC_GetOutputMatrix(IXAudio20SourceVoice
*iface
,
274 IXAudio2Voice
*pDestinationVoice
, UINT32 SourceChannels
,
275 UINT32 DestinationChannels
, float *pLevelMatrix
)
277 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
278 IXAudio2SourceVoice_GetOutputMatrix(&This
->IXAudio2SourceVoice_iface
,
279 pDestinationVoice
, SourceChannels
, DestinationChannels
,
284 static void WINAPI
XA20SRC_DestroyVoice(IXAudio20SourceVoice
*iface
)
286 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
287 return IXAudio2SourceVoice_DestroyVoice(&This
->IXAudio2SourceVoice_iface
);
290 static HRESULT WINAPI
XA20SRC_Start(IXAudio20SourceVoice
*iface
, UINT32 Flags
,
293 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
294 return IXAudio2SourceVoice_Start(&This
->IXAudio2SourceVoice_iface
, Flags
, OperationSet
);
297 static HRESULT WINAPI
XA20SRC_Stop(IXAudio20SourceVoice
*iface
, UINT32 Flags
,
300 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
301 return IXAudio2SourceVoice_Stop(&This
->IXAudio2SourceVoice_iface
, Flags
, OperationSet
);
304 static HRESULT WINAPI
XA20SRC_SubmitSourceBuffer(IXAudio20SourceVoice
*iface
,
305 const XAUDIO2_BUFFER
*pBuffer
, const XAUDIO2_BUFFER_WMA
*pBufferWMA
)
307 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
308 return IXAudio2SourceVoice_SubmitSourceBuffer(&This
->IXAudio2SourceVoice_iface
,
309 pBuffer
, pBufferWMA
);
312 static HRESULT WINAPI
XA20SRC_FlushSourceBuffers(IXAudio20SourceVoice
*iface
)
314 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
315 return IXAudio2SourceVoice_FlushSourceBuffers(&This
->IXAudio2SourceVoice_iface
);
318 static HRESULT WINAPI
XA20SRC_Discontinuity(IXAudio20SourceVoice
*iface
)
320 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
321 return IXAudio2SourceVoice_Discontinuity(&This
->IXAudio2SourceVoice_iface
);
324 static HRESULT WINAPI
XA20SRC_ExitLoop(IXAudio20SourceVoice
*iface
,
327 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
328 return IXAudio2SourceVoice_ExitLoop(&This
->IXAudio2SourceVoice_iface
, OperationSet
);
331 static void WINAPI
XA20SRC_GetState(IXAudio20SourceVoice
*iface
,
332 XAUDIO2_VOICE_STATE
*pVoiceState
)
334 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
335 return IXAudio2SourceVoice_GetState(&This
->IXAudio2SourceVoice_iface
, pVoiceState
, 0);
338 static HRESULT WINAPI
XA20SRC_SetFrequencyRatio(IXAudio20SourceVoice
*iface
,
339 float Ratio
, UINT32 OperationSet
)
341 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
342 return IXAudio2SourceVoice_SetFrequencyRatio(&This
->IXAudio2SourceVoice_iface
,
343 Ratio
, OperationSet
);
346 static void WINAPI
XA20SRC_GetFrequencyRatio(IXAudio20SourceVoice
*iface
,
349 XA2VoiceImpl
*This
= impl_from_IXAudio20SourceVoice(iface
);
350 return IXAudio2SourceVoice_GetFrequencyRatio(&This
->IXAudio2SourceVoice_iface
, pRatio
);
353 const IXAudio20SourceVoiceVtbl XAudio20SourceVoice_Vtbl
= {
354 XA20SRC_GetVoiceDetails
,
355 XA20SRC_SetOutputVoices
,
356 XA20SRC_SetEffectChain
,
357 XA20SRC_EnableEffect
,
358 XA20SRC_DisableEffect
,
359 XA20SRC_GetEffectState
,
360 XA20SRC_SetEffectParameters
,
361 XA20SRC_GetEffectParameters
,
362 XA20SRC_SetFilterParameters
,
363 XA20SRC_GetFilterParameters
,
366 XA20SRC_SetChannelVolumes
,
367 XA20SRC_GetChannelVolumes
,
368 XA20SRC_SetOutputMatrix
,
369 XA20SRC_GetOutputMatrix
,
370 XA20SRC_DestroyVoice
,
373 XA20SRC_SubmitSourceBuffer
,
374 XA20SRC_FlushSourceBuffers
,
375 XA20SRC_Discontinuity
,
378 XA20SRC_SetFrequencyRatio
,
379 XA20SRC_GetFrequencyRatio
,
382 #elif XAUDIO2_VER <= 3
384 XA2VoiceImpl
*impl_from_IXAudio23SourceVoice(IXAudio23SourceVoice
*iface
)
386 return CONTAINING_RECORD(iface
, XA2VoiceImpl
, IXAudio23SourceVoice_iface
);
389 static void WINAPI
XA23SRC_GetVoiceDetails(IXAudio23SourceVoice
*iface
,
390 XAUDIO27_VOICE_DETAILS
*pVoiceDetails
)
392 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
393 XAUDIO2_VOICE_DETAILS details
;
395 IXAudio2SourceVoice_GetVoiceDetails(&This
->IXAudio2SourceVoice_iface
, &details
);
397 pVoiceDetails
->CreationFlags
= details
.CreationFlags
;
398 pVoiceDetails
->InputChannels
= details
.InputChannels
;
399 pVoiceDetails
->InputSampleRate
= details
.InputSampleRate
;
402 static HRESULT WINAPI
XA23SRC_SetOutputVoices(IXAudio23SourceVoice
*iface
,
403 const XAUDIO23_VOICE_SENDS
*pSendList
)
405 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
406 XAUDIO2_VOICE_SENDS sends
, *psends
= NULL
;
409 TRACE("%p, %p\n", This
, pSendList
);
412 sends
.SendCount
= pSendList
->OutputCount
;
413 sends
.pSends
= convert_send_descriptors23(pSendList
);
417 hr
= IXAudio2SourceVoice_SetOutputVoices(&This
->IXAudio2SourceVoice_iface
, psends
);
420 HeapFree(GetProcessHeap(), 0, sends
.pSends
);
425 static HRESULT WINAPI
XA23SRC_SetEffectChain(IXAudio23SourceVoice
*iface
,
426 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
428 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
429 return IXAudio2SourceVoice_SetEffectChain(&This
->IXAudio2SourceVoice_iface
, pEffectChain
);
432 static HRESULT WINAPI
XA23SRC_EnableEffect(IXAudio23SourceVoice
*iface
,
433 UINT32 EffectIndex
, UINT32 OperationSet
)
435 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
436 return IXAudio2SourceVoice_EnableEffect(&This
->IXAudio2SourceVoice_iface
,
437 EffectIndex
, OperationSet
);
440 static HRESULT WINAPI
XA23SRC_DisableEffect(IXAudio23SourceVoice
*iface
,
441 UINT32 EffectIndex
, UINT32 OperationSet
)
443 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
444 return IXAudio2SourceVoice_DisableEffect(&This
->IXAudio2SourceVoice_iface
,
445 EffectIndex
, OperationSet
);
448 static void WINAPI
XA23SRC_GetEffectState(IXAudio23SourceVoice
*iface
,
449 UINT32 EffectIndex
, BOOL
*pEnabled
)
451 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
452 return IXAudio2SourceVoice_GetEffectState(&This
->IXAudio2SourceVoice_iface
,
453 EffectIndex
, pEnabled
);
456 static HRESULT WINAPI
XA23SRC_SetEffectParameters(IXAudio23SourceVoice
*iface
,
457 UINT32 EffectIndex
, const void *pParameters
, UINT32 ParametersByteSize
,
460 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
461 return IXAudio2SourceVoice_SetEffectParameters(&This
->IXAudio2SourceVoice_iface
,
462 EffectIndex
, pParameters
, ParametersByteSize
, OperationSet
);
465 static HRESULT WINAPI
XA23SRC_GetEffectParameters(IXAudio23SourceVoice
*iface
,
466 UINT32 EffectIndex
, void *pParameters
, UINT32 ParametersByteSize
)
468 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
469 return IXAudio2SourceVoice_GetEffectParameters(&This
->IXAudio2SourceVoice_iface
,
470 EffectIndex
, pParameters
, ParametersByteSize
);
473 static HRESULT WINAPI
XA23SRC_SetFilterParameters(IXAudio23SourceVoice
*iface
,
474 const XAUDIO2_FILTER_PARAMETERS
*pParameters
, UINT32 OperationSet
)
476 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
477 return IXAudio2SourceVoice_SetFilterParameters(&This
->IXAudio2SourceVoice_iface
,
478 pParameters
, OperationSet
);
481 static void WINAPI
XA23SRC_GetFilterParameters(IXAudio23SourceVoice
*iface
,
482 XAUDIO2_FILTER_PARAMETERS
*pParameters
)
484 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
485 return IXAudio2SourceVoice_GetFilterParameters(&This
->IXAudio2SourceVoice_iface
, pParameters
);
488 static HRESULT WINAPI
XA23SRC_SetVolume(IXAudio23SourceVoice
*iface
,
489 float Volume
, UINT32 OperationSet
)
491 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
492 return IXAudio2SourceVoice_SetVolume(&This
->IXAudio2SourceVoice_iface
,
493 Volume
, OperationSet
);
496 static void WINAPI
XA23SRC_GetVolume(IXAudio23SourceVoice
*iface
,
499 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
500 return IXAudio2SourceVoice_GetVolume(&This
->IXAudio2SourceVoice_iface
, pVolume
);
503 static HRESULT WINAPI
XA23SRC_SetChannelVolumes(IXAudio23SourceVoice
*iface
,
504 UINT32 Channels
, const float *pVolumes
, UINT32 OperationSet
)
506 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
507 return IXAudio2SourceVoice_SetChannelVolumes(&This
->IXAudio2SourceVoice_iface
,
508 Channels
, pVolumes
, OperationSet
);
511 static void WINAPI
XA23SRC_GetChannelVolumes(IXAudio23SourceVoice
*iface
,
512 UINT32 Channels
, float *pVolumes
)
514 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
515 return IXAudio2SourceVoice_GetChannelVolumes(&This
->IXAudio2SourceVoice_iface
,
519 static HRESULT WINAPI
XA23SRC_SetOutputMatrix(IXAudio23SourceVoice
*iface
,
520 IXAudio2Voice
*pDestinationVoice
, UINT32 SourceChannels
,
521 UINT32 DestinationChannels
, const float *pLevelMatrix
,
524 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
525 return IXAudio2SourceVoice_SetOutputMatrix(&This
->IXAudio2SourceVoice_iface
,
526 pDestinationVoice
, SourceChannels
, DestinationChannels
,
527 pLevelMatrix
, OperationSet
);
530 static void WINAPI
XA23SRC_GetOutputMatrix(IXAudio23SourceVoice
*iface
,
531 IXAudio2Voice
*pDestinationVoice
, UINT32 SourceChannels
,
532 UINT32 DestinationChannels
, float *pLevelMatrix
)
534 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
535 return IXAudio2SourceVoice_GetOutputMatrix(&This
->IXAudio2SourceVoice_iface
,
536 pDestinationVoice
, SourceChannels
, DestinationChannels
,
540 static void WINAPI
XA23SRC_DestroyVoice(IXAudio23SourceVoice
*iface
)
542 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
543 return IXAudio2SourceVoice_DestroyVoice(&This
->IXAudio2SourceVoice_iface
);
546 static HRESULT WINAPI
XA23SRC_Start(IXAudio23SourceVoice
*iface
, UINT32 Flags
,
549 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
550 return IXAudio2SourceVoice_Start(&This
->IXAudio2SourceVoice_iface
, Flags
, OperationSet
);
553 static HRESULT WINAPI
XA23SRC_Stop(IXAudio23SourceVoice
*iface
, UINT32 Flags
,
556 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
557 return IXAudio2SourceVoice_Stop(&This
->IXAudio2SourceVoice_iface
, Flags
, OperationSet
);
560 static HRESULT WINAPI
XA23SRC_SubmitSourceBuffer(IXAudio23SourceVoice
*iface
,
561 const XAUDIO2_BUFFER
*pBuffer
, const XAUDIO2_BUFFER_WMA
*pBufferWMA
)
563 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
564 return IXAudio2SourceVoice_SubmitSourceBuffer(&This
->IXAudio2SourceVoice_iface
,
565 pBuffer
, pBufferWMA
);
568 static HRESULT WINAPI
XA23SRC_FlushSourceBuffers(IXAudio23SourceVoice
*iface
)
570 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
571 return IXAudio2SourceVoice_FlushSourceBuffers(&This
->IXAudio2SourceVoice_iface
);
574 static HRESULT WINAPI
XA23SRC_Discontinuity(IXAudio23SourceVoice
*iface
)
576 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
577 return IXAudio2SourceVoice_Discontinuity(&This
->IXAudio2SourceVoice_iface
);
580 static HRESULT WINAPI
XA23SRC_ExitLoop(IXAudio23SourceVoice
*iface
,
583 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
584 return IXAudio2SourceVoice_ExitLoop(&This
->IXAudio2SourceVoice_iface
, OperationSet
);
587 static void WINAPI
XA23SRC_GetState(IXAudio23SourceVoice
*iface
,
588 XAUDIO2_VOICE_STATE
*pVoiceState
)
590 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
591 return IXAudio2SourceVoice_GetState(&This
->IXAudio2SourceVoice_iface
, pVoiceState
, 0);
594 static HRESULT WINAPI
XA23SRC_SetFrequencyRatio(IXAudio23SourceVoice
*iface
,
595 float Ratio
, UINT32 OperationSet
)
597 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
598 return IXAudio2SourceVoice_SetFrequencyRatio(&This
->IXAudio2SourceVoice_iface
,
599 Ratio
, OperationSet
);
602 static void WINAPI
XA23SRC_GetFrequencyRatio(IXAudio23SourceVoice
*iface
,
605 XA2VoiceImpl
*This
= impl_from_IXAudio23SourceVoice(iface
);
606 return IXAudio2SourceVoice_GetFrequencyRatio(&This
->IXAudio2SourceVoice_iface
, pRatio
);
609 const IXAudio23SourceVoiceVtbl XAudio23SourceVoice_Vtbl
= {
610 XA23SRC_GetVoiceDetails
,
611 XA23SRC_SetOutputVoices
,
612 XA23SRC_SetEffectChain
,
613 XA23SRC_EnableEffect
,
614 XA23SRC_DisableEffect
,
615 XA23SRC_GetEffectState
,
616 XA23SRC_SetEffectParameters
,
617 XA23SRC_GetEffectParameters
,
618 XA23SRC_SetFilterParameters
,
619 XA23SRC_GetFilterParameters
,
622 XA23SRC_SetChannelVolumes
,
623 XA23SRC_GetChannelVolumes
,
624 XA23SRC_SetOutputMatrix
,
625 XA23SRC_GetOutputMatrix
,
626 XA23SRC_DestroyVoice
,
629 XA23SRC_SubmitSourceBuffer
,
630 XA23SRC_FlushSourceBuffers
,
631 XA23SRC_Discontinuity
,
634 XA23SRC_SetFrequencyRatio
,
635 XA23SRC_GetFrequencyRatio
,
638 #elif XAUDIO2_VER <= 7
640 XA2VoiceImpl
*impl_from_IXAudio27SourceVoice(IXAudio27SourceVoice
*iface
)
642 return CONTAINING_RECORD(iface
, XA2VoiceImpl
, IXAudio27SourceVoice_iface
);
645 static void WINAPI
XA27SRC_GetVoiceDetails(IXAudio27SourceVoice
*iface
,
646 XAUDIO27_VOICE_DETAILS
*pVoiceDetails
)
648 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
649 XAUDIO2_VOICE_DETAILS details
;
651 IXAudio2SourceVoice_GetVoiceDetails(&This
->IXAudio2SourceVoice_iface
, &details
);
653 pVoiceDetails
->CreationFlags
= details
.CreationFlags
;
654 pVoiceDetails
->InputChannels
= details
.InputChannels
;
655 pVoiceDetails
->InputSampleRate
= details
.InputSampleRate
;
658 static HRESULT WINAPI
XA27SRC_SetOutputVoices(IXAudio27SourceVoice
*iface
,
659 const XAUDIO2_VOICE_SENDS
*pSendList
)
661 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
662 return IXAudio2SourceVoice_SetOutputVoices(&This
->IXAudio2SourceVoice_iface
, pSendList
);
665 static HRESULT WINAPI
XA27SRC_SetEffectChain(IXAudio27SourceVoice
*iface
,
666 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
668 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
669 return IXAudio2SourceVoice_SetEffectChain(&This
->IXAudio2SourceVoice_iface
, pEffectChain
);
672 static HRESULT WINAPI
XA27SRC_EnableEffect(IXAudio27SourceVoice
*iface
,
673 UINT32 EffectIndex
, UINT32 OperationSet
)
675 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
676 return IXAudio2SourceVoice_EnableEffect(&This
->IXAudio2SourceVoice_iface
, EffectIndex
, OperationSet
);
679 static HRESULT WINAPI
XA27SRC_DisableEffect(IXAudio27SourceVoice
*iface
,
680 UINT32 EffectIndex
, UINT32 OperationSet
)
682 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
683 return IXAudio2SourceVoice_DisableEffect(&This
->IXAudio2SourceVoice_iface
, EffectIndex
, OperationSet
);
686 static void WINAPI
XA27SRC_GetEffectState(IXAudio27SourceVoice
*iface
,
687 UINT32 EffectIndex
, BOOL
*pEnabled
)
689 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
690 IXAudio2SourceVoice_GetEffectState(&This
->IXAudio2SourceVoice_iface
, EffectIndex
, pEnabled
);
693 static HRESULT WINAPI
XA27SRC_SetEffectParameters(IXAudio27SourceVoice
*iface
,
694 UINT32 EffectIndex
, const void *pParameters
, UINT32 ParametersByteSize
,
697 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
698 return IXAudio2SourceVoice_SetEffectParameters(&This
->IXAudio2SourceVoice_iface
,
699 EffectIndex
, pParameters
, ParametersByteSize
, OperationSet
);
702 static HRESULT WINAPI
XA27SRC_GetEffectParameters(IXAudio27SourceVoice
*iface
,
703 UINT32 EffectIndex
, void *pParameters
, UINT32 ParametersByteSize
)
705 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
706 return IXAudio2SourceVoice_GetEffectParameters(&This
->IXAudio2SourceVoice_iface
,
707 EffectIndex
, pParameters
, ParametersByteSize
);
710 static HRESULT WINAPI
XA27SRC_SetFilterParameters(IXAudio27SourceVoice
*iface
,
711 const XAUDIO2_FILTER_PARAMETERS
*pParameters
, UINT32 OperationSet
)
713 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
714 return IXAudio2SourceVoice_SetFilterParameters(&This
->IXAudio2SourceVoice_iface
,
715 pParameters
, OperationSet
);
718 static void WINAPI
XA27SRC_GetFilterParameters(IXAudio27SourceVoice
*iface
,
719 XAUDIO2_FILTER_PARAMETERS
*pParameters
)
721 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
722 IXAudio2SourceVoice_GetFilterParameters(&This
->IXAudio2SourceVoice_iface
, pParameters
);
725 static HRESULT WINAPI
XA27SRC_SetOutputFilterParameters(IXAudio27SourceVoice
*iface
,
726 IXAudio2Voice
*pDestinationVoice
,
727 const XAUDIO2_FILTER_PARAMETERS
*pParameters
, UINT32 OperationSet
)
729 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
730 return IXAudio2SourceVoice_SetOutputFilterParameters(&This
->IXAudio2SourceVoice_iface
,
731 pDestinationVoice
, pParameters
, OperationSet
);
734 static void WINAPI
XA27SRC_GetOutputFilterParameters(IXAudio27SourceVoice
*iface
,
735 IXAudio2Voice
*pDestinationVoice
,
736 XAUDIO2_FILTER_PARAMETERS
*pParameters
)
738 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
739 IXAudio2SourceVoice_GetOutputFilterParameters(&This
->IXAudio2SourceVoice_iface
,
740 pDestinationVoice
, pParameters
);
743 static HRESULT WINAPI
XA27SRC_SetVolume(IXAudio27SourceVoice
*iface
, float Volume
,
746 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
747 return IXAudio2SourceVoice_SetVolume(&This
->IXAudio2SourceVoice_iface
, Volume
,
751 static void WINAPI
XA27SRC_GetVolume(IXAudio27SourceVoice
*iface
, float *pVolume
)
753 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
754 IXAudio2SourceVoice_GetVolume(&This
->IXAudio2SourceVoice_iface
, pVolume
);
757 static HRESULT WINAPI
XA27SRC_SetChannelVolumes(IXAudio27SourceVoice
*iface
,
758 UINT32 Channels
, const float *pVolumes
, UINT32 OperationSet
)
760 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
761 return IXAudio2SourceVoice_SetChannelVolumes(&This
->IXAudio2SourceVoice_iface
, Channels
,
762 pVolumes
, OperationSet
);
765 static void WINAPI
XA27SRC_GetChannelVolumes(IXAudio27SourceVoice
*iface
,
766 UINT32 Channels
, float *pVolumes
)
768 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
769 IXAudio2SourceVoice_GetChannelVolumes(&This
->IXAudio2SourceVoice_iface
, Channels
,
773 static HRESULT WINAPI
XA27SRC_SetOutputMatrix(IXAudio27SourceVoice
*iface
,
774 IXAudio2Voice
*pDestinationVoice
, UINT32 SourceChannels
,
775 UINT32 DestinationChannels
, const float *pLevelMatrix
,
778 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
779 return IXAudio2SourceVoice_SetOutputMatrix(&This
->IXAudio2SourceVoice_iface
,
780 pDestinationVoice
, SourceChannels
, DestinationChannels
,
781 pLevelMatrix
, OperationSet
);
784 static void WINAPI
XA27SRC_GetOutputMatrix(IXAudio27SourceVoice
*iface
,
785 IXAudio2Voice
*pDestinationVoice
, UINT32 SourceChannels
,
786 UINT32 DestinationChannels
, float *pLevelMatrix
)
788 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
789 IXAudio2SourceVoice_GetOutputMatrix(&This
->IXAudio2SourceVoice_iface
, pDestinationVoice
,
790 SourceChannels
, DestinationChannels
, pLevelMatrix
);
793 static void WINAPI
XA27SRC_DestroyVoice(IXAudio27SourceVoice
*iface
)
795 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
796 IXAudio2SourceVoice_DestroyVoice(&This
->IXAudio2SourceVoice_iface
);
799 static HRESULT WINAPI
XA27SRC_Start(IXAudio27SourceVoice
*iface
, UINT32 Flags
,
802 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
803 return IXAudio2SourceVoice_Start(&This
->IXAudio2SourceVoice_iface
, Flags
, OperationSet
);
806 static HRESULT WINAPI
XA27SRC_Stop(IXAudio27SourceVoice
*iface
, UINT32 Flags
,
809 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
810 return IXAudio2SourceVoice_Stop(&This
->IXAudio2SourceVoice_iface
, Flags
, OperationSet
);
813 static HRESULT WINAPI
XA27SRC_SubmitSourceBuffer(IXAudio27SourceVoice
*iface
,
814 const XAUDIO2_BUFFER
*pBuffer
, const XAUDIO2_BUFFER_WMA
*pBufferWMA
)
816 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
817 return IXAudio2SourceVoice_SubmitSourceBuffer(&This
->IXAudio2SourceVoice_iface
, pBuffer
,
821 static HRESULT WINAPI
XA27SRC_FlushSourceBuffers(IXAudio27SourceVoice
*iface
)
823 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
824 return IXAudio2SourceVoice_FlushSourceBuffers(&This
->IXAudio2SourceVoice_iface
);
827 static HRESULT WINAPI
XA27SRC_Discontinuity(IXAudio27SourceVoice
*iface
)
829 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
830 return IXAudio2SourceVoice_Discontinuity(&This
->IXAudio2SourceVoice_iface
);
833 static HRESULT WINAPI
XA27SRC_ExitLoop(IXAudio27SourceVoice
*iface
, UINT32 OperationSet
)
835 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
836 return IXAudio2SourceVoice_ExitLoop(&This
->IXAudio2SourceVoice_iface
, OperationSet
);
839 static void WINAPI
XA27SRC_GetState(IXAudio27SourceVoice
*iface
,
840 XAUDIO2_VOICE_STATE
*pVoiceState
)
842 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
843 return IXAudio2SourceVoice_GetState(&This
->IXAudio2SourceVoice_iface
, pVoiceState
, 0);
846 static HRESULT WINAPI
XA27SRC_SetFrequencyRatio(IXAudio27SourceVoice
*iface
,
847 float Ratio
, UINT32 OperationSet
)
849 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
850 return IXAudio2SourceVoice_SetFrequencyRatio(&This
->IXAudio2SourceVoice_iface
, Ratio
, OperationSet
);
853 static void WINAPI
XA27SRC_GetFrequencyRatio(IXAudio27SourceVoice
*iface
, float *pRatio
)
855 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
856 return IXAudio2SourceVoice_GetFrequencyRatio(&This
->IXAudio2SourceVoice_iface
, pRatio
);
859 static HRESULT WINAPI
XA27SRC_SetSourceSampleRate(
860 IXAudio27SourceVoice
*iface
,
861 UINT32 NewSourceSampleRate
)
863 XA2VoiceImpl
*This
= impl_from_IXAudio27SourceVoice(iface
);
864 return IXAudio2SourceVoice_SetSourceSampleRate(&This
->IXAudio2SourceVoice_iface
, NewSourceSampleRate
);
867 const IXAudio27SourceVoiceVtbl XAudio27SourceVoice_Vtbl
= {
868 XA27SRC_GetVoiceDetails
,
869 XA27SRC_SetOutputVoices
,
870 XA27SRC_SetEffectChain
,
871 XA27SRC_EnableEffect
,
872 XA27SRC_DisableEffect
,
873 XA27SRC_GetEffectState
,
874 XA27SRC_SetEffectParameters
,
875 XA27SRC_GetEffectParameters
,
876 XA27SRC_SetFilterParameters
,
877 XA27SRC_GetFilterParameters
,
878 XA27SRC_SetOutputFilterParameters
,
879 XA27SRC_GetOutputFilterParameters
,
882 XA27SRC_SetChannelVolumes
,
883 XA27SRC_GetChannelVolumes
,
884 XA27SRC_SetOutputMatrix
,
885 XA27SRC_GetOutputMatrix
,
886 XA27SRC_DestroyVoice
,
889 XA27SRC_SubmitSourceBuffer
,
890 XA27SRC_FlushSourceBuffers
,
891 XA27SRC_Discontinuity
,
894 XA27SRC_SetFrequencyRatio
,
895 XA27SRC_GetFrequencyRatio
,
896 XA27SRC_SetSourceSampleRate
899 /* END IXAudio2SourceVoice */
902 /* BEGIN IXAudio2SubmixVoice */
904 XA2VoiceImpl
*impl_from_IXAudio20SubmixVoice(IXAudio20SubmixVoice
*iface
)
906 return CONTAINING_RECORD(iface
, XA2VoiceImpl
, IXAudio20SubmixVoice_iface
);
909 static void WINAPI
XA20SUB_GetVoiceDetails(IXAudio20SubmixVoice
*iface
,
910 XAUDIO27_VOICE_DETAILS
*pVoiceDetails
)
912 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
913 XAUDIO2_VOICE_DETAILS details
;
915 IXAudio2SubmixVoice_GetVoiceDetails(&This
->IXAudio2SubmixVoice_iface
, &details
);
917 pVoiceDetails
->CreationFlags
= details
.CreationFlags
;
918 pVoiceDetails
->InputChannels
= details
.InputChannels
;
919 pVoiceDetails
->InputSampleRate
= details
.InputSampleRate
;
922 static HRESULT WINAPI
XA20SUB_SetOutputVoices(IXAudio20SubmixVoice
*iface
,
923 const XAUDIO23_VOICE_SENDS
*pSendList
)
925 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
926 XAUDIO2_VOICE_SENDS sends
, *psends
= NULL
;
929 TRACE("%p, %p\n", This
, pSendList
);
932 sends
.SendCount
= pSendList
->OutputCount
;
933 sends
.pSends
= convert_send_descriptors23(pSendList
);
937 hr
= IXAudio2SubmixVoice_SetOutputVoices(&This
->IXAudio2SubmixVoice_iface
, psends
);
940 HeapFree(GetProcessHeap(), 0, sends
.pSends
);
945 static HRESULT WINAPI
XA20SUB_SetEffectChain(IXAudio20SubmixVoice
*iface
,
946 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
948 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
949 return IXAudio2SubmixVoice_SetEffectChain(&This
->IXAudio2SubmixVoice_iface
, pEffectChain
);
952 static HRESULT WINAPI
XA20SUB_EnableEffect(IXAudio20SubmixVoice
*iface
,
953 UINT32 EffectIndex
, UINT32 OperationSet
)
955 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
956 return IXAudio2SubmixVoice_EnableEffect(&This
->IXAudio2SubmixVoice_iface
,
957 EffectIndex
, OperationSet
);
960 static HRESULT WINAPI
XA20SUB_DisableEffect(IXAudio20SubmixVoice
*iface
,
961 UINT32 EffectIndex
, UINT32 OperationSet
)
963 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
964 return IXAudio2SubmixVoice_DisableEffect(&This
->IXAudio2SubmixVoice_iface
,
965 EffectIndex
, OperationSet
);
968 static void WINAPI
XA20SUB_GetEffectState(IXAudio20SubmixVoice
*iface
,
969 UINT32 EffectIndex
, BOOL
*pEnabled
)
971 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
972 return IXAudio2SubmixVoice_GetEffectState(&This
->IXAudio2SubmixVoice_iface
,
973 EffectIndex
, pEnabled
);
976 static HRESULT WINAPI
XA20SUB_SetEffectParameters(IXAudio20SubmixVoice
*iface
,
977 UINT32 EffectIndex
, const void *pParameters
, UINT32 ParametersByteSize
,
980 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
981 return IXAudio2SubmixVoice_SetEffectParameters(&This
->IXAudio2SubmixVoice_iface
,
982 EffectIndex
, pParameters
, ParametersByteSize
, OperationSet
);
985 static HRESULT WINAPI
XA20SUB_GetEffectParameters(IXAudio20SubmixVoice
*iface
,
986 UINT32 EffectIndex
, void *pParameters
, UINT32 ParametersByteSize
)
988 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
989 return IXAudio2SubmixVoice_GetEffectParameters(&This
->IXAudio2SubmixVoice_iface
,
990 EffectIndex
, pParameters
, ParametersByteSize
);
993 static HRESULT WINAPI
XA20SUB_SetFilterParameters(IXAudio20SubmixVoice
*iface
,
994 const XAUDIO2_FILTER_PARAMETERS
*pParameters
, UINT32 OperationSet
)
996 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
997 return IXAudio2SubmixVoice_SetFilterParameters(&This
->IXAudio2SubmixVoice_iface
,
998 pParameters
, OperationSet
);
1001 static void WINAPI
XA20SUB_GetFilterParameters(IXAudio20SubmixVoice
*iface
,
1002 XAUDIO2_FILTER_PARAMETERS
*pParameters
)
1004 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
1005 return IXAudio2SubmixVoice_GetFilterParameters(&This
->IXAudio2SubmixVoice_iface
, pParameters
);
1008 static HRESULT WINAPI
XA20SUB_SetVolume(IXAudio20SubmixVoice
*iface
,
1009 float Volume
, UINT32 OperationSet
)
1011 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
1012 return IXAudio2SubmixVoice_SetVolume(&This
->IXAudio2SubmixVoice_iface
,
1013 Volume
, OperationSet
);
1016 static void WINAPI
XA20SUB_GetVolume(IXAudio20SubmixVoice
*iface
,
1019 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
1020 return IXAudio2SubmixVoice_GetVolume(&This
->IXAudio2SubmixVoice_iface
, pVolume
);
1023 static HRESULT WINAPI
XA20SUB_SetChannelVolumes(IXAudio20SubmixVoice
*iface
,
1024 UINT32 Channels
, const float *pVolumes
, UINT32 OperationSet
)
1026 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
1027 return IXAudio2SubmixVoice_SetChannelVolumes(&This
->IXAudio2SubmixVoice_iface
,
1028 Channels
, pVolumes
, OperationSet
);
1031 static void WINAPI
XA20SUB_GetChannelVolumes(IXAudio20SubmixVoice
*iface
,
1032 UINT32 Channels
, float *pVolumes
)
1034 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
1035 return IXAudio2SubmixVoice_GetChannelVolumes(&This
->IXAudio2SubmixVoice_iface
,
1036 Channels
, pVolumes
);
1039 static HRESULT WINAPI
XA20SUB_SetOutputMatrix(IXAudio20SubmixVoice
*iface
,
1040 IXAudio2Voice
*pDestinationVoice
, UINT32 SubmixChannels
,
1041 UINT32 DestinationChannels
, const float *pLevelMatrix
,
1042 UINT32 OperationSet
)
1044 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
1045 return IXAudio2SubmixVoice_SetOutputMatrix(&This
->IXAudio2SubmixVoice_iface
,
1046 pDestinationVoice
, SubmixChannels
, DestinationChannels
,
1047 pLevelMatrix
, OperationSet
);
1050 static HRESULT WINAPI
XA20SUB_GetOutputMatrix(IXAudio20SubmixVoice
*iface
,
1051 IXAudio2Voice
*pDestinationVoice
, UINT32 SubmixChannels
,
1052 UINT32 DestinationChannels
, float *pLevelMatrix
)
1054 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
1055 IXAudio2SubmixVoice_GetOutputMatrix(&This
->IXAudio2SubmixVoice_iface
,
1056 pDestinationVoice
, SubmixChannels
, DestinationChannels
,
1061 static void WINAPI
XA20SUB_DestroyVoice(IXAudio20SubmixVoice
*iface
)
1063 XA2VoiceImpl
*This
= impl_from_IXAudio20SubmixVoice(iface
);
1064 return IXAudio2SubmixVoice_DestroyVoice(&This
->IXAudio2SubmixVoice_iface
);
1067 const IXAudio20SubmixVoiceVtbl XAudio20SubmixVoice_Vtbl
= {
1068 XA20SUB_GetVoiceDetails
,
1069 XA20SUB_SetOutputVoices
,
1070 XA20SUB_SetEffectChain
,
1071 XA20SUB_EnableEffect
,
1072 XA20SUB_DisableEffect
,
1073 XA20SUB_GetEffectState
,
1074 XA20SUB_SetEffectParameters
,
1075 XA20SUB_GetEffectParameters
,
1076 XA20SUB_SetFilterParameters
,
1077 XA20SUB_GetFilterParameters
,
1080 XA20SUB_SetChannelVolumes
,
1081 XA20SUB_GetChannelVolumes
,
1082 XA20SUB_SetOutputMatrix
,
1083 XA20SUB_GetOutputMatrix
,
1084 XA20SUB_DestroyVoice
1087 #elif XAUDIO2_VER <= 3
1089 XA2VoiceImpl
*impl_from_IXAudio23SubmixVoice(IXAudio23SubmixVoice
*iface
)
1091 return CONTAINING_RECORD(iface
, XA2VoiceImpl
, IXAudio23SubmixVoice_iface
);
1094 static void WINAPI
XA23SUB_GetVoiceDetails(IXAudio23SubmixVoice
*iface
,
1095 XAUDIO27_VOICE_DETAILS
*pVoiceDetails
)
1097 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1098 XAUDIO2_VOICE_DETAILS details
;
1100 IXAudio2SubmixVoice_GetVoiceDetails(&This
->IXAudio2SubmixVoice_iface
, &details
);
1102 pVoiceDetails
->CreationFlags
= details
.CreationFlags
;
1103 pVoiceDetails
->InputChannels
= details
.InputChannels
;
1104 pVoiceDetails
->InputSampleRate
= details
.InputSampleRate
;
1107 static HRESULT WINAPI
XA23SUB_SetOutputVoices(IXAudio23SubmixVoice
*iface
,
1108 const XAUDIO23_VOICE_SENDS
*pSendList
)
1110 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1111 XAUDIO2_VOICE_SENDS sends
, *psends
= NULL
;
1114 TRACE("%p, %p\n", This
, pSendList
);
1117 sends
.SendCount
= pSendList
->OutputCount
;
1118 sends
.pSends
= convert_send_descriptors23(pSendList
);
1122 hr
= IXAudio2SubmixVoice_SetOutputVoices(&This
->IXAudio2SubmixVoice_iface
, psends
);
1125 HeapFree(GetProcessHeap(), 0, sends
.pSends
);
1130 static HRESULT WINAPI
XA23SUB_SetEffectChain(IXAudio23SubmixVoice
*iface
,
1131 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
1133 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1134 return IXAudio2SubmixVoice_SetEffectChain(&This
->IXAudio2SubmixVoice_iface
, pEffectChain
);
1137 static HRESULT WINAPI
XA23SUB_EnableEffect(IXAudio23SubmixVoice
*iface
,
1138 UINT32 EffectIndex
, UINT32 OperationSet
)
1140 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1141 return IXAudio2SubmixVoice_EnableEffect(&This
->IXAudio2SubmixVoice_iface
,
1142 EffectIndex
, OperationSet
);
1145 static HRESULT WINAPI
XA23SUB_DisableEffect(IXAudio23SubmixVoice
*iface
,
1146 UINT32 EffectIndex
, UINT32 OperationSet
)
1148 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1149 return IXAudio2SubmixVoice_DisableEffect(&This
->IXAudio2SubmixVoice_iface
,
1150 EffectIndex
, OperationSet
);
1153 static void WINAPI
XA23SUB_GetEffectState(IXAudio23SubmixVoice
*iface
,
1154 UINT32 EffectIndex
, BOOL
*pEnabled
)
1156 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1157 return IXAudio2SubmixVoice_GetEffectState(&This
->IXAudio2SubmixVoice_iface
,
1158 EffectIndex
, pEnabled
);
1161 static HRESULT WINAPI
XA23SUB_SetEffectParameters(IXAudio23SubmixVoice
*iface
,
1162 UINT32 EffectIndex
, const void *pParameters
, UINT32 ParametersByteSize
,
1163 UINT32 OperationSet
)
1165 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1166 return IXAudio2SubmixVoice_SetEffectParameters(&This
->IXAudio2SubmixVoice_iface
,
1167 EffectIndex
, pParameters
, ParametersByteSize
, OperationSet
);
1170 static HRESULT WINAPI
XA23SUB_GetEffectParameters(IXAudio23SubmixVoice
*iface
,
1171 UINT32 EffectIndex
, void *pParameters
, UINT32 ParametersByteSize
)
1173 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1174 return IXAudio2SubmixVoice_GetEffectParameters(&This
->IXAudio2SubmixVoice_iface
,
1175 EffectIndex
, pParameters
, ParametersByteSize
);
1178 static HRESULT WINAPI
XA23SUB_SetFilterParameters(IXAudio23SubmixVoice
*iface
,
1179 const XAUDIO2_FILTER_PARAMETERS
*pParameters
, UINT32 OperationSet
)
1181 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1182 return IXAudio2SubmixVoice_SetFilterParameters(&This
->IXAudio2SubmixVoice_iface
,
1183 pParameters
, OperationSet
);
1186 static void WINAPI
XA23SUB_GetFilterParameters(IXAudio23SubmixVoice
*iface
,
1187 XAUDIO2_FILTER_PARAMETERS
*pParameters
)
1189 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1190 return IXAudio2SubmixVoice_GetFilterParameters(&This
->IXAudio2SubmixVoice_iface
, pParameters
);
1193 static HRESULT WINAPI
XA23SUB_SetVolume(IXAudio23SubmixVoice
*iface
,
1194 float Volume
, UINT32 OperationSet
)
1196 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1197 return IXAudio2SubmixVoice_SetVolume(&This
->IXAudio2SubmixVoice_iface
,
1198 Volume
, OperationSet
);
1201 static void WINAPI
XA23SUB_GetVolume(IXAudio23SubmixVoice
*iface
,
1204 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1205 return IXAudio2SubmixVoice_GetVolume(&This
->IXAudio2SubmixVoice_iface
, pVolume
);
1208 static HRESULT WINAPI
XA23SUB_SetChannelVolumes(IXAudio23SubmixVoice
*iface
,
1209 UINT32 Channels
, const float *pVolumes
, UINT32 OperationSet
)
1211 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1212 return IXAudio2SubmixVoice_SetChannelVolumes(&This
->IXAudio2SubmixVoice_iface
,
1213 Channels
, pVolumes
, OperationSet
);
1216 static void WINAPI
XA23SUB_GetChannelVolumes(IXAudio23SubmixVoice
*iface
,
1217 UINT32 Channels
, float *pVolumes
)
1219 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1220 return IXAudio2SubmixVoice_GetChannelVolumes(&This
->IXAudio2SubmixVoice_iface
,
1221 Channels
, pVolumes
);
1224 static HRESULT WINAPI
XA23SUB_SetOutputMatrix(IXAudio23SubmixVoice
*iface
,
1225 IXAudio2Voice
*pDestinationVoice
, UINT32 SubmixChannels
,
1226 UINT32 DestinationChannels
, const float *pLevelMatrix
,
1227 UINT32 OperationSet
)
1229 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1230 return IXAudio2SubmixVoice_SetOutputMatrix(&This
->IXAudio2SubmixVoice_iface
,
1231 pDestinationVoice
, SubmixChannels
, DestinationChannels
,
1232 pLevelMatrix
, OperationSet
);
1235 static void WINAPI
XA23SUB_GetOutputMatrix(IXAudio23SubmixVoice
*iface
,
1236 IXAudio2Voice
*pDestinationVoice
, UINT32 SubmixChannels
,
1237 UINT32 DestinationChannels
, float *pLevelMatrix
)
1239 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1240 return IXAudio2SubmixVoice_GetOutputMatrix(&This
->IXAudio2SubmixVoice_iface
,
1241 pDestinationVoice
, SubmixChannels
, DestinationChannels
,
1245 static void WINAPI
XA23SUB_DestroyVoice(IXAudio23SubmixVoice
*iface
)
1247 XA2VoiceImpl
*This
= impl_from_IXAudio23SubmixVoice(iface
);
1248 return IXAudio2SubmixVoice_DestroyVoice(&This
->IXAudio2SubmixVoice_iface
);
1251 const IXAudio23SubmixVoiceVtbl XAudio23SubmixVoice_Vtbl
= {
1252 XA23SUB_GetVoiceDetails
,
1253 XA23SUB_SetOutputVoices
,
1254 XA23SUB_SetEffectChain
,
1255 XA23SUB_EnableEffect
,
1256 XA23SUB_DisableEffect
,
1257 XA23SUB_GetEffectState
,
1258 XA23SUB_SetEffectParameters
,
1259 XA23SUB_GetEffectParameters
,
1260 XA23SUB_SetFilterParameters
,
1261 XA23SUB_GetFilterParameters
,
1264 XA23SUB_SetChannelVolumes
,
1265 XA23SUB_GetChannelVolumes
,
1266 XA23SUB_SetOutputMatrix
,
1267 XA23SUB_GetOutputMatrix
,
1268 XA23SUB_DestroyVoice
1271 #elif XAUDIO2_VER <= 7
1273 XA2VoiceImpl
*impl_from_IXAudio27SubmixVoice(IXAudio27SubmixVoice
*iface
)
1275 return CONTAINING_RECORD(iface
, XA2VoiceImpl
, IXAudio27SubmixVoice_iface
);
1278 static void WINAPI
XA27SUB_GetVoiceDetails(IXAudio27SubmixVoice
*iface
,
1279 XAUDIO27_VOICE_DETAILS
*pVoiceDetails
)
1281 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1282 XAUDIO2_VOICE_DETAILS details
;
1284 IXAudio2SubmixVoice_GetVoiceDetails(&This
->IXAudio2SubmixVoice_iface
, &details
);
1286 pVoiceDetails
->CreationFlags
= details
.CreationFlags
;
1287 pVoiceDetails
->InputChannels
= details
.InputChannels
;
1288 pVoiceDetails
->InputSampleRate
= details
.InputSampleRate
;
1291 static HRESULT WINAPI
XA27SUB_SetOutputVoices(IXAudio27SubmixVoice
*iface
,
1292 const XAUDIO2_VOICE_SENDS
*pSendList
)
1294 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1295 return IXAudio2SubmixVoice_SetOutputVoices(&This
->IXAudio2SubmixVoice_iface
, pSendList
);
1298 static HRESULT WINAPI
XA27SUB_SetEffectChain(IXAudio27SubmixVoice
*iface
,
1299 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
1301 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1302 return IXAudio2SubmixVoice_SetEffectChain(&This
->IXAudio2SubmixVoice_iface
, pEffectChain
);
1305 static HRESULT WINAPI
XA27SUB_EnableEffect(IXAudio27SubmixVoice
*iface
,
1306 UINT32 EffectIndex
, UINT32 OperationSet
)
1308 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1309 return IXAudio2SubmixVoice_EnableEffect(&This
->IXAudio2SubmixVoice_iface
,
1310 EffectIndex
, OperationSet
);
1313 static HRESULT WINAPI
XA27SUB_DisableEffect(IXAudio27SubmixVoice
*iface
,
1314 UINT32 EffectIndex
, UINT32 OperationSet
)
1316 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1317 return IXAudio2SubmixVoice_DisableEffect(&This
->IXAudio2SubmixVoice_iface
,
1318 EffectIndex
, OperationSet
);
1321 static void WINAPI
XA27SUB_GetEffectState(IXAudio27SubmixVoice
*iface
,
1322 UINT32 EffectIndex
, BOOL
*pEnabled
)
1324 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1325 return IXAudio2SubmixVoice_GetEffectState(&This
->IXAudio2SubmixVoice_iface
,
1326 EffectIndex
, pEnabled
);
1329 static HRESULT WINAPI
XA27SUB_SetEffectParameters(IXAudio27SubmixVoice
*iface
,
1330 UINT32 EffectIndex
, const void *pParameters
, UINT32 ParametersByteSize
,
1331 UINT32 OperationSet
)
1333 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1334 return IXAudio2SubmixVoice_SetEffectParameters(&This
->IXAudio2SubmixVoice_iface
,
1335 EffectIndex
, pParameters
, ParametersByteSize
, OperationSet
);
1338 static HRESULT WINAPI
XA27SUB_GetEffectParameters(IXAudio27SubmixVoice
*iface
,
1339 UINT32 EffectIndex
, void *pParameters
, UINT32 ParametersByteSize
)
1341 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1342 return IXAudio2SubmixVoice_GetEffectParameters(&This
->IXAudio2SubmixVoice_iface
,
1343 EffectIndex
, pParameters
, ParametersByteSize
);
1346 static HRESULT WINAPI
XA27SUB_SetFilterParameters(IXAudio27SubmixVoice
*iface
,
1347 const XAUDIO2_FILTER_PARAMETERS
*pParameters
, UINT32 OperationSet
)
1349 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1350 return IXAudio2SubmixVoice_SetFilterParameters(&This
->IXAudio2SubmixVoice_iface
,
1351 pParameters
, OperationSet
);
1354 static void WINAPI
XA27SUB_GetFilterParameters(IXAudio27SubmixVoice
*iface
,
1355 XAUDIO2_FILTER_PARAMETERS
*pParameters
)
1357 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1358 return IXAudio2SubmixVoice_GetFilterParameters(&This
->IXAudio2SubmixVoice_iface
, pParameters
);
1361 static HRESULT WINAPI
XA27SUB_SetOutputFilterParameters(IXAudio27SubmixVoice
*iface
,
1362 IXAudio2Voice
*pDestinationVoice
,
1363 const XAUDIO2_FILTER_PARAMETERS
*pParameters
, UINT32 OperationSet
)
1365 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1366 return IXAudio2SubmixVoice_SetOutputFilterParameters(&This
->IXAudio2SubmixVoice_iface
,
1367 pDestinationVoice
, pParameters
, OperationSet
);
1370 static void WINAPI
XA27SUB_GetOutputFilterParameters(IXAudio27SubmixVoice
*iface
,
1371 IXAudio2Voice
*pDestinationVoice
,
1372 XAUDIO2_FILTER_PARAMETERS
*pParameters
)
1374 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1375 IXAudio2SubmixVoice_GetOutputFilterParameters(&This
->IXAudio2SubmixVoice_iface
,
1376 pDestinationVoice
, pParameters
);
1379 static HRESULT WINAPI
XA27SUB_SetVolume(IXAudio27SubmixVoice
*iface
,
1380 float Volume
, UINT32 OperationSet
)
1382 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1383 return IXAudio2SubmixVoice_SetVolume(&This
->IXAudio2SubmixVoice_iface
,
1384 Volume
, OperationSet
);
1387 static void WINAPI
XA27SUB_GetVolume(IXAudio27SubmixVoice
*iface
,
1390 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1391 return IXAudio2SubmixVoice_GetVolume(&This
->IXAudio2SubmixVoice_iface
, pVolume
);
1394 static HRESULT WINAPI
XA27SUB_SetChannelVolumes(IXAudio27SubmixVoice
*iface
,
1395 UINT32 Channels
, const float *pVolumes
, UINT32 OperationSet
)
1397 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1398 return IXAudio2SubmixVoice_SetChannelVolumes(&This
->IXAudio2SubmixVoice_iface
,
1399 Channels
, pVolumes
, OperationSet
);
1402 static void WINAPI
XA27SUB_GetChannelVolumes(IXAudio27SubmixVoice
*iface
,
1403 UINT32 Channels
, float *pVolumes
)
1405 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1406 return IXAudio2SubmixVoice_GetChannelVolumes(&This
->IXAudio2SubmixVoice_iface
,
1407 Channels
, pVolumes
);
1410 static HRESULT WINAPI
XA27SUB_SetOutputMatrix(IXAudio27SubmixVoice
*iface
,
1411 IXAudio2Voice
*pDestinationVoice
, UINT32 SubmixChannels
,
1412 UINT32 DestinationChannels
, const float *pLevelMatrix
,
1413 UINT32 OperationSet
)
1415 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1416 return IXAudio2SubmixVoice_SetOutputMatrix(&This
->IXAudio2SubmixVoice_iface
,
1417 pDestinationVoice
, SubmixChannels
, DestinationChannels
,
1418 pLevelMatrix
, OperationSet
);
1421 static void WINAPI
XA27SUB_GetOutputMatrix(IXAudio27SubmixVoice
*iface
,
1422 IXAudio2Voice
*pDestinationVoice
, UINT32 SubmixChannels
,
1423 UINT32 DestinationChannels
, float *pLevelMatrix
)
1425 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1426 return IXAudio2SubmixVoice_GetOutputMatrix(&This
->IXAudio2SubmixVoice_iface
,
1427 pDestinationVoice
, SubmixChannels
, DestinationChannels
,
1431 static void WINAPI
XA27SUB_DestroyVoice(IXAudio27SubmixVoice
*iface
)
1433 XA2VoiceImpl
*This
= impl_from_IXAudio27SubmixVoice(iface
);
1434 return IXAudio2SubmixVoice_DestroyVoice(&This
->IXAudio2SubmixVoice_iface
);
1437 const IXAudio27SubmixVoiceVtbl XAudio27SubmixVoice_Vtbl
= {
1438 XA27SUB_GetVoiceDetails
,
1439 XA27SUB_SetOutputVoices
,
1440 XA27SUB_SetEffectChain
,
1441 XA27SUB_EnableEffect
,
1442 XA27SUB_DisableEffect
,
1443 XA27SUB_GetEffectState
,
1444 XA27SUB_SetEffectParameters
,
1445 XA27SUB_GetEffectParameters
,
1446 XA27SUB_SetFilterParameters
,
1447 XA27SUB_GetFilterParameters
,
1448 XA27SUB_SetOutputFilterParameters
,
1449 XA27SUB_GetOutputFilterParameters
,
1452 XA27SUB_SetChannelVolumes
,
1453 XA27SUB_GetChannelVolumes
,
1454 XA27SUB_SetOutputMatrix
,
1455 XA27SUB_GetOutputMatrix
,
1456 XA27SUB_DestroyVoice
1459 /* END IXAudio2SubmixVoice */
1462 /* BEGIN IXAudio2MasteringVoice */
1463 #if XAUDIO2_VER == 0
1464 XA2VoiceImpl
*impl_from_IXAudio20MasteringVoice(IXAudio20MasteringVoice
*iface
)
1466 return CONTAINING_RECORD(iface
, XA2VoiceImpl
, IXAudio20MasteringVoice_iface
);
1469 static void WINAPI
XA20M_GetVoiceDetails(IXAudio20MasteringVoice
*iface
,
1470 XAUDIO27_VOICE_DETAILS
*pVoiceDetails
)
1472 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1473 XAUDIO2_VOICE_DETAILS details
;
1475 IXAudio2MasteringVoice_GetVoiceDetails(&This
->IXAudio2MasteringVoice_iface
, &details
);
1477 pVoiceDetails
->CreationFlags
= details
.CreationFlags
;
1478 pVoiceDetails
->InputChannels
= details
.InputChannels
;
1479 pVoiceDetails
->InputSampleRate
= details
.InputSampleRate
;
1482 static HRESULT WINAPI
XA20M_SetOutputVoices(IXAudio20MasteringVoice
*iface
,
1483 const XAUDIO23_VOICE_SENDS
*pSendList
)
1485 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1486 XAUDIO2_VOICE_SENDS sends
, *psends
= NULL
;
1489 TRACE("%p, %p\n", This
, pSendList
);
1492 sends
.SendCount
= pSendList
->OutputCount
;
1493 sends
.pSends
= convert_send_descriptors23(pSendList
);
1497 hr
= IXAudio2MasteringVoice_SetOutputVoices(&This
->IXAudio2MasteringVoice_iface
, psends
);
1500 HeapFree(GetProcessHeap(), 0, sends
.pSends
);
1505 static HRESULT WINAPI
XA20M_SetEffectChain(IXAudio20MasteringVoice
*iface
,
1506 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
1508 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1509 return IXAudio2MasteringVoice_SetEffectChain(&This
->IXAudio2MasteringVoice_iface
, pEffectChain
);
1512 static HRESULT WINAPI
XA20M_EnableEffect(IXAudio20MasteringVoice
*iface
,
1513 UINT32 EffectIndex
, UINT32 OperationSet
)
1515 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1516 return IXAudio2MasteringVoice_EnableEffect(&This
->IXAudio2MasteringVoice_iface
,
1517 EffectIndex
, OperationSet
);
1520 static HRESULT WINAPI
XA20M_DisableEffect(IXAudio20MasteringVoice
*iface
,
1521 UINT32 EffectIndex
, UINT32 OperationSet
)
1523 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1524 return IXAudio2MasteringVoice_DisableEffect(&This
->IXAudio2MasteringVoice_iface
,
1525 EffectIndex
, OperationSet
);
1528 static void WINAPI
XA20M_GetEffectState(IXAudio20MasteringVoice
*iface
,
1529 UINT32 EffectIndex
, BOOL
*pEnabled
)
1531 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1532 return IXAudio2MasteringVoice_GetEffectState(&This
->IXAudio2MasteringVoice_iface
,
1533 EffectIndex
, pEnabled
);
1536 static HRESULT WINAPI
XA20M_SetEffectParameters(IXAudio20MasteringVoice
*iface
,
1537 UINT32 EffectIndex
, const void *pParameters
, UINT32 ParametersByteSize
,
1538 UINT32 OperationSet
)
1540 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1541 return IXAudio2MasteringVoice_SetEffectParameters(&This
->IXAudio2MasteringVoice_iface
,
1542 EffectIndex
, pParameters
, ParametersByteSize
, OperationSet
);
1545 static HRESULT WINAPI
XA20M_GetEffectParameters(IXAudio20MasteringVoice
*iface
,
1546 UINT32 EffectIndex
, void *pParameters
, UINT32 ParametersByteSize
)
1548 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1549 return IXAudio2MasteringVoice_GetEffectParameters(&This
->IXAudio2MasteringVoice_iface
,
1550 EffectIndex
, pParameters
, ParametersByteSize
);
1553 static HRESULT WINAPI
XA20M_SetFilterParameters(IXAudio20MasteringVoice
*iface
,
1554 const XAUDIO2_FILTER_PARAMETERS
*pParameters
, UINT32 OperationSet
)
1556 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1557 return IXAudio2MasteringVoice_SetFilterParameters(&This
->IXAudio2MasteringVoice_iface
,
1558 pParameters
, OperationSet
);
1561 static void WINAPI
XA20M_GetFilterParameters(IXAudio20MasteringVoice
*iface
,
1562 XAUDIO2_FILTER_PARAMETERS
*pParameters
)
1564 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1565 return IXAudio2MasteringVoice_GetFilterParameters(&This
->IXAudio2MasteringVoice_iface
, pParameters
);
1568 static HRESULT WINAPI
XA20M_SetVolume(IXAudio20MasteringVoice
*iface
,
1569 float Volume
, UINT32 OperationSet
)
1571 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1572 return IXAudio2MasteringVoice_SetVolume(&This
->IXAudio2MasteringVoice_iface
,
1573 Volume
, OperationSet
);
1576 static void WINAPI
XA20M_GetVolume(IXAudio20MasteringVoice
*iface
,
1579 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1580 return IXAudio2MasteringVoice_GetVolume(&This
->IXAudio2MasteringVoice_iface
, pVolume
);
1583 static HRESULT WINAPI
XA20M_SetChannelVolumes(IXAudio20MasteringVoice
*iface
,
1584 UINT32 Channels
, const float *pVolumes
, UINT32 OperationSet
)
1586 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1587 return IXAudio2MasteringVoice_SetChannelVolumes(&This
->IXAudio2MasteringVoice_iface
,
1588 Channels
, pVolumes
, OperationSet
);
1591 static void WINAPI
XA20M_GetChannelVolumes(IXAudio20MasteringVoice
*iface
,
1592 UINT32 Channels
, float *pVolumes
)
1594 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1595 return IXAudio2MasteringVoice_GetChannelVolumes(&This
->IXAudio2MasteringVoice_iface
,
1596 Channels
, pVolumes
);
1599 static HRESULT WINAPI
XA20M_SetOutputMatrix(IXAudio20MasteringVoice
*iface
,
1600 IXAudio2Voice
*pDestinationVoice
, UINT32 MasteringChannels
,
1601 UINT32 DestinationChannels
, const float *pLevelMatrix
,
1602 UINT32 OperationSet
)
1604 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1605 return IXAudio2MasteringVoice_SetOutputMatrix(&This
->IXAudio2MasteringVoice_iface
,
1606 pDestinationVoice
, MasteringChannels
, DestinationChannels
,
1607 pLevelMatrix
, OperationSet
);
1610 static HRESULT WINAPI
XA20M_GetOutputMatrix(IXAudio20MasteringVoice
*iface
,
1611 IXAudio2Voice
*pDestinationVoice
, UINT32 MasteringChannels
,
1612 UINT32 DestinationChannels
, float *pLevelMatrix
)
1614 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1615 IXAudio2MasteringVoice_GetOutputMatrix(&This
->IXAudio2MasteringVoice_iface
,
1616 pDestinationVoice
, MasteringChannels
, DestinationChannels
,
1621 static void WINAPI
XA20M_DestroyVoice(IXAudio20MasteringVoice
*iface
)
1623 XA2VoiceImpl
*This
= impl_from_IXAudio20MasteringVoice(iface
);
1624 return IXAudio2MasteringVoice_DestroyVoice(&This
->IXAudio2MasteringVoice_iface
);
1627 const IXAudio20MasteringVoiceVtbl XAudio20MasteringVoice_Vtbl
= {
1628 XA20M_GetVoiceDetails
,
1629 XA20M_SetOutputVoices
,
1630 XA20M_SetEffectChain
,
1632 XA20M_DisableEffect
,
1633 XA20M_GetEffectState
,
1634 XA20M_SetEffectParameters
,
1635 XA20M_GetEffectParameters
,
1636 XA20M_SetFilterParameters
,
1637 XA20M_GetFilterParameters
,
1640 XA20M_SetChannelVolumes
,
1641 XA20M_GetChannelVolumes
,
1642 XA20M_SetOutputMatrix
,
1643 XA20M_GetOutputMatrix
,
1647 #elif XAUDIO2_VER <= 3
1649 XA2VoiceImpl
*impl_from_IXAudio23MasteringVoice(IXAudio23MasteringVoice
*iface
)
1651 return CONTAINING_RECORD(iface
, XA2VoiceImpl
, IXAudio23MasteringVoice_iface
);
1654 static void WINAPI
XA23M_GetVoiceDetails(IXAudio23MasteringVoice
*iface
,
1655 XAUDIO27_VOICE_DETAILS
*pVoiceDetails
)
1657 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1658 XAUDIO2_VOICE_DETAILS details
;
1660 IXAudio2MasteringVoice_GetVoiceDetails(&This
->IXAudio2MasteringVoice_iface
, &details
);
1662 pVoiceDetails
->CreationFlags
= details
.CreationFlags
;
1663 pVoiceDetails
->InputChannels
= details
.InputChannels
;
1664 pVoiceDetails
->InputSampleRate
= details
.InputSampleRate
;
1667 static HRESULT WINAPI
XA23M_SetOutputVoices(IXAudio23MasteringVoice
*iface
,
1668 const XAUDIO23_VOICE_SENDS
*pSendList
)
1670 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1671 XAUDIO2_VOICE_SENDS sends
, *psends
= NULL
;
1674 TRACE("%p, %p\n", This
, pSendList
);
1677 sends
.SendCount
= pSendList
->OutputCount
;
1678 sends
.pSends
= convert_send_descriptors23(pSendList
);
1682 hr
= IXAudio2MasteringVoice_SetOutputVoices(&This
->IXAudio2MasteringVoice_iface
, psends
);
1685 HeapFree(GetProcessHeap(), 0, sends
.pSends
);
1690 static HRESULT WINAPI
XA23M_SetEffectChain(IXAudio23MasteringVoice
*iface
,
1691 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
1693 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1694 return IXAudio2MasteringVoice_SetEffectChain(&This
->IXAudio2MasteringVoice_iface
, pEffectChain
);
1697 static HRESULT WINAPI
XA23M_EnableEffect(IXAudio23MasteringVoice
*iface
,
1698 UINT32 EffectIndex
, UINT32 OperationSet
)
1700 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1701 return IXAudio2MasteringVoice_EnableEffect(&This
->IXAudio2MasteringVoice_iface
,
1702 EffectIndex
, OperationSet
);
1705 static HRESULT WINAPI
XA23M_DisableEffect(IXAudio23MasteringVoice
*iface
,
1706 UINT32 EffectIndex
, UINT32 OperationSet
)
1708 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1709 return IXAudio2MasteringVoice_DisableEffect(&This
->IXAudio2MasteringVoice_iface
,
1710 EffectIndex
, OperationSet
);
1713 static void WINAPI
XA23M_GetEffectState(IXAudio23MasteringVoice
*iface
,
1714 UINT32 EffectIndex
, BOOL
*pEnabled
)
1716 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1717 return IXAudio2MasteringVoice_GetEffectState(&This
->IXAudio2MasteringVoice_iface
,
1718 EffectIndex
, pEnabled
);
1721 static HRESULT WINAPI
XA23M_SetEffectParameters(IXAudio23MasteringVoice
*iface
,
1722 UINT32 EffectIndex
, const void *pParameters
, UINT32 ParametersByteSize
,
1723 UINT32 OperationSet
)
1725 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1726 return IXAudio2MasteringVoice_SetEffectParameters(&This
->IXAudio2MasteringVoice_iface
,
1727 EffectIndex
, pParameters
, ParametersByteSize
, OperationSet
);
1730 static HRESULT WINAPI
XA23M_GetEffectParameters(IXAudio23MasteringVoice
*iface
,
1731 UINT32 EffectIndex
, void *pParameters
, UINT32 ParametersByteSize
)
1733 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1734 return IXAudio2MasteringVoice_GetEffectParameters(&This
->IXAudio2MasteringVoice_iface
,
1735 EffectIndex
, pParameters
, ParametersByteSize
);
1738 static HRESULT WINAPI
XA23M_SetFilterParameters(IXAudio23MasteringVoice
*iface
,
1739 const XAUDIO2_FILTER_PARAMETERS
*pParameters
, UINT32 OperationSet
)
1741 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1742 return IXAudio2MasteringVoice_SetFilterParameters(&This
->IXAudio2MasteringVoice_iface
,
1743 pParameters
, OperationSet
);
1746 static void WINAPI
XA23M_GetFilterParameters(IXAudio23MasteringVoice
*iface
,
1747 XAUDIO2_FILTER_PARAMETERS
*pParameters
)
1749 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1750 return IXAudio2MasteringVoice_GetFilterParameters(&This
->IXAudio2MasteringVoice_iface
, pParameters
);
1753 static HRESULT WINAPI
XA23M_SetVolume(IXAudio23MasteringVoice
*iface
,
1754 float Volume
, UINT32 OperationSet
)
1756 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1757 return IXAudio2MasteringVoice_SetVolume(&This
->IXAudio2MasteringVoice_iface
,
1758 Volume
, OperationSet
);
1761 static void WINAPI
XA23M_GetVolume(IXAudio23MasteringVoice
*iface
,
1764 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1765 return IXAudio2MasteringVoice_GetVolume(&This
->IXAudio2MasteringVoice_iface
, pVolume
);
1768 static HRESULT WINAPI
XA23M_SetChannelVolumes(IXAudio23MasteringVoice
*iface
,
1769 UINT32 Channels
, const float *pVolumes
, UINT32 OperationSet
)
1771 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1772 return IXAudio2MasteringVoice_SetChannelVolumes(&This
->IXAudio2MasteringVoice_iface
,
1773 Channels
, pVolumes
, OperationSet
);
1776 static void WINAPI
XA23M_GetChannelVolumes(IXAudio23MasteringVoice
*iface
,
1777 UINT32 Channels
, float *pVolumes
)
1779 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1780 return IXAudio2MasteringVoice_GetChannelVolumes(&This
->IXAudio2MasteringVoice_iface
,
1781 Channels
, pVolumes
);
1784 static HRESULT WINAPI
XA23M_SetOutputMatrix(IXAudio23MasteringVoice
*iface
,
1785 IXAudio2Voice
*pDestinationVoice
, UINT32 MasteringChannels
,
1786 UINT32 DestinationChannels
, const float *pLevelMatrix
,
1787 UINT32 OperationSet
)
1789 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1790 return IXAudio2MasteringVoice_SetOutputMatrix(&This
->IXAudio2MasteringVoice_iface
,
1791 pDestinationVoice
, MasteringChannels
, DestinationChannels
,
1792 pLevelMatrix
, OperationSet
);
1795 static void WINAPI
XA23M_GetOutputMatrix(IXAudio23MasteringVoice
*iface
,
1796 IXAudio2Voice
*pDestinationVoice
, UINT32 MasteringChannels
,
1797 UINT32 DestinationChannels
, float *pLevelMatrix
)
1799 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1800 return IXAudio2MasteringVoice_GetOutputMatrix(&This
->IXAudio2MasteringVoice_iface
,
1801 pDestinationVoice
, MasteringChannels
, DestinationChannels
,
1805 static void WINAPI
XA23M_DestroyVoice(IXAudio23MasteringVoice
*iface
)
1807 XA2VoiceImpl
*This
= impl_from_IXAudio23MasteringVoice(iface
);
1808 return IXAudio2MasteringVoice_DestroyVoice(&This
->IXAudio2MasteringVoice_iface
);
1811 const IXAudio23MasteringVoiceVtbl XAudio23MasteringVoice_Vtbl
= {
1812 XA23M_GetVoiceDetails
,
1813 XA23M_SetOutputVoices
,
1814 XA23M_SetEffectChain
,
1816 XA23M_DisableEffect
,
1817 XA23M_GetEffectState
,
1818 XA23M_SetEffectParameters
,
1819 XA23M_GetEffectParameters
,
1820 XA23M_SetFilterParameters
,
1821 XA23M_GetFilterParameters
,
1824 XA23M_SetChannelVolumes
,
1825 XA23M_GetChannelVolumes
,
1826 XA23M_SetOutputMatrix
,
1827 XA23M_GetOutputMatrix
,
1831 #elif XAUDIO2_VER <= 7
1833 XA2VoiceImpl
*impl_from_IXAudio27MasteringVoice(IXAudio27MasteringVoice
*iface
)
1835 return CONTAINING_RECORD(iface
, XA2VoiceImpl
, IXAudio27MasteringVoice_iface
);
1838 static void WINAPI
XA27M_GetVoiceDetails(IXAudio27MasteringVoice
*iface
,
1839 XAUDIO27_VOICE_DETAILS
*pVoiceDetails
)
1841 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1842 XAUDIO2_VOICE_DETAILS details
;
1844 IXAudio2MasteringVoice_GetVoiceDetails(&This
->IXAudio2MasteringVoice_iface
, &details
);
1846 pVoiceDetails
->CreationFlags
= details
.CreationFlags
;
1847 pVoiceDetails
->InputChannels
= details
.InputChannels
;
1848 pVoiceDetails
->InputSampleRate
= details
.InputSampleRate
;
1851 static HRESULT WINAPI
XA27M_SetOutputVoices(IXAudio27MasteringVoice
*iface
,
1852 const XAUDIO2_VOICE_SENDS
*pSendList
)
1854 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1855 return IXAudio2MasteringVoice_SetOutputVoices(&This
->IXAudio2MasteringVoice_iface
, pSendList
);
1858 static HRESULT WINAPI
XA27M_SetEffectChain(IXAudio27MasteringVoice
*iface
,
1859 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
1861 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1862 return IXAudio2MasteringVoice_SetEffectChain(&This
->IXAudio2MasteringVoice_iface
, pEffectChain
);
1865 static HRESULT WINAPI
XA27M_EnableEffect(IXAudio27MasteringVoice
*iface
,
1866 UINT32 EffectIndex
, UINT32 OperationSet
)
1868 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1869 return IXAudio2MasteringVoice_EnableEffect(&This
->IXAudio2MasteringVoice_iface
,
1870 EffectIndex
, OperationSet
);
1873 static HRESULT WINAPI
XA27M_DisableEffect(IXAudio27MasteringVoice
*iface
,
1874 UINT32 EffectIndex
, UINT32 OperationSet
)
1876 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1877 return IXAudio2MasteringVoice_DisableEffect(&This
->IXAudio2MasteringVoice_iface
,
1878 EffectIndex
, OperationSet
);
1881 static void WINAPI
XA27M_GetEffectState(IXAudio27MasteringVoice
*iface
,
1882 UINT32 EffectIndex
, BOOL
*pEnabled
)
1884 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1885 return IXAudio2MasteringVoice_GetEffectState(&This
->IXAudio2MasteringVoice_iface
,
1886 EffectIndex
, pEnabled
);
1889 static HRESULT WINAPI
XA27M_SetEffectParameters(IXAudio27MasteringVoice
*iface
,
1890 UINT32 EffectIndex
, const void *pParameters
, UINT32 ParametersByteSize
,
1891 UINT32 OperationSet
)
1893 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1894 return IXAudio2MasteringVoice_SetEffectParameters(&This
->IXAudio2MasteringVoice_iface
,
1895 EffectIndex
, pParameters
, ParametersByteSize
, OperationSet
);
1898 static HRESULT WINAPI
XA27M_GetEffectParameters(IXAudio27MasteringVoice
*iface
,
1899 UINT32 EffectIndex
, void *pParameters
, UINT32 ParametersByteSize
)
1901 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1902 return IXAudio2MasteringVoice_GetEffectParameters(&This
->IXAudio2MasteringVoice_iface
,
1903 EffectIndex
, pParameters
, ParametersByteSize
);
1906 static HRESULT WINAPI
XA27M_SetFilterParameters(IXAudio27MasteringVoice
*iface
,
1907 const XAUDIO2_FILTER_PARAMETERS
*pParameters
, UINT32 OperationSet
)
1909 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1910 return IXAudio2MasteringVoice_SetFilterParameters(&This
->IXAudio2MasteringVoice_iface
,
1911 pParameters
, OperationSet
);
1914 static void WINAPI
XA27M_GetFilterParameters(IXAudio27MasteringVoice
*iface
,
1915 XAUDIO2_FILTER_PARAMETERS
*pParameters
)
1917 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1918 return IXAudio2MasteringVoice_GetFilterParameters(&This
->IXAudio2MasteringVoice_iface
, pParameters
);
1921 static HRESULT WINAPI
XA27M_SetOutputFilterParameters(IXAudio27MasteringVoice
*iface
,
1922 IXAudio2Voice
*pDestinationVoice
,
1923 const XAUDIO2_FILTER_PARAMETERS
*pParameters
, UINT32 OperationSet
)
1925 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1926 return IXAudio2MasteringVoice_SetOutputFilterParameters(&This
->IXAudio2MasteringVoice_iface
,
1927 pDestinationVoice
, pParameters
, OperationSet
);
1930 static void WINAPI
XA27M_GetOutputFilterParameters(IXAudio27MasteringVoice
*iface
,
1931 IXAudio2Voice
*pDestinationVoice
,
1932 XAUDIO2_FILTER_PARAMETERS
*pParameters
)
1934 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1935 IXAudio2MasteringVoice_GetOutputFilterParameters(&This
->IXAudio2MasteringVoice_iface
,
1936 pDestinationVoice
, pParameters
);
1939 static HRESULT WINAPI
XA27M_SetVolume(IXAudio27MasteringVoice
*iface
,
1940 float Volume
, UINT32 OperationSet
)
1942 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1943 return IXAudio2MasteringVoice_SetVolume(&This
->IXAudio2MasteringVoice_iface
,
1944 Volume
, OperationSet
);
1947 static void WINAPI
XA27M_GetVolume(IXAudio27MasteringVoice
*iface
,
1950 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1951 return IXAudio2MasteringVoice_GetVolume(&This
->IXAudio2MasteringVoice_iface
, pVolume
);
1954 static HRESULT WINAPI
XA27M_SetChannelVolumes(IXAudio27MasteringVoice
*iface
,
1955 UINT32 Channels
, const float *pVolumes
, UINT32 OperationSet
)
1957 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1958 return IXAudio2MasteringVoice_SetChannelVolumes(&This
->IXAudio2MasteringVoice_iface
,
1959 Channels
, pVolumes
, OperationSet
);
1962 static void WINAPI
XA27M_GetChannelVolumes(IXAudio27MasteringVoice
*iface
,
1963 UINT32 Channels
, float *pVolumes
)
1965 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1966 return IXAudio2MasteringVoice_GetChannelVolumes(&This
->IXAudio2MasteringVoice_iface
,
1967 Channels
, pVolumes
);
1970 static HRESULT WINAPI
XA27M_SetOutputMatrix(IXAudio27MasteringVoice
*iface
,
1971 IXAudio2Voice
*pDestinationVoice
, UINT32 MasteringChannels
,
1972 UINT32 DestinationChannels
, const float *pLevelMatrix
,
1973 UINT32 OperationSet
)
1975 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1976 return IXAudio2MasteringVoice_SetOutputMatrix(&This
->IXAudio2MasteringVoice_iface
,
1977 pDestinationVoice
, MasteringChannels
, DestinationChannels
,
1978 pLevelMatrix
, OperationSet
);
1981 static void WINAPI
XA27M_GetOutputMatrix(IXAudio27MasteringVoice
*iface
,
1982 IXAudio2Voice
*pDestinationVoice
, UINT32 MasteringChannels
,
1983 UINT32 DestinationChannels
, float *pLevelMatrix
)
1985 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1986 return IXAudio2MasteringVoice_GetOutputMatrix(&This
->IXAudio2MasteringVoice_iface
,
1987 pDestinationVoice
, MasteringChannels
, DestinationChannels
,
1991 static void WINAPI
XA27M_DestroyVoice(IXAudio27MasteringVoice
*iface
)
1993 XA2VoiceImpl
*This
= impl_from_IXAudio27MasteringVoice(iface
);
1994 return IXAudio2MasteringVoice_DestroyVoice(&This
->IXAudio2MasteringVoice_iface
);
1997 const IXAudio27MasteringVoiceVtbl XAudio27MasteringVoice_Vtbl
= {
1998 XA27M_GetVoiceDetails
,
1999 XA27M_SetOutputVoices
,
2000 XA27M_SetEffectChain
,
2002 XA27M_DisableEffect
,
2003 XA27M_GetEffectState
,
2004 XA27M_SetEffectParameters
,
2005 XA27M_GetEffectParameters
,
2006 XA27M_SetFilterParameters
,
2007 XA27M_GetFilterParameters
,
2008 XA27M_SetOutputFilterParameters
,
2009 XA27M_GetOutputFilterParameters
,
2012 XA27M_SetChannelVolumes
,
2013 XA27M_GetChannelVolumes
,
2014 XA27M_SetOutputMatrix
,
2015 XA27M_GetOutputMatrix
,
2019 /* END IXAudio2MasteringVoice */
2022 /* BEGIN IXAudio2 */
2023 #if XAUDIO2_VER == 0
2024 static inline IXAudio2Impl
*impl_from_IXAudio20(IXAudio20
*iface
)
2026 return CONTAINING_RECORD(iface
, IXAudio2Impl
, IXAudio20_iface
);
2029 static HRESULT WINAPI
XA20_QueryInterface(IXAudio20
*iface
, REFIID riid
,
2032 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2033 return IXAudio2_QueryInterface(&This
->IXAudio2_iface
, riid
, ppvObject
);
2036 static ULONG WINAPI
XA20_AddRef(IXAudio20
*iface
)
2038 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2039 return IXAudio2_AddRef(&This
->IXAudio2_iface
);
2042 static ULONG WINAPI
XA20_Release(IXAudio20
*iface
)
2044 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2045 return IXAudio2_Release(&This
->IXAudio2_iface
);
2048 static HRESULT WINAPI
XA20_GetDeviceCount(IXAudio20
*iface
, UINT32
*pCount
)
2050 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2051 TRACE("%p, %p\n", This
, pCount
);
2052 return FAudio_GetDeviceCount(This
->faudio
, pCount
);
2055 static HRESULT WINAPI
XA20_GetDeviceDetails(IXAudio20
*iface
, UINT32 index
,
2056 XAUDIO2_DEVICE_DETAILS
*pDeviceDetails
)
2058 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2059 TRACE("%p, %u, %p\n", This
, index
, pDeviceDetails
);
2060 return FAudio_GetDeviceDetails(This
->faudio
, index
, (FAudioDeviceDetails
*)pDeviceDetails
);
2063 static HRESULT WINAPI
XA20_Initialize(IXAudio20
*iface
, UINT32 flags
,
2064 XAUDIO2_PROCESSOR processor
)
2066 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2067 TRACE("(%p)->(0x%x, 0x%x)\n", This
, flags
, processor
);
2068 return xaudio2_initialize(This
, flags
, processor
);
2071 static HRESULT WINAPI
XA20_RegisterForCallbacks(IXAudio20
*iface
,
2072 IXAudio2EngineCallback
*pCallback
)
2074 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2075 return IXAudio2_RegisterForCallbacks(&This
->IXAudio2_iface
, pCallback
);
2078 static void WINAPI
XA20_UnregisterForCallbacks(IXAudio20
*iface
,
2079 IXAudio2EngineCallback
*pCallback
)
2081 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2082 return IXAudio2_UnregisterForCallbacks(&This
->IXAudio2_iface
, pCallback
);
2085 static HRESULT WINAPI
XA20_CreateSourceVoice(IXAudio20
*iface
,
2086 IXAudio2SourceVoice
**ppSourceVoice
, const WAVEFORMATEX
*pSourceFormat
,
2087 UINT32 flags
, float maxFrequencyRatio
,
2088 IXAudio2VoiceCallback
*pCallback
, const XAUDIO23_VOICE_SENDS
*pSendList
,
2089 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
2091 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2092 XAUDIO2_VOICE_SENDS sends
, *psends
= NULL
;
2096 sends
.SendCount
= pSendList
->OutputCount
;
2097 sends
.pSends
= convert_send_descriptors23(pSendList
);
2101 hr
= IXAudio2_CreateSourceVoice(&This
->IXAudio2_iface
, ppSourceVoice
,
2102 pSourceFormat
, flags
, maxFrequencyRatio
, pCallback
, psends
,
2106 HeapFree(GetProcessHeap(), 0, sends
.pSends
);
2111 static HRESULT WINAPI
XA20_CreateSubmixVoice(IXAudio20
*iface
,
2112 IXAudio2SubmixVoice
**ppSubmixVoice
, UINT32 inputChannels
,
2113 UINT32 inputSampleRate
, UINT32 flags
, UINT32 processingStage
,
2114 const XAUDIO23_VOICE_SENDS
*pSendList
,
2115 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
2117 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2118 XAUDIO2_VOICE_SENDS sends
, *psends
= NULL
;
2122 sends
.SendCount
= pSendList
->OutputCount
;
2123 sends
.pSends
= convert_send_descriptors23(pSendList
);
2127 hr
= IXAudio2_CreateSubmixVoice(&This
->IXAudio2_iface
, ppSubmixVoice
,
2128 inputChannels
, inputSampleRate
, flags
, processingStage
, psends
,
2132 HeapFree(GetProcessHeap(), 0, sends
.pSends
);
2137 static HRESULT WINAPI
XA20_CreateMasteringVoice(IXAudio20
*iface
,
2138 IXAudio2MasteringVoice
**ppMasteringVoice
, UINT32 inputChannels
,
2139 UINT32 inputSampleRate
, UINT32 flags
, UINT32 deviceIndex
,
2140 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
2142 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2144 TRACE("(%p)->(%p, %u, %u, 0x%x, %u, %p)\n", This
, ppMasteringVoice
,
2145 inputChannels
, inputSampleRate
, flags
, deviceIndex
,
2148 EnterCriticalSection(&This
->lock
);
2150 /* XAUDIO2_VER == 0 */
2151 *ppMasteringVoice
= (IXAudio2MasteringVoice
*)&This
->mst
.IXAudio20MasteringVoice_iface
;
2153 EnterCriticalSection(&This
->mst
.lock
);
2155 if(This
->mst
.in_use
){
2156 LeaveCriticalSection(&This
->mst
.lock
);
2157 LeaveCriticalSection(&This
->lock
);
2158 return COMPAT_E_INVALID_CALL
;
2161 LeaveCriticalSection(&This
->lock
);
2163 This
->mst
.effect_chain
= wrap_effect_chain(pEffectChain
);
2165 pthread_mutex_lock(&This
->mst
.engine_lock
);
2167 This
->mst
.engine_thread
= CreateThread(NULL
, 0, &engine_thread
, &This
->mst
, 0, NULL
);
2169 pthread_cond_wait(&This
->mst
.engine_done
, &This
->mst
.engine_lock
);
2171 pthread_mutex_unlock(&This
->mst
.engine_lock
);
2173 FAudio_SetEngineProcedureEXT(This
->faudio
, &engine_cb
, &This
->mst
);
2175 FAudio_CreateMasteringVoice(This
->faudio
, &This
->mst
.faudio_voice
, inputChannels
,
2176 inputSampleRate
, flags
, deviceIndex
, This
->mst
.effect_chain
);
2178 This
->mst
.in_use
= TRUE
;
2180 LeaveCriticalSection(&This
->mst
.lock
);
2185 static HRESULT WINAPI
XA20_StartEngine(IXAudio20
*iface
)
2187 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2188 return IXAudio2_StartEngine(&This
->IXAudio2_iface
);
2191 static void WINAPI
XA20_StopEngine(IXAudio20
*iface
)
2193 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2194 return IXAudio2_StopEngine(&This
->IXAudio2_iface
);
2197 static HRESULT WINAPI
XA20_CommitChanges(IXAudio20
*iface
, UINT32 operationSet
)
2199 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2200 return IXAudio2_CommitChanges(&This
->IXAudio2_iface
, operationSet
);
2203 static void WINAPI
XA20_GetPerformanceData(IXAudio20
*iface
,
2204 XAUDIO20_PERFORMANCE_DATA
*pPerfData
)
2206 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2207 XAUDIO2_PERFORMANCE_DATA data
;
2209 IXAudio2_GetPerformanceData(&This
->IXAudio2_iface
, &data
);
2211 pPerfData
->AudioCyclesSinceLastQuery
= data
.AudioCyclesSinceLastQuery
;
2212 pPerfData
->TotalCyclesSinceLastQuery
= data
.TotalCyclesSinceLastQuery
;
2213 pPerfData
->MinimumCyclesPerQuantum
= data
.MinimumCyclesPerQuantum
;
2214 pPerfData
->MaximumCyclesPerQuantum
= data
.MaximumCyclesPerQuantum
;
2215 pPerfData
->MemoryUsageInBytes
= data
.MemoryUsageInBytes
;
2216 pPerfData
->CurrentLatencyInSamples
= data
.CurrentLatencyInSamples
;
2217 pPerfData
->GlitchesSinceLastQuery
= data
.GlitchesSinceEngineStarted
- This
->last_query_glitches
;
2218 This
->last_query_glitches
= data
.GlitchesSinceEngineStarted
;
2219 pPerfData
->ActiveSourceVoiceCount
= data
.ActiveSourceVoiceCount
;
2220 pPerfData
->TotalSourceVoiceCount
= data
.TotalSourceVoiceCount
;
2222 pPerfData
->ActiveSubmixVoiceCount
= data
.ActiveSubmixVoiceCount
;
2223 pPerfData
->TotalSubmixVoiceCount
= data
.ActiveSubmixVoiceCount
;
2225 pPerfData
->ActiveXmaSourceVoices
= data
.ActiveXmaSourceVoices
;
2226 pPerfData
->ActiveXmaStreams
= data
.ActiveXmaStreams
;
2229 static void WINAPI
XA20_SetDebugConfiguration(IXAudio20
*iface
,
2230 const XAUDIO2_DEBUG_CONFIGURATION
*pDebugConfiguration
,
2233 IXAudio2Impl
*This
= impl_from_IXAudio20(iface
);
2234 return IXAudio2_SetDebugConfiguration(&This
->IXAudio2_iface
,
2235 pDebugConfiguration
, pReserved
);
2238 const IXAudio20Vtbl XAudio20_Vtbl
= {
2239 XA20_QueryInterface
,
2242 XA20_GetDeviceCount
,
2243 XA20_GetDeviceDetails
,
2245 XA20_RegisterForCallbacks
,
2246 XA20_UnregisterForCallbacks
,
2247 XA20_CreateSourceVoice
,
2248 XA20_CreateSubmixVoice
,
2249 XA20_CreateMasteringVoice
,
2253 XA20_GetPerformanceData
,
2254 XA20_SetDebugConfiguration
2257 #elif XAUDIO2_VER <= 2
2259 static inline IXAudio2Impl
*impl_from_IXAudio22(IXAudio22
*iface
)
2261 return CONTAINING_RECORD(iface
, IXAudio2Impl
, IXAudio22_iface
);
2264 static HRESULT WINAPI
XA22_QueryInterface(IXAudio22
*iface
, REFIID riid
,
2267 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2268 return IXAudio2_QueryInterface(&This
->IXAudio2_iface
, riid
, ppvObject
);
2271 static ULONG WINAPI
XA22_AddRef(IXAudio22
*iface
)
2273 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2274 return IXAudio2_AddRef(&This
->IXAudio2_iface
);
2277 static ULONG WINAPI
XA22_Release(IXAudio22
*iface
)
2279 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2280 return IXAudio2_Release(&This
->IXAudio2_iface
);
2283 static HRESULT WINAPI
XA22_GetDeviceCount(IXAudio22
*iface
, UINT32
*pCount
)
2285 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2286 TRACE("%p, %p\n", This
, pCount
);
2287 return FAudio_GetDeviceCount(This
->faudio
, pCount
);
2290 static HRESULT WINAPI
XA22_GetDeviceDetails(IXAudio22
*iface
, UINT32 index
,
2291 XAUDIO2_DEVICE_DETAILS
*pDeviceDetails
)
2293 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2294 TRACE("%p, %u, %p\n", This
, index
, pDeviceDetails
);
2295 return FAudio_GetDeviceDetails(This
->faudio
, index
, (FAudioDeviceDetails
*)pDeviceDetails
);
2298 static HRESULT WINAPI
XA22_Initialize(IXAudio22
*iface
, UINT32 flags
,
2299 XAUDIO2_PROCESSOR processor
)
2301 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2302 TRACE("(%p)->(0x%x, 0x%x)\n", This
, flags
, processor
);
2303 return xaudio2_initialize(This
, flags
, processor
);
2306 static HRESULT WINAPI
XA22_RegisterForCallbacks(IXAudio22
*iface
,
2307 IXAudio2EngineCallback
*pCallback
)
2309 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2310 return IXAudio2_RegisterForCallbacks(&This
->IXAudio2_iface
, pCallback
);
2313 static void WINAPI
XA22_UnregisterForCallbacks(IXAudio22
*iface
,
2314 IXAudio2EngineCallback
*pCallback
)
2316 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2317 IXAudio2_UnregisterForCallbacks(&This
->IXAudio2_iface
, pCallback
);
2320 static HRESULT WINAPI
XA22_CreateSourceVoice(IXAudio22
*iface
,
2321 IXAudio2SourceVoice
**ppSourceVoice
, const WAVEFORMATEX
*pSourceFormat
,
2322 UINT32 flags
, float maxFrequencyRatio
,
2323 IXAudio2VoiceCallback
*pCallback
, const XAUDIO23_VOICE_SENDS
*pSendList
,
2324 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
2326 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2327 XAUDIO2_VOICE_SENDS sends
, *psends
= NULL
;
2331 sends
.SendCount
= pSendList
->OutputCount
;
2332 sends
.pSends
= convert_send_descriptors23(pSendList
);
2336 hr
= IXAudio2_CreateSourceVoice(&This
->IXAudio2_iface
, ppSourceVoice
,
2337 pSourceFormat
, flags
, maxFrequencyRatio
, pCallback
, psends
,
2341 HeapFree(GetProcessHeap(), 0, sends
.pSends
);
2346 static HRESULT WINAPI
XA22_CreateSubmixVoice(IXAudio22
*iface
,
2347 IXAudio2SubmixVoice
**ppSubmixVoice
, UINT32 inputChannels
,
2348 UINT32 inputSampleRate
, UINT32 flags
, UINT32 processingStage
,
2349 const XAUDIO23_VOICE_SENDS
*pSendList
,
2350 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
2352 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2353 XAUDIO2_VOICE_SENDS sends
, *psends
= NULL
;
2357 sends
.SendCount
= pSendList
->OutputCount
;
2358 sends
.pSends
= convert_send_descriptors23(pSendList
);
2362 hr
= IXAudio2_CreateSubmixVoice(&This
->IXAudio2_iface
, ppSubmixVoice
,
2363 inputChannels
, inputSampleRate
, flags
, processingStage
, psends
,
2367 HeapFree(GetProcessHeap(), 0, sends
.pSends
);
2372 static HRESULT WINAPI
XA22_CreateMasteringVoice(IXAudio22
*iface
,
2373 IXAudio2MasteringVoice
**ppMasteringVoice
, UINT32 inputChannels
,
2374 UINT32 inputSampleRate
, UINT32 flags
, UINT32 deviceIndex
,
2375 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
2377 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2379 TRACE("(%p)->(%p, %u, %u, 0x%x, %u, %p)\n", This
, ppMasteringVoice
,
2380 inputChannels
, inputSampleRate
, flags
, deviceIndex
,
2383 EnterCriticalSection(&This
->lock
);
2385 /* 1 <= XAUDIO2_VER <= 2 */
2386 *ppMasteringVoice
= (IXAudio2MasteringVoice
*)&This
->mst
.IXAudio23MasteringVoice_iface
;
2388 EnterCriticalSection(&This
->mst
.lock
);
2390 if(This
->mst
.in_use
){
2391 LeaveCriticalSection(&This
->mst
.lock
);
2392 LeaveCriticalSection(&This
->lock
);
2393 return COMPAT_E_INVALID_CALL
;
2396 LeaveCriticalSection(&This
->lock
);
2398 This
->mst
.effect_chain
= wrap_effect_chain(pEffectChain
);
2400 pthread_mutex_lock(&This
->mst
.engine_lock
);
2402 This
->mst
.engine_thread
= CreateThread(NULL
, 0, &engine_thread
, &This
->mst
, 0, NULL
);
2404 pthread_cond_wait(&This
->mst
.engine_done
, &This
->mst
.engine_lock
);
2406 pthread_mutex_unlock(&This
->mst
.engine_lock
);
2408 FAudio_SetEngineProcedureEXT(This
->faudio
, &engine_cb
, &This
->mst
);
2410 FAudio_CreateMasteringVoice(This
->faudio
, &This
->mst
.faudio_voice
, inputChannels
,
2411 inputSampleRate
, flags
, deviceIndex
, This
->mst
.effect_chain
);
2413 This
->mst
.in_use
= TRUE
;
2415 LeaveCriticalSection(&This
->mst
.lock
);
2420 static HRESULT WINAPI
XA22_StartEngine(IXAudio22
*iface
)
2422 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2423 return IXAudio2_StartEngine(&This
->IXAudio2_iface
);
2426 static void WINAPI
XA22_StopEngine(IXAudio22
*iface
)
2428 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2429 return IXAudio2_StopEngine(&This
->IXAudio2_iface
);
2432 static HRESULT WINAPI
XA22_CommitChanges(IXAudio22
*iface
, UINT32 operationSet
)
2434 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2435 return IXAudio2_CommitChanges(&This
->IXAudio2_iface
, operationSet
);
2438 static void WINAPI
XA22_GetPerformanceData(IXAudio22
*iface
,
2439 XAUDIO22_PERFORMANCE_DATA
*pPerfData
)
2441 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2442 XAUDIO2_PERFORMANCE_DATA data
;
2444 IXAudio2_GetPerformanceData(&This
->IXAudio2_iface
, &data
);
2446 pPerfData
->AudioCyclesSinceLastQuery
= data
.AudioCyclesSinceLastQuery
;
2447 pPerfData
->TotalCyclesSinceLastQuery
= data
.TotalCyclesSinceLastQuery
;
2448 pPerfData
->MinimumCyclesPerQuantum
= data
.MinimumCyclesPerQuantum
;
2449 pPerfData
->MaximumCyclesPerQuantum
= data
.MaximumCyclesPerQuantum
;
2450 pPerfData
->MemoryUsageInBytes
= data
.MemoryUsageInBytes
;
2451 pPerfData
->CurrentLatencyInSamples
= data
.CurrentLatencyInSamples
;
2452 pPerfData
->GlitchesSinceEngineStarted
= data
.GlitchesSinceEngineStarted
;
2453 pPerfData
->ActiveSourceVoiceCount
= data
.ActiveSourceVoiceCount
;
2454 pPerfData
->TotalSourceVoiceCount
= data
.TotalSourceVoiceCount
;
2456 pPerfData
->ActiveSubmixVoiceCount
= data
.ActiveSubmixVoiceCount
;
2457 pPerfData
->TotalSubmixVoiceCount
= data
.ActiveSubmixVoiceCount
;
2459 pPerfData
->ActiveXmaSourceVoices
= data
.ActiveXmaSourceVoices
;
2460 pPerfData
->ActiveXmaStreams
= data
.ActiveXmaStreams
;
2463 static void WINAPI
XA22_SetDebugConfiguration(IXAudio22
*iface
,
2464 const XAUDIO2_DEBUG_CONFIGURATION
*pDebugConfiguration
,
2467 IXAudio2Impl
*This
= impl_from_IXAudio22(iface
);
2468 return IXAudio2_SetDebugConfiguration(&This
->IXAudio2_iface
,
2469 pDebugConfiguration
, pReserved
);
2472 const IXAudio22Vtbl XAudio22_Vtbl
= {
2473 XA22_QueryInterface
,
2476 XA22_GetDeviceCount
,
2477 XA22_GetDeviceDetails
,
2479 XA22_RegisterForCallbacks
,
2480 XA22_UnregisterForCallbacks
,
2481 XA22_CreateSourceVoice
,
2482 XA22_CreateSubmixVoice
,
2483 XA22_CreateMasteringVoice
,
2487 XA22_GetPerformanceData
,
2488 XA22_SetDebugConfiguration
2491 #elif XAUDIO2_VER <= 3
2493 static inline IXAudio2Impl
*impl_from_IXAudio23(IXAudio23
*iface
)
2495 return CONTAINING_RECORD(iface
, IXAudio2Impl
, IXAudio23_iface
);
2498 static HRESULT WINAPI
XA23_QueryInterface(IXAudio23
*iface
, REFIID riid
,
2501 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2502 return IXAudio2_QueryInterface(&This
->IXAudio2_iface
, riid
, ppvObject
);
2505 static ULONG WINAPI
XA23_AddRef(IXAudio23
*iface
)
2507 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2508 return IXAudio2_AddRef(&This
->IXAudio2_iface
);
2511 static ULONG WINAPI
XA23_Release(IXAudio23
*iface
)
2513 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2514 return IXAudio2_Release(&This
->IXAudio2_iface
);
2517 static HRESULT WINAPI
XA23_GetDeviceCount(IXAudio23
*iface
, UINT32
*pCount
)
2519 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2520 TRACE("%p, %p\n", This
, pCount
);
2521 return FAudio_GetDeviceCount(This
->faudio
, pCount
);
2524 static HRESULT WINAPI
XA23_GetDeviceDetails(IXAudio23
*iface
, UINT32 index
,
2525 XAUDIO2_DEVICE_DETAILS
*pDeviceDetails
)
2527 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2528 TRACE("%p, %u, %p\n", This
, index
, pDeviceDetails
);
2529 return FAudio_GetDeviceDetails(This
->faudio
, index
, (FAudioDeviceDetails
*)pDeviceDetails
);
2532 static HRESULT WINAPI
XA23_Initialize(IXAudio23
*iface
, UINT32 flags
,
2533 XAUDIO2_PROCESSOR processor
)
2535 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2536 TRACE("(%p)->(0x%x, 0x%x)\n", This
, flags
, processor
);
2537 return xaudio2_initialize(This
, flags
, processor
);
2540 static HRESULT WINAPI
XA23_RegisterForCallbacks(IXAudio23
*iface
,
2541 IXAudio2EngineCallback
*pCallback
)
2543 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2544 return IXAudio2_RegisterForCallbacks(&This
->IXAudio2_iface
, pCallback
);
2547 static void WINAPI
XA23_UnregisterForCallbacks(IXAudio23
*iface
,
2548 IXAudio2EngineCallback
*pCallback
)
2550 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2551 IXAudio2_UnregisterForCallbacks(&This
->IXAudio2_iface
, pCallback
);
2554 static HRESULT WINAPI
XA23_CreateSourceVoice(IXAudio23
*iface
,
2555 IXAudio2SourceVoice
**ppSourceVoice
, const WAVEFORMATEX
*pSourceFormat
,
2556 UINT32 flags
, float maxFrequencyRatio
,
2557 IXAudio2VoiceCallback
*pCallback
, const XAUDIO23_VOICE_SENDS
*pSendList
,
2558 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
2560 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2561 XAUDIO2_VOICE_SENDS sends
, *psends
= NULL
;
2565 sends
.SendCount
= pSendList
->OutputCount
;
2566 sends
.pSends
= convert_send_descriptors23(pSendList
);
2570 hr
= IXAudio2_CreateSourceVoice(&This
->IXAudio2_iface
, ppSourceVoice
,
2571 pSourceFormat
, flags
, maxFrequencyRatio
, pCallback
, psends
,
2575 HeapFree(GetProcessHeap(), 0, sends
.pSends
);
2580 static HRESULT WINAPI
XA23_CreateSubmixVoice(IXAudio23
*iface
,
2581 IXAudio2SubmixVoice
**ppSubmixVoice
, UINT32 inputChannels
,
2582 UINT32 inputSampleRate
, UINT32 flags
, UINT32 processingStage
,
2583 const XAUDIO23_VOICE_SENDS
*pSendList
,
2584 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
2586 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2587 XAUDIO2_VOICE_SENDS sends
, *psends
= NULL
;
2591 sends
.SendCount
= pSendList
->OutputCount
;
2592 sends
.pSends
= convert_send_descriptors23(pSendList
);
2596 hr
= IXAudio2_CreateSubmixVoice(&This
->IXAudio2_iface
, ppSubmixVoice
,
2597 inputChannels
, inputSampleRate
, flags
, processingStage
, psends
,
2601 HeapFree(GetProcessHeap(), 0, sends
.pSends
);
2606 static HRESULT WINAPI
XA23_CreateMasteringVoice(IXAudio23
*iface
,
2607 IXAudio2MasteringVoice
**ppMasteringVoice
, UINT32 inputChannels
,
2608 UINT32 inputSampleRate
, UINT32 flags
, UINT32 deviceIndex
,
2609 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
2611 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2613 TRACE("(%p)->(%p, %u, %u, 0x%x, %u, %p)\n", This
, ppMasteringVoice
,
2614 inputChannels
, inputSampleRate
, flags
, deviceIndex
,
2617 EnterCriticalSection(&This
->lock
);
2619 /* XAUDIO2_VER == 3 */
2620 *ppMasteringVoice
= (IXAudio2MasteringVoice
*)&This
->mst
.IXAudio23MasteringVoice_iface
;
2622 EnterCriticalSection(&This
->mst
.lock
);
2624 if(This
->mst
.in_use
){
2625 LeaveCriticalSection(&This
->mst
.lock
);
2626 LeaveCriticalSection(&This
->lock
);
2627 return COMPAT_E_INVALID_CALL
;
2630 LeaveCriticalSection(&This
->lock
);
2632 This
->mst
.effect_chain
= wrap_effect_chain(pEffectChain
);
2634 pthread_mutex_lock(&This
->mst
.engine_lock
);
2636 This
->mst
.engine_thread
= CreateThread(NULL
, 0, &engine_thread
, &This
->mst
, 0, NULL
);
2638 pthread_cond_wait(&This
->mst
.engine_done
, &This
->mst
.engine_lock
);
2640 pthread_mutex_unlock(&This
->mst
.engine_lock
);
2642 FAudio_SetEngineProcedureEXT(This
->faudio
, &engine_cb
, &This
->mst
);
2644 FAudio_CreateMasteringVoice(This
->faudio
, &This
->mst
.faudio_voice
, inputChannels
,
2645 inputSampleRate
, flags
, deviceIndex
, This
->mst
.effect_chain
);
2647 This
->mst
.in_use
= TRUE
;
2649 LeaveCriticalSection(&This
->mst
.lock
);
2654 static HRESULT WINAPI
XA23_StartEngine(IXAudio23
*iface
)
2656 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2657 return IXAudio2_StartEngine(&This
->IXAudio2_iface
);
2660 static void WINAPI
XA23_StopEngine(IXAudio23
*iface
)
2662 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2663 return IXAudio2_StopEngine(&This
->IXAudio2_iface
);
2666 static HRESULT WINAPI
XA23_CommitChanges(IXAudio23
*iface
, UINT32 operationSet
)
2668 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2669 return IXAudio2_CommitChanges(&This
->IXAudio2_iface
, operationSet
);
2672 static void WINAPI
XA23_GetPerformanceData(IXAudio23
*iface
,
2673 XAUDIO2_PERFORMANCE_DATA
*pPerfData
)
2675 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2676 return IXAudio2_GetPerformanceData(&This
->IXAudio2_iface
, pPerfData
);
2679 static void WINAPI
XA23_SetDebugConfiguration(IXAudio23
*iface
,
2680 const XAUDIO2_DEBUG_CONFIGURATION
*pDebugConfiguration
,
2683 IXAudio2Impl
*This
= impl_from_IXAudio23(iface
);
2684 return IXAudio2_SetDebugConfiguration(&This
->IXAudio2_iface
,
2685 pDebugConfiguration
, pReserved
);
2688 const IXAudio23Vtbl XAudio23_Vtbl
= {
2689 XA23_QueryInterface
,
2692 XA23_GetDeviceCount
,
2693 XA23_GetDeviceDetails
,
2695 XA23_RegisterForCallbacks
,
2696 XA23_UnregisterForCallbacks
,
2697 XA23_CreateSourceVoice
,
2698 XA23_CreateSubmixVoice
,
2699 XA23_CreateMasteringVoice
,
2703 XA23_GetPerformanceData
,
2704 XA23_SetDebugConfiguration
2707 #elif XAUDIO2_VER <= 7
2709 static inline IXAudio2Impl
*impl_from_IXAudio27(IXAudio27
*iface
)
2711 return CONTAINING_RECORD(iface
, IXAudio2Impl
, IXAudio27_iface
);
2714 static HRESULT WINAPI
XA27_QueryInterface(IXAudio27
*iface
, REFIID riid
,
2717 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2718 return IXAudio2_QueryInterface(&This
->IXAudio2_iface
, riid
, ppvObject
);
2721 static ULONG WINAPI
XA27_AddRef(IXAudio27
*iface
)
2723 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2724 return IXAudio2_AddRef(&This
->IXAudio2_iface
);
2727 static ULONG WINAPI
XA27_Release(IXAudio27
*iface
)
2729 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2730 return IXAudio2_Release(&This
->IXAudio2_iface
);
2733 static HRESULT WINAPI
XA27_GetDeviceCount(IXAudio27
*iface
, UINT32
*pCount
)
2735 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2736 TRACE("%p, %p\n", This
, pCount
);
2737 return FAudio_GetDeviceCount(This
->faudio
, pCount
);
2740 static HRESULT WINAPI
XA27_GetDeviceDetails(IXAudio27
*iface
, UINT32 index
,
2741 XAUDIO2_DEVICE_DETAILS
*pDeviceDetails
)
2743 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2744 TRACE("%p, %u, %p\n", This
, index
, pDeviceDetails
);
2745 return FAudio_GetDeviceDetails(This
->faudio
, index
, (FAudioDeviceDetails
*)pDeviceDetails
);
2748 static HRESULT WINAPI
XA27_Initialize(IXAudio27
*iface
, UINT32 flags
,
2749 XAUDIO2_PROCESSOR processor
)
2751 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2752 TRACE("(%p)->(0x%x, 0x%x)\n", This
, flags
, processor
);
2753 return xaudio2_initialize(This
, flags
, processor
);
2756 static HRESULT WINAPI
XA27_RegisterForCallbacks(IXAudio27
*iface
,
2757 IXAudio2EngineCallback
*pCallback
)
2759 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2760 return IXAudio2_RegisterForCallbacks(&This
->IXAudio2_iface
, pCallback
);
2763 static void WINAPI
XA27_UnregisterForCallbacks(IXAudio27
*iface
,
2764 IXAudio2EngineCallback
*pCallback
)
2766 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2767 IXAudio2_UnregisterForCallbacks(&This
->IXAudio2_iface
, pCallback
);
2770 static HRESULT WINAPI
XA27_CreateSourceVoice(IXAudio27
*iface
,
2771 IXAudio2SourceVoice
**ppSourceVoice
, const WAVEFORMATEX
*pSourceFormat
,
2772 UINT32 flags
, float maxFrequencyRatio
,
2773 IXAudio2VoiceCallback
*pCallback
, const XAUDIO2_VOICE_SENDS
*pSendList
,
2774 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
2776 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2777 return IXAudio2_CreateSourceVoice(&This
->IXAudio2_iface
, ppSourceVoice
,
2778 pSourceFormat
, flags
, maxFrequencyRatio
, pCallback
, pSendList
,
2782 static HRESULT WINAPI
XA27_CreateSubmixVoice(IXAudio27
*iface
,
2783 IXAudio2SubmixVoice
**ppSubmixVoice
, UINT32 inputChannels
,
2784 UINT32 inputSampleRate
, UINT32 flags
, UINT32 processingStage
,
2785 const XAUDIO2_VOICE_SENDS
*pSendList
,
2786 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
2788 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2789 return IXAudio2_CreateSubmixVoice(&This
->IXAudio2_iface
, ppSubmixVoice
,
2790 inputChannels
, inputSampleRate
, flags
, processingStage
, pSendList
,
2794 static HRESULT WINAPI
XA27_CreateMasteringVoice(IXAudio27
*iface
,
2795 IXAudio2MasteringVoice
**ppMasteringVoice
, UINT32 inputChannels
,
2796 UINT32 inputSampleRate
, UINT32 flags
, UINT32 deviceIndex
,
2797 const XAUDIO2_EFFECT_CHAIN
*pEffectChain
)
2799 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2801 TRACE("(%p)->(%p, %u, %u, 0x%x, %u, %p)\n", This
, ppMasteringVoice
,
2802 inputChannels
, inputSampleRate
, flags
, deviceIndex
,
2805 EnterCriticalSection(&This
->lock
);
2807 /* 4 <= XAUDIO2_VER <= 7 */
2808 *ppMasteringVoice
= (IXAudio2MasteringVoice
*)&This
->mst
.IXAudio27MasteringVoice_iface
;
2810 EnterCriticalSection(&This
->mst
.lock
);
2812 if(This
->mst
.in_use
){
2813 LeaveCriticalSection(&This
->mst
.lock
);
2814 LeaveCriticalSection(&This
->lock
);
2815 return COMPAT_E_INVALID_CALL
;
2818 LeaveCriticalSection(&This
->lock
);
2820 This
->mst
.effect_chain
= wrap_effect_chain(pEffectChain
);
2822 pthread_mutex_lock(&This
->mst
.engine_lock
);
2824 This
->mst
.engine_thread
= CreateThread(NULL
, 0, &engine_thread
, &This
->mst
, 0, NULL
);
2826 pthread_cond_wait(&This
->mst
.engine_done
, &This
->mst
.engine_lock
);
2828 pthread_mutex_unlock(&This
->mst
.engine_lock
);
2830 FAudio_SetEngineProcedureEXT(This
->faudio
, &engine_cb
, &This
->mst
);
2832 FAudio_CreateMasteringVoice(This
->faudio
, &This
->mst
.faudio_voice
, inputChannels
,
2833 inputSampleRate
, flags
, deviceIndex
, This
->mst
.effect_chain
);
2835 This
->mst
.in_use
= TRUE
;
2837 LeaveCriticalSection(&This
->mst
.lock
);
2842 static HRESULT WINAPI
XA27_StartEngine(IXAudio27
*iface
)
2844 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2845 return IXAudio2_StartEngine(&This
->IXAudio2_iface
);
2848 static void WINAPI
XA27_StopEngine(IXAudio27
*iface
)
2850 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2851 return IXAudio2_StopEngine(&This
->IXAudio2_iface
);
2854 static HRESULT WINAPI
XA27_CommitChanges(IXAudio27
*iface
, UINT32 operationSet
)
2856 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2857 return IXAudio2_CommitChanges(&This
->IXAudio2_iface
, operationSet
);
2860 static void WINAPI
XA27_GetPerformanceData(IXAudio27
*iface
,
2861 XAUDIO2_PERFORMANCE_DATA
*pPerfData
)
2863 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2864 return IXAudio2_GetPerformanceData(&This
->IXAudio2_iface
, pPerfData
);
2867 static void WINAPI
XA27_SetDebugConfiguration(IXAudio27
*iface
,
2868 const XAUDIO2_DEBUG_CONFIGURATION
*pDebugConfiguration
,
2871 IXAudio2Impl
*This
= impl_from_IXAudio27(iface
);
2872 return IXAudio2_SetDebugConfiguration(&This
->IXAudio2_iface
,
2873 pDebugConfiguration
, pReserved
);
2876 const IXAudio27Vtbl XAudio27_Vtbl
= {
2877 XA27_QueryInterface
,
2880 XA27_GetDeviceCount
,
2881 XA27_GetDeviceDetails
,
2883 XA27_RegisterForCallbacks
,
2884 XA27_UnregisterForCallbacks
,
2885 XA27_CreateSourceVoice
,
2886 XA27_CreateSubmixVoice
,
2887 XA27_CreateMasteringVoice
,
2891 XA27_GetPerformanceData
,
2892 XA27_SetDebugConfiguration