From: Zebediah Figura zfigura@codeweavers.com
Instead of including the IDLs directly, define a local IDL that #includes them, with XAUDIO2_VER defined, and include that generated header.
Get rid of compat.c, and use XAUDIO2_VER to modify the code in the other source files.
Build the tests for both xaudio2_7 and xaudio2_8 using PARENTSRC, and use XAUDIO2_VER to select between them. This mirrors the approach taken for d3dcompiler, and makes it easier to test more xaudio2 versions in the future. --- configure | 1 + configure.ac | 1 + dlls/xapofx1_1/Makefile.in | 2 + dlls/xapofx1_2/Makefile.in | 2 + dlls/xapofx1_3/Makefile.in | 2 + dlls/xapofx1_4/Makefile.in | 2 + dlls/xapofx1_5/Makefile.in | 2 + dlls/xaudio2_0/Makefile.in | 1 - dlls/xaudio2_1/Makefile.in | 1 - dlls/xaudio2_2/Makefile.in | 1 - dlls/xaudio2_3/Makefile.in | 1 - dlls/xaudio2_4/Makefile.in | 1 - dlls/xaudio2_5/Makefile.in | 1 - dlls/xaudio2_6/Makefile.in | 1 - dlls/xaudio2_7/Makefile.in | 1 - dlls/xaudio2_7/compat.c | 2853 ----------------------- dlls/xaudio2_7/tests/Makefile.in | 3 + dlls/xaudio2_7/tests/xaudio2.c | 378 ++- dlls/xaudio2_7/tests/xaudio_classes.idl | 24 + dlls/xaudio2_7/xapo.c | 5 +- dlls/xaudio2_7/xaudio_classes.idl | 186 +- dlls/xaudio2_7/xaudio_dll.c | 353 +-- dlls/xaudio2_7/xaudio_private.h | 69 +- dlls/xaudio2_8/Makefile.in | 2 +- dlls/xaudio2_8/tests/Makefile.in | 9 + dlls/xaudio2_9/Makefile.in | 1 - include/xaudio2.idl | 1065 ++------- include/xaudio2fx.idl | 124 +- 28 files changed, 647 insertions(+), 4445 deletions(-) delete mode 100644 dlls/xaudio2_7/compat.c create mode 100644 dlls/xaudio2_7/tests/xaudio_classes.idl create mode 100644 dlls/xaudio2_8/tests/Makefile.in
diff --git a/configure b/configure index 4cab5e67e43..931d3b17d8c 100755 --- a/configure +++ b/configure @@ -22024,6 +22024,7 @@ wine_fn_config_makefile dlls/xaudio2_6 enable_xaudio2_6 wine_fn_config_makefile dlls/xaudio2_7 enable_xaudio2_7 wine_fn_config_makefile dlls/xaudio2_7/tests enable_tests wine_fn_config_makefile dlls/xaudio2_8 enable_xaudio2_8 +wine_fn_config_makefile dlls/xaudio2_8/tests enable_tests wine_fn_config_makefile dlls/xaudio2_9 enable_xaudio2_9 wine_fn_config_makefile dlls/xinput1_1 enable_xinput1_1 wine_fn_config_makefile dlls/xinput1_2 enable_xinput1_2 diff --git a/configure.ac b/configure.ac index 3af0aa5fa98..e3792ecf3dd 100644 --- a/configure.ac +++ b/configure.ac @@ -3261,6 +3261,7 @@ WINE_CONFIG_MAKEFILE(dlls/xaudio2_6) WINE_CONFIG_MAKEFILE(dlls/xaudio2_7) WINE_CONFIG_MAKEFILE(dlls/xaudio2_7/tests) WINE_CONFIG_MAKEFILE(dlls/xaudio2_8) +WINE_CONFIG_MAKEFILE(dlls/xaudio2_8/tests) WINE_CONFIG_MAKEFILE(dlls/xaudio2_9) WINE_CONFIG_MAKEFILE(dlls/xinput1_1) WINE_CONFIG_MAKEFILE(dlls/xinput1_2) diff --git a/dlls/xapofx1_1/Makefile.in b/dlls/xapofx1_1/Makefile.in index 1eb2e2210c0..563bfeaf0cb 100644 --- a/dlls/xapofx1_1/Makefile.in +++ b/dlls/xapofx1_1/Makefile.in @@ -10,3 +10,5 @@ C_SRCS = \ xaudio_allocator.c
RC_SRCS = version.rc + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xapofx1_2/Makefile.in b/dlls/xapofx1_2/Makefile.in index 38db115b39a..f37fcd356ac 100644 --- a/dlls/xapofx1_2/Makefile.in +++ b/dlls/xapofx1_2/Makefile.in @@ -8,3 +8,5 @@ C_SRCS = \ xapo.c \ xapofx.c \ xaudio_allocator.c + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xapofx1_3/Makefile.in b/dlls/xapofx1_3/Makefile.in index 409fc9ad55b..5fb6ea8acad 100644 --- a/dlls/xapofx1_3/Makefile.in +++ b/dlls/xapofx1_3/Makefile.in @@ -10,3 +10,5 @@ C_SRCS = \ xaudio_allocator.c
RC_SRCS = version.rc + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xapofx1_4/Makefile.in b/dlls/xapofx1_4/Makefile.in index 63eccff64b0..3b29169a321 100644 --- a/dlls/xapofx1_4/Makefile.in +++ b/dlls/xapofx1_4/Makefile.in @@ -8,3 +8,5 @@ C_SRCS = \ xapo.c \ xapofx.c \ xaudio_allocator.c + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xapofx1_5/Makefile.in b/dlls/xapofx1_5/Makefile.in index fc692d781db..71937520a68 100644 --- a/dlls/xapofx1_5/Makefile.in +++ b/dlls/xapofx1_5/Makefile.in @@ -8,3 +8,5 @@ C_SRCS = \ xapo.c \ xapofx.c \ xaudio_allocator.c + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xaudio2_0/Makefile.in b/dlls/xaudio2_0/Makefile.in index 860e03e716f..49340bb90ba 100644 --- a/dlls/xaudio2_0/Makefile.in +++ b/dlls/xaudio2_0/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_1/Makefile.in b/dlls/xaudio2_1/Makefile.in index fa942761308..38a157a433f 100644 --- a/dlls/xaudio2_1/Makefile.in +++ b/dlls/xaudio2_1/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_2/Makefile.in b/dlls/xaudio2_2/Makefile.in index 26eee0a6f31..9d0fd75a2e0 100644 --- a/dlls/xaudio2_2/Makefile.in +++ b/dlls/xaudio2_2/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_3/Makefile.in b/dlls/xaudio2_3/Makefile.in index f6c555a9a3b..f4ef0d4f2f5 100644 --- a/dlls/xaudio2_3/Makefile.in +++ b/dlls/xaudio2_3/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_4/Makefile.in b/dlls/xaudio2_4/Makefile.in index 33bd0c155db..0b4f2a81a9f 100644 --- a/dlls/xaudio2_4/Makefile.in +++ b/dlls/xaudio2_4/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_5/Makefile.in b/dlls/xaudio2_5/Makefile.in index c4035aeb13f..6d4c5bdb3aa 100644 --- a/dlls/xaudio2_5/Makefile.in +++ b/dlls/xaudio2_5/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_6/Makefile.in b/dlls/xaudio2_6/Makefile.in index dbe2ae7829f..568f39ad9bb 100644 --- a/dlls/xaudio2_6/Makefile.in +++ b/dlls/xaudio2_6/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ xapo.c \ xaudio_allocator.c \ xaudio_dll.c diff --git a/dlls/xaudio2_7/Makefile.in b/dlls/xaudio2_7/Makefile.in index ef3987b693e..40f81d76d36 100644 --- a/dlls/xaudio2_7/Makefile.in +++ b/dlls/xaudio2_7/Makefile.in @@ -4,7 +4,6 @@ IMPORTS = $(FAUDIO_PE_LIBS) advapi32 ole32 user32 uuid EXTRAINCL = $(FAUDIO_PE_CFLAGS)
C_SRCS = \ - compat.c \ x3daudio.c \ xapo.c \ xapofx.c \ diff --git a/dlls/xaudio2_7/compat.c b/dlls/xaudio2_7/compat.c deleted file mode 100644 index 5bda1fa97f9..00000000000 --- a/dlls/xaudio2_7/compat.c +++ /dev/null @@ -1,2853 +0,0 @@ -/* - * Copyright (c) 2015 Andrew Eikum for CodeWeavers - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - * - *************** - * - * Some versions of XAudio2 add or remove functions to the COM vtables, or - * incompatibly change structures. This file provides implementations of the - * older XAudio2 versions onto the new XAudio2 APIs. - * - * Below is a list of significant changes to the main XAudio2 interfaces and - * API. There may be further changes to effects and other parts that Wine - * doesn't currently implement. - * - * 2.0 - * Initial version - * - * 2.1 - * Change CLSID_XAudio2 - * Re-order Error codes - * Change XAUDIO2_LOOP_INFINITE - * Change struct XAUDIO2_PERFORMANCE_DATA - * Change IXAudio2Voice::GetOutputMatrix return value to void - * Add parameter to IXAudio2VoiceCallback::OnVoiceProcessingPassStart - * Change struct XAPO_REGISTRATION_PROPERTIES. CAREFUL when using! Not all - * implementations of IXAPO are Wine implementations. - * - * 2.2 - * Change CLSID_XAudio2 - * No ABI break - * - * 2.3 - * Change CLSID_XAudio2 - * ABI break: - * Change struct XAUDIO2_PERFORMANCE_DATA - * - * 2.4 - * Change CLSID_XAudio2 - * ABI break: - * Add IXAudio2Voice::SetOutputFilterParameters - * Add IXAudio2Voice::GetOutputFilterParameters - * Add IXAudio2SourceVoice::SetSourceSampleRate - * Change struct XAUDIO2_VOICE_SENDS - * - * 2.5 - * Change CLSID_XAudio2 - * No ABI break - * - * 2.6 - * Change CLSID_XAudio2 - * No ABI break - * - * 2.7 - * Change CLSID_XAudio2 - * No ABI break - * - * 2.8 - * Remove CLSID_XAudio2 - * Change IID_IXAudio2 - * Add xaudio2_8.XAudio2Create - * ABI break: - * Remove IXAudio2::GetDeviceCount - * Remove IXAudio2::GetDeviceDetails - * Remove IXAudio2::Initialize - * Change parameter of IXAudio2::CreateMasteringVoice - * Add Flags parameter to IXAudio2SourceVoice::GetState - * Add IXAudio2MasteringVoice::GetChannelMask - * Add DisableLateField member to XAUDIO2FX_REVERB_PARAMETERS - * Add ActiveFlags member to XAUDIO2_VOICE_DETAILS - * - * 2.9 - * Change IID_IXAudio2 - * New flags: XAUDIO2_STOP_ENGINE_WHEN_IDLE, XAUDIO2_1024_QUANTUM, - * XAUDIO2_NO_VIRTUAL_AUDIO_CLIENT - * ABI break: - * Add SideDelay member to XAUDIO2FX_REVERB_PARAMETERS - */ - -#define NONAMELESSUNION -#define NONAMELESSSTRUCT -#define COBJMACROS - -#include <stdarg.h> - -#include "xaudio_private.h" - -#include "wine/debug.h" - -#if XAUDIO2_VER <= 7 -WINE_DEFAULT_DEBUG_CHANNEL(xaudio2); -#endif - -#if XAUDIO2_VER <= 3 -static XAUDIO2_SEND_DESCRIPTOR *convert_send_descriptors23(const XAUDIO23_VOICE_SENDS *sends) -{ - XAUDIO2_SEND_DESCRIPTOR *ret; - DWORD i; - - ret = HeapAlloc(GetProcessHeap(), 0, sends->OutputCount * sizeof(XAUDIO2_SEND_DESCRIPTOR)); - - for(i = 0; i < sends->OutputCount; ++i){ - ret[i].Flags = 0; - ret[i].pOutputVoice = sends->pOutputVoices[i]; - } - - return ret; -} -#endif - -/* BEGIN IXAudio2SourceVoice */ -#if XAUDIO2_VER == 0 -XA2VoiceImpl *impl_from_IXAudio20SourceVoice(IXAudio20SourceVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio20SourceVoice_iface); -} - -static void WINAPI XA20SRC_GetVoiceDetails(IXAudio20SourceVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2SourceVoice_GetVoiceDetails(&This->IXAudio2SourceVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA20SRC_SetOutputVoices(IXAudio20SourceVoice *iface, - const XAUDIO23_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - TRACE("%p, %p\n", This, pSendList); - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2SourceVoice_SetOutputVoices(&This->IXAudio2SourceVoice_iface, psends); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA20SRC_SetEffectChain(IXAudio20SourceVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetEffectChain(&This->IXAudio2SourceVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA20SRC_EnableEffect(IXAudio20SourceVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_EnableEffect(&This->IXAudio2SourceVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA20SRC_DisableEffect(IXAudio20SourceVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_DisableEffect(&This->IXAudio2SourceVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA20SRC_GetEffectState(IXAudio20SourceVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetEffectState(&This->IXAudio2SourceVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA20SRC_SetEffectParameters(IXAudio20SourceVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetEffectParameters(&This->IXAudio2SourceVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA20SRC_GetEffectParameters(IXAudio20SourceVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetEffectParameters(&This->IXAudio2SourceVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA20SRC_SetFilterParameters(IXAudio20SourceVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetFilterParameters(&This->IXAudio2SourceVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA20SRC_GetFilterParameters(IXAudio20SourceVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetFilterParameters(&This->IXAudio2SourceVoice_iface, pParameters); -} - -static HRESULT WINAPI XA20SRC_SetVolume(IXAudio20SourceVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetVolume(&This->IXAudio2SourceVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA20SRC_GetVolume(IXAudio20SourceVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetVolume(&This->IXAudio2SourceVoice_iface, pVolume); -} - -static HRESULT WINAPI XA20SRC_SetChannelVolumes(IXAudio20SourceVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetChannelVolumes(&This->IXAudio2SourceVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA20SRC_GetChannelVolumes(IXAudio20SourceVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetChannelVolumes(&This->IXAudio2SourceVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA20SRC_SetOutputMatrix(IXAudio20SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetOutputMatrix(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, SourceChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static HRESULT WINAPI XA20SRC_GetOutputMatrix(IXAudio20SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - IXAudio2SourceVoice_GetOutputMatrix(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, SourceChannels, DestinationChannels, - pLevelMatrix); - return S_OK; -} - -static void WINAPI XA20SRC_DestroyVoice(IXAudio20SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_DestroyVoice(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA20SRC_Start(IXAudio20SourceVoice *iface, UINT32 Flags, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_Start(&This->IXAudio2SourceVoice_iface, Flags, OperationSet); -} - -static HRESULT WINAPI XA20SRC_Stop(IXAudio20SourceVoice *iface, UINT32 Flags, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_Stop(&This->IXAudio2SourceVoice_iface, Flags, OperationSet); -} - -static HRESULT WINAPI XA20SRC_SubmitSourceBuffer(IXAudio20SourceVoice *iface, - const XAUDIO2_BUFFER *pBuffer, const XAUDIO2_BUFFER_WMA *pBufferWMA) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SubmitSourceBuffer(&This->IXAudio2SourceVoice_iface, - pBuffer, pBufferWMA); -} - -static HRESULT WINAPI XA20SRC_FlushSourceBuffers(IXAudio20SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_FlushSourceBuffers(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA20SRC_Discontinuity(IXAudio20SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_Discontinuity(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA20SRC_ExitLoop(IXAudio20SourceVoice *iface, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_ExitLoop(&This->IXAudio2SourceVoice_iface, OperationSet); -} - -static void WINAPI XA20SRC_GetState(IXAudio20SourceVoice *iface, - XAUDIO2_VOICE_STATE *pVoiceState) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetState(&This->IXAudio2SourceVoice_iface, pVoiceState, 0); -} - -static HRESULT WINAPI XA20SRC_SetFrequencyRatio(IXAudio20SourceVoice *iface, - float Ratio, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_SetFrequencyRatio(&This->IXAudio2SourceVoice_iface, - Ratio, OperationSet); -} - -static void WINAPI XA20SRC_GetFrequencyRatio(IXAudio20SourceVoice *iface, - float *pRatio) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SourceVoice(iface); - return IXAudio2SourceVoice_GetFrequencyRatio(&This->IXAudio2SourceVoice_iface, pRatio); -} - -const IXAudio20SourceVoiceVtbl XAudio20SourceVoice_Vtbl = { - XA20SRC_GetVoiceDetails, - XA20SRC_SetOutputVoices, - XA20SRC_SetEffectChain, - XA20SRC_EnableEffect, - XA20SRC_DisableEffect, - XA20SRC_GetEffectState, - XA20SRC_SetEffectParameters, - XA20SRC_GetEffectParameters, - XA20SRC_SetFilterParameters, - XA20SRC_GetFilterParameters, - XA20SRC_SetVolume, - XA20SRC_GetVolume, - XA20SRC_SetChannelVolumes, - XA20SRC_GetChannelVolumes, - XA20SRC_SetOutputMatrix, - XA20SRC_GetOutputMatrix, - XA20SRC_DestroyVoice, - XA20SRC_Start, - XA20SRC_Stop, - XA20SRC_SubmitSourceBuffer, - XA20SRC_FlushSourceBuffers, - XA20SRC_Discontinuity, - XA20SRC_ExitLoop, - XA20SRC_GetState, - XA20SRC_SetFrequencyRatio, - XA20SRC_GetFrequencyRatio, -}; - -#elif XAUDIO2_VER <= 3 - -XA2VoiceImpl *impl_from_IXAudio23SourceVoice(IXAudio23SourceVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio23SourceVoice_iface); -} - -static void WINAPI XA23SRC_GetVoiceDetails(IXAudio23SourceVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2SourceVoice_GetVoiceDetails(&This->IXAudio2SourceVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA23SRC_SetOutputVoices(IXAudio23SourceVoice *iface, - const XAUDIO23_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - TRACE("%p, %p\n", This, pSendList); - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2SourceVoice_SetOutputVoices(&This->IXAudio2SourceVoice_iface, psends); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA23SRC_SetEffectChain(IXAudio23SourceVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetEffectChain(&This->IXAudio2SourceVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA23SRC_EnableEffect(IXAudio23SourceVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_EnableEffect(&This->IXAudio2SourceVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA23SRC_DisableEffect(IXAudio23SourceVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_DisableEffect(&This->IXAudio2SourceVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA23SRC_GetEffectState(IXAudio23SourceVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetEffectState(&This->IXAudio2SourceVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA23SRC_SetEffectParameters(IXAudio23SourceVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetEffectParameters(&This->IXAudio2SourceVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA23SRC_GetEffectParameters(IXAudio23SourceVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetEffectParameters(&This->IXAudio2SourceVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA23SRC_SetFilterParameters(IXAudio23SourceVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetFilterParameters(&This->IXAudio2SourceVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA23SRC_GetFilterParameters(IXAudio23SourceVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetFilterParameters(&This->IXAudio2SourceVoice_iface, pParameters); -} - -static HRESULT WINAPI XA23SRC_SetVolume(IXAudio23SourceVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetVolume(&This->IXAudio2SourceVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA23SRC_GetVolume(IXAudio23SourceVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetVolume(&This->IXAudio2SourceVoice_iface, pVolume); -} - -static HRESULT WINAPI XA23SRC_SetChannelVolumes(IXAudio23SourceVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetChannelVolumes(&This->IXAudio2SourceVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA23SRC_GetChannelVolumes(IXAudio23SourceVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetChannelVolumes(&This->IXAudio2SourceVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA23SRC_SetOutputMatrix(IXAudio23SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetOutputMatrix(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, SourceChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static void WINAPI XA23SRC_GetOutputMatrix(IXAudio23SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetOutputMatrix(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, SourceChannels, DestinationChannels, - pLevelMatrix); -} - -static void WINAPI XA23SRC_DestroyVoice(IXAudio23SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_DestroyVoice(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA23SRC_Start(IXAudio23SourceVoice *iface, UINT32 Flags, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_Start(&This->IXAudio2SourceVoice_iface, Flags, OperationSet); -} - -static HRESULT WINAPI XA23SRC_Stop(IXAudio23SourceVoice *iface, UINT32 Flags, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_Stop(&This->IXAudio2SourceVoice_iface, Flags, OperationSet); -} - -static HRESULT WINAPI XA23SRC_SubmitSourceBuffer(IXAudio23SourceVoice *iface, - const XAUDIO2_BUFFER *pBuffer, const XAUDIO2_BUFFER_WMA *pBufferWMA) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SubmitSourceBuffer(&This->IXAudio2SourceVoice_iface, - pBuffer, pBufferWMA); -} - -static HRESULT WINAPI XA23SRC_FlushSourceBuffers(IXAudio23SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_FlushSourceBuffers(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA23SRC_Discontinuity(IXAudio23SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_Discontinuity(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA23SRC_ExitLoop(IXAudio23SourceVoice *iface, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_ExitLoop(&This->IXAudio2SourceVoice_iface, OperationSet); -} - -static void WINAPI XA23SRC_GetState(IXAudio23SourceVoice *iface, - XAUDIO2_VOICE_STATE *pVoiceState) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetState(&This->IXAudio2SourceVoice_iface, pVoiceState, 0); -} - -static HRESULT WINAPI XA23SRC_SetFrequencyRatio(IXAudio23SourceVoice *iface, - float Ratio, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_SetFrequencyRatio(&This->IXAudio2SourceVoice_iface, - Ratio, OperationSet); -} - -static void WINAPI XA23SRC_GetFrequencyRatio(IXAudio23SourceVoice *iface, - float *pRatio) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SourceVoice(iface); - return IXAudio2SourceVoice_GetFrequencyRatio(&This->IXAudio2SourceVoice_iface, pRatio); -} - -const IXAudio23SourceVoiceVtbl XAudio23SourceVoice_Vtbl = { - XA23SRC_GetVoiceDetails, - XA23SRC_SetOutputVoices, - XA23SRC_SetEffectChain, - XA23SRC_EnableEffect, - XA23SRC_DisableEffect, - XA23SRC_GetEffectState, - XA23SRC_SetEffectParameters, - XA23SRC_GetEffectParameters, - XA23SRC_SetFilterParameters, - XA23SRC_GetFilterParameters, - XA23SRC_SetVolume, - XA23SRC_GetVolume, - XA23SRC_SetChannelVolumes, - XA23SRC_GetChannelVolumes, - XA23SRC_SetOutputMatrix, - XA23SRC_GetOutputMatrix, - XA23SRC_DestroyVoice, - XA23SRC_Start, - XA23SRC_Stop, - XA23SRC_SubmitSourceBuffer, - XA23SRC_FlushSourceBuffers, - XA23SRC_Discontinuity, - XA23SRC_ExitLoop, - XA23SRC_GetState, - XA23SRC_SetFrequencyRatio, - XA23SRC_GetFrequencyRatio, -}; - -#elif XAUDIO2_VER <= 7 - -XA2VoiceImpl *impl_from_IXAudio27SourceVoice(IXAudio27SourceVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio27SourceVoice_iface); -} - -static void WINAPI XA27SRC_GetVoiceDetails(IXAudio27SourceVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2SourceVoice_GetVoiceDetails(&This->IXAudio2SourceVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA27SRC_SetOutputVoices(IXAudio27SourceVoice *iface, - const XAUDIO2_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetOutputVoices(&This->IXAudio2SourceVoice_iface, pSendList); -} - -static HRESULT WINAPI XA27SRC_SetEffectChain(IXAudio27SourceVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetEffectChain(&This->IXAudio2SourceVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA27SRC_EnableEffect(IXAudio27SourceVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_EnableEffect(&This->IXAudio2SourceVoice_iface, EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA27SRC_DisableEffect(IXAudio27SourceVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_DisableEffect(&This->IXAudio2SourceVoice_iface, EffectIndex, OperationSet); -} - -static void WINAPI XA27SRC_GetEffectState(IXAudio27SourceVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_GetEffectState(&This->IXAudio2SourceVoice_iface, EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA27SRC_SetEffectParameters(IXAudio27SourceVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetEffectParameters(&This->IXAudio2SourceVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA27SRC_GetEffectParameters(IXAudio27SourceVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_GetEffectParameters(&This->IXAudio2SourceVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA27SRC_SetFilterParameters(IXAudio27SourceVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetFilterParameters(&This->IXAudio2SourceVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA27SRC_GetFilterParameters(IXAudio27SourceVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_GetFilterParameters(&This->IXAudio2SourceVoice_iface, pParameters); -} - -static HRESULT WINAPI XA27SRC_SetOutputFilterParameters(IXAudio27SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetOutputFilterParameters(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, pParameters, OperationSet); -} - -static void WINAPI XA27SRC_GetOutputFilterParameters(IXAudio27SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_GetOutputFilterParameters(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, pParameters); -} - -static HRESULT WINAPI XA27SRC_SetVolume(IXAudio27SourceVoice *iface, float Volume, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetVolume(&This->IXAudio2SourceVoice_iface, Volume, - OperationSet); -} - -static void WINAPI XA27SRC_GetVolume(IXAudio27SourceVoice *iface, float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_GetVolume(&This->IXAudio2SourceVoice_iface, pVolume); -} - -static HRESULT WINAPI XA27SRC_SetChannelVolumes(IXAudio27SourceVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetChannelVolumes(&This->IXAudio2SourceVoice_iface, Channels, - pVolumes, OperationSet); -} - -static void WINAPI XA27SRC_GetChannelVolumes(IXAudio27SourceVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_GetChannelVolumes(&This->IXAudio2SourceVoice_iface, Channels, - pVolumes); -} - -static HRESULT WINAPI XA27SRC_SetOutputMatrix(IXAudio27SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetOutputMatrix(&This->IXAudio2SourceVoice_iface, - pDestinationVoice, SourceChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static void WINAPI XA27SRC_GetOutputMatrix(IXAudio27SourceVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_GetOutputMatrix(&This->IXAudio2SourceVoice_iface, pDestinationVoice, - SourceChannels, DestinationChannels, pLevelMatrix); -} - -static void WINAPI XA27SRC_DestroyVoice(IXAudio27SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - IXAudio2SourceVoice_DestroyVoice(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA27SRC_Start(IXAudio27SourceVoice *iface, UINT32 Flags, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_Start(&This->IXAudio2SourceVoice_iface, Flags, OperationSet); -} - -static HRESULT WINAPI XA27SRC_Stop(IXAudio27SourceVoice *iface, UINT32 Flags, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_Stop(&This->IXAudio2SourceVoice_iface, Flags, OperationSet); -} - -static HRESULT WINAPI XA27SRC_SubmitSourceBuffer(IXAudio27SourceVoice *iface, - const XAUDIO2_BUFFER *pBuffer, const XAUDIO2_BUFFER_WMA *pBufferWMA) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SubmitSourceBuffer(&This->IXAudio2SourceVoice_iface, pBuffer, - pBufferWMA); -} - -static HRESULT WINAPI XA27SRC_FlushSourceBuffers(IXAudio27SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_FlushSourceBuffers(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA27SRC_Discontinuity(IXAudio27SourceVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_Discontinuity(&This->IXAudio2SourceVoice_iface); -} - -static HRESULT WINAPI XA27SRC_ExitLoop(IXAudio27SourceVoice *iface, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_ExitLoop(&This->IXAudio2SourceVoice_iface, OperationSet); -} - -static void WINAPI XA27SRC_GetState(IXAudio27SourceVoice *iface, - XAUDIO2_VOICE_STATE *pVoiceState) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_GetState(&This->IXAudio2SourceVoice_iface, pVoiceState, 0); -} - -static HRESULT WINAPI XA27SRC_SetFrequencyRatio(IXAudio27SourceVoice *iface, - float Ratio, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetFrequencyRatio(&This->IXAudio2SourceVoice_iface, Ratio, OperationSet); -} - -static void WINAPI XA27SRC_GetFrequencyRatio(IXAudio27SourceVoice *iface, float *pRatio) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_GetFrequencyRatio(&This->IXAudio2SourceVoice_iface, pRatio); -} - -static HRESULT WINAPI XA27SRC_SetSourceSampleRate( - IXAudio27SourceVoice *iface, - UINT32 NewSourceSampleRate) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SourceVoice(iface); - return IXAudio2SourceVoice_SetSourceSampleRate(&This->IXAudio2SourceVoice_iface, NewSourceSampleRate); -} - -const IXAudio27SourceVoiceVtbl XAudio27SourceVoice_Vtbl = { - XA27SRC_GetVoiceDetails, - XA27SRC_SetOutputVoices, - XA27SRC_SetEffectChain, - XA27SRC_EnableEffect, - XA27SRC_DisableEffect, - XA27SRC_GetEffectState, - XA27SRC_SetEffectParameters, - XA27SRC_GetEffectParameters, - XA27SRC_SetFilterParameters, - XA27SRC_GetFilterParameters, - XA27SRC_SetOutputFilterParameters, - XA27SRC_GetOutputFilterParameters, - XA27SRC_SetVolume, - XA27SRC_GetVolume, - XA27SRC_SetChannelVolumes, - XA27SRC_GetChannelVolumes, - XA27SRC_SetOutputMatrix, - XA27SRC_GetOutputMatrix, - XA27SRC_DestroyVoice, - XA27SRC_Start, - XA27SRC_Stop, - XA27SRC_SubmitSourceBuffer, - XA27SRC_FlushSourceBuffers, - XA27SRC_Discontinuity, - XA27SRC_ExitLoop, - XA27SRC_GetState, - XA27SRC_SetFrequencyRatio, - XA27SRC_GetFrequencyRatio, - XA27SRC_SetSourceSampleRate -}; -#endif -/* END IXAudio2SourceVoice */ - - -/* BEGIN IXAudio2SubmixVoice */ -#if XAUDIO2_VER == 0 -XA2VoiceImpl *impl_from_IXAudio20SubmixVoice(IXAudio20SubmixVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio20SubmixVoice_iface); -} - -static void WINAPI XA20SUB_GetVoiceDetails(IXAudio20SubmixVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2SubmixVoice_GetVoiceDetails(&This->IXAudio2SubmixVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA20SUB_SetOutputVoices(IXAudio20SubmixVoice *iface, - const XAUDIO23_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - TRACE("%p, %p\n", This, pSendList); - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2SubmixVoice_SetOutputVoices(&This->IXAudio2SubmixVoice_iface, psends); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA20SUB_SetEffectChain(IXAudio20SubmixVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_SetEffectChain(&This->IXAudio2SubmixVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA20SUB_EnableEffect(IXAudio20SubmixVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_EnableEffect(&This->IXAudio2SubmixVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA20SUB_DisableEffect(IXAudio20SubmixVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_DisableEffect(&This->IXAudio2SubmixVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA20SUB_GetEffectState(IXAudio20SubmixVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_GetEffectState(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA20SUB_SetEffectParameters(IXAudio20SubmixVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_SetEffectParameters(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA20SUB_GetEffectParameters(IXAudio20SubmixVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_GetEffectParameters(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA20SUB_SetFilterParameters(IXAudio20SubmixVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_SetFilterParameters(&This->IXAudio2SubmixVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA20SUB_GetFilterParameters(IXAudio20SubmixVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_GetFilterParameters(&This->IXAudio2SubmixVoice_iface, pParameters); -} - -static HRESULT WINAPI XA20SUB_SetVolume(IXAudio20SubmixVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_SetVolume(&This->IXAudio2SubmixVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA20SUB_GetVolume(IXAudio20SubmixVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_GetVolume(&This->IXAudio2SubmixVoice_iface, pVolume); -} - -static HRESULT WINAPI XA20SUB_SetChannelVolumes(IXAudio20SubmixVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_SetChannelVolumes(&This->IXAudio2SubmixVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA20SUB_GetChannelVolumes(IXAudio20SubmixVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_GetChannelVolumes(&This->IXAudio2SubmixVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA20SUB_SetOutputMatrix(IXAudio20SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SubmixChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_SetOutputMatrix(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, SubmixChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static HRESULT WINAPI XA20SUB_GetOutputMatrix(IXAudio20SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SubmixChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - IXAudio2SubmixVoice_GetOutputMatrix(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, SubmixChannels, DestinationChannels, - pLevelMatrix); - return S_OK; -} - -static void WINAPI XA20SUB_DestroyVoice(IXAudio20SubmixVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio20SubmixVoice(iface); - return IXAudio2SubmixVoice_DestroyVoice(&This->IXAudio2SubmixVoice_iface); -} - -const IXAudio20SubmixVoiceVtbl XAudio20SubmixVoice_Vtbl = { - XA20SUB_GetVoiceDetails, - XA20SUB_SetOutputVoices, - XA20SUB_SetEffectChain, - XA20SUB_EnableEffect, - XA20SUB_DisableEffect, - XA20SUB_GetEffectState, - XA20SUB_SetEffectParameters, - XA20SUB_GetEffectParameters, - XA20SUB_SetFilterParameters, - XA20SUB_GetFilterParameters, - XA20SUB_SetVolume, - XA20SUB_GetVolume, - XA20SUB_SetChannelVolumes, - XA20SUB_GetChannelVolumes, - XA20SUB_SetOutputMatrix, - XA20SUB_GetOutputMatrix, - XA20SUB_DestroyVoice -}; - -#elif XAUDIO2_VER <= 3 - -XA2VoiceImpl *impl_from_IXAudio23SubmixVoice(IXAudio23SubmixVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio23SubmixVoice_iface); -} - -static void WINAPI XA23SUB_GetVoiceDetails(IXAudio23SubmixVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2SubmixVoice_GetVoiceDetails(&This->IXAudio2SubmixVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA23SUB_SetOutputVoices(IXAudio23SubmixVoice *iface, - const XAUDIO23_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - TRACE("%p, %p\n", This, pSendList); - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2SubmixVoice_SetOutputVoices(&This->IXAudio2SubmixVoice_iface, psends); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA23SUB_SetEffectChain(IXAudio23SubmixVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_SetEffectChain(&This->IXAudio2SubmixVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA23SUB_EnableEffect(IXAudio23SubmixVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_EnableEffect(&This->IXAudio2SubmixVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA23SUB_DisableEffect(IXAudio23SubmixVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_DisableEffect(&This->IXAudio2SubmixVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA23SUB_GetEffectState(IXAudio23SubmixVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_GetEffectState(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA23SUB_SetEffectParameters(IXAudio23SubmixVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_SetEffectParameters(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA23SUB_GetEffectParameters(IXAudio23SubmixVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_GetEffectParameters(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA23SUB_SetFilterParameters(IXAudio23SubmixVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_SetFilterParameters(&This->IXAudio2SubmixVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA23SUB_GetFilterParameters(IXAudio23SubmixVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_GetFilterParameters(&This->IXAudio2SubmixVoice_iface, pParameters); -} - -static HRESULT WINAPI XA23SUB_SetVolume(IXAudio23SubmixVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_SetVolume(&This->IXAudio2SubmixVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA23SUB_GetVolume(IXAudio23SubmixVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_GetVolume(&This->IXAudio2SubmixVoice_iface, pVolume); -} - -static HRESULT WINAPI XA23SUB_SetChannelVolumes(IXAudio23SubmixVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_SetChannelVolumes(&This->IXAudio2SubmixVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA23SUB_GetChannelVolumes(IXAudio23SubmixVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_GetChannelVolumes(&This->IXAudio2SubmixVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA23SUB_SetOutputMatrix(IXAudio23SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SubmixChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_SetOutputMatrix(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, SubmixChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static void WINAPI XA23SUB_GetOutputMatrix(IXAudio23SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SubmixChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_GetOutputMatrix(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, SubmixChannels, DestinationChannels, - pLevelMatrix); -} - -static void WINAPI XA23SUB_DestroyVoice(IXAudio23SubmixVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio23SubmixVoice(iface); - return IXAudio2SubmixVoice_DestroyVoice(&This->IXAudio2SubmixVoice_iface); -} - -const IXAudio23SubmixVoiceVtbl XAudio23SubmixVoice_Vtbl = { - XA23SUB_GetVoiceDetails, - XA23SUB_SetOutputVoices, - XA23SUB_SetEffectChain, - XA23SUB_EnableEffect, - XA23SUB_DisableEffect, - XA23SUB_GetEffectState, - XA23SUB_SetEffectParameters, - XA23SUB_GetEffectParameters, - XA23SUB_SetFilterParameters, - XA23SUB_GetFilterParameters, - XA23SUB_SetVolume, - XA23SUB_GetVolume, - XA23SUB_SetChannelVolumes, - XA23SUB_GetChannelVolumes, - XA23SUB_SetOutputMatrix, - XA23SUB_GetOutputMatrix, - XA23SUB_DestroyVoice -}; - -#elif XAUDIO2_VER <= 7 - -XA2VoiceImpl *impl_from_IXAudio27SubmixVoice(IXAudio27SubmixVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio27SubmixVoice_iface); -} - -static void WINAPI XA27SUB_GetVoiceDetails(IXAudio27SubmixVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2SubmixVoice_GetVoiceDetails(&This->IXAudio2SubmixVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA27SUB_SetOutputVoices(IXAudio27SubmixVoice *iface, - const XAUDIO2_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetOutputVoices(&This->IXAudio2SubmixVoice_iface, pSendList); -} - -static HRESULT WINAPI XA27SUB_SetEffectChain(IXAudio27SubmixVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetEffectChain(&This->IXAudio2SubmixVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA27SUB_EnableEffect(IXAudio27SubmixVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_EnableEffect(&This->IXAudio2SubmixVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA27SUB_DisableEffect(IXAudio27SubmixVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_DisableEffect(&This->IXAudio2SubmixVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA27SUB_GetEffectState(IXAudio27SubmixVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_GetEffectState(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA27SUB_SetEffectParameters(IXAudio27SubmixVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetEffectParameters(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA27SUB_GetEffectParameters(IXAudio27SubmixVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_GetEffectParameters(&This->IXAudio2SubmixVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA27SUB_SetFilterParameters(IXAudio27SubmixVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetFilterParameters(&This->IXAudio2SubmixVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA27SUB_GetFilterParameters(IXAudio27SubmixVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_GetFilterParameters(&This->IXAudio2SubmixVoice_iface, pParameters); -} - -static HRESULT WINAPI XA27SUB_SetOutputFilterParameters(IXAudio27SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetOutputFilterParameters(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, pParameters, OperationSet); -} - -static void WINAPI XA27SUB_GetOutputFilterParameters(IXAudio27SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - IXAudio2SubmixVoice_GetOutputFilterParameters(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, pParameters); -} - -static HRESULT WINAPI XA27SUB_SetVolume(IXAudio27SubmixVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetVolume(&This->IXAudio2SubmixVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA27SUB_GetVolume(IXAudio27SubmixVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_GetVolume(&This->IXAudio2SubmixVoice_iface, pVolume); -} - -static HRESULT WINAPI XA27SUB_SetChannelVolumes(IXAudio27SubmixVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetChannelVolumes(&This->IXAudio2SubmixVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA27SUB_GetChannelVolumes(IXAudio27SubmixVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_GetChannelVolumes(&This->IXAudio2SubmixVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA27SUB_SetOutputMatrix(IXAudio27SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SubmixChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_SetOutputMatrix(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, SubmixChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static void WINAPI XA27SUB_GetOutputMatrix(IXAudio27SubmixVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 SubmixChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_GetOutputMatrix(&This->IXAudio2SubmixVoice_iface, - pDestinationVoice, SubmixChannels, DestinationChannels, - pLevelMatrix); -} - -static void WINAPI XA27SUB_DestroyVoice(IXAudio27SubmixVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio27SubmixVoice(iface); - return IXAudio2SubmixVoice_DestroyVoice(&This->IXAudio2SubmixVoice_iface); -} - -const IXAudio27SubmixVoiceVtbl XAudio27SubmixVoice_Vtbl = { - XA27SUB_GetVoiceDetails, - XA27SUB_SetOutputVoices, - XA27SUB_SetEffectChain, - XA27SUB_EnableEffect, - XA27SUB_DisableEffect, - XA27SUB_GetEffectState, - XA27SUB_SetEffectParameters, - XA27SUB_GetEffectParameters, - XA27SUB_SetFilterParameters, - XA27SUB_GetFilterParameters, - XA27SUB_SetOutputFilterParameters, - XA27SUB_GetOutputFilterParameters, - XA27SUB_SetVolume, - XA27SUB_GetVolume, - XA27SUB_SetChannelVolumes, - XA27SUB_GetChannelVolumes, - XA27SUB_SetOutputMatrix, - XA27SUB_GetOutputMatrix, - XA27SUB_DestroyVoice -}; -#endif -/* END IXAudio2SubmixVoice */ - - -/* BEGIN IXAudio2MasteringVoice */ -#if XAUDIO2_VER == 0 -XA2VoiceImpl *impl_from_IXAudio20MasteringVoice(IXAudio20MasteringVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio20MasteringVoice_iface); -} - -static void WINAPI XA20M_GetVoiceDetails(IXAudio20MasteringVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2MasteringVoice_GetVoiceDetails(&This->IXAudio2MasteringVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA20M_SetOutputVoices(IXAudio20MasteringVoice *iface, - const XAUDIO23_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - TRACE("%p, %p\n", This, pSendList); - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2MasteringVoice_SetOutputVoices(&This->IXAudio2MasteringVoice_iface, psends); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA20M_SetEffectChain(IXAudio20MasteringVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_SetEffectChain(&This->IXAudio2MasteringVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA20M_EnableEffect(IXAudio20MasteringVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_EnableEffect(&This->IXAudio2MasteringVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA20M_DisableEffect(IXAudio20MasteringVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_DisableEffect(&This->IXAudio2MasteringVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA20M_GetEffectState(IXAudio20MasteringVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_GetEffectState(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA20M_SetEffectParameters(IXAudio20MasteringVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_SetEffectParameters(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA20M_GetEffectParameters(IXAudio20MasteringVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_GetEffectParameters(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA20M_SetFilterParameters(IXAudio20MasteringVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_SetFilterParameters(&This->IXAudio2MasteringVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA20M_GetFilterParameters(IXAudio20MasteringVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_GetFilterParameters(&This->IXAudio2MasteringVoice_iface, pParameters); -} - -static HRESULT WINAPI XA20M_SetVolume(IXAudio20MasteringVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_SetVolume(&This->IXAudio2MasteringVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA20M_GetVolume(IXAudio20MasteringVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_GetVolume(&This->IXAudio2MasteringVoice_iface, pVolume); -} - -static HRESULT WINAPI XA20M_SetChannelVolumes(IXAudio20MasteringVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_SetChannelVolumes(&This->IXAudio2MasteringVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA20M_GetChannelVolumes(IXAudio20MasteringVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_GetChannelVolumes(&This->IXAudio2MasteringVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA20M_SetOutputMatrix(IXAudio20MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 MasteringChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_SetOutputMatrix(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, MasteringChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static HRESULT WINAPI XA20M_GetOutputMatrix(IXAudio20MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 MasteringChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - IXAudio2MasteringVoice_GetOutputMatrix(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, MasteringChannels, DestinationChannels, - pLevelMatrix); - return S_OK; -} - -static void WINAPI XA20M_DestroyVoice(IXAudio20MasteringVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio20MasteringVoice(iface); - return IXAudio2MasteringVoice_DestroyVoice(&This->IXAudio2MasteringVoice_iface); -} - -const IXAudio20MasteringVoiceVtbl XAudio20MasteringVoice_Vtbl = { - XA20M_GetVoiceDetails, - XA20M_SetOutputVoices, - XA20M_SetEffectChain, - XA20M_EnableEffect, - XA20M_DisableEffect, - XA20M_GetEffectState, - XA20M_SetEffectParameters, - XA20M_GetEffectParameters, - XA20M_SetFilterParameters, - XA20M_GetFilterParameters, - XA20M_SetVolume, - XA20M_GetVolume, - XA20M_SetChannelVolumes, - XA20M_GetChannelVolumes, - XA20M_SetOutputMatrix, - XA20M_GetOutputMatrix, - XA20M_DestroyVoice -}; - -#elif XAUDIO2_VER <= 3 - -XA2VoiceImpl *impl_from_IXAudio23MasteringVoice(IXAudio23MasteringVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio23MasteringVoice_iface); -} - -static void WINAPI XA23M_GetVoiceDetails(IXAudio23MasteringVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2MasteringVoice_GetVoiceDetails(&This->IXAudio2MasteringVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA23M_SetOutputVoices(IXAudio23MasteringVoice *iface, - const XAUDIO23_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - TRACE("%p, %p\n", This, pSendList); - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2MasteringVoice_SetOutputVoices(&This->IXAudio2MasteringVoice_iface, psends); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA23M_SetEffectChain(IXAudio23MasteringVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_SetEffectChain(&This->IXAudio2MasteringVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA23M_EnableEffect(IXAudio23MasteringVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_EnableEffect(&This->IXAudio2MasteringVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA23M_DisableEffect(IXAudio23MasteringVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_DisableEffect(&This->IXAudio2MasteringVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA23M_GetEffectState(IXAudio23MasteringVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_GetEffectState(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA23M_SetEffectParameters(IXAudio23MasteringVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_SetEffectParameters(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA23M_GetEffectParameters(IXAudio23MasteringVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_GetEffectParameters(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA23M_SetFilterParameters(IXAudio23MasteringVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_SetFilterParameters(&This->IXAudio2MasteringVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA23M_GetFilterParameters(IXAudio23MasteringVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_GetFilterParameters(&This->IXAudio2MasteringVoice_iface, pParameters); -} - -static HRESULT WINAPI XA23M_SetVolume(IXAudio23MasteringVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_SetVolume(&This->IXAudio2MasteringVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA23M_GetVolume(IXAudio23MasteringVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_GetVolume(&This->IXAudio2MasteringVoice_iface, pVolume); -} - -static HRESULT WINAPI XA23M_SetChannelVolumes(IXAudio23MasteringVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_SetChannelVolumes(&This->IXAudio2MasteringVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA23M_GetChannelVolumes(IXAudio23MasteringVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_GetChannelVolumes(&This->IXAudio2MasteringVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA23M_SetOutputMatrix(IXAudio23MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 MasteringChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_SetOutputMatrix(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, MasteringChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static void WINAPI XA23M_GetOutputMatrix(IXAudio23MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 MasteringChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_GetOutputMatrix(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, MasteringChannels, DestinationChannels, - pLevelMatrix); -} - -static void WINAPI XA23M_DestroyVoice(IXAudio23MasteringVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio23MasteringVoice(iface); - return IXAudio2MasteringVoice_DestroyVoice(&This->IXAudio2MasteringVoice_iface); -} - -const IXAudio23MasteringVoiceVtbl XAudio23MasteringVoice_Vtbl = { - XA23M_GetVoiceDetails, - XA23M_SetOutputVoices, - XA23M_SetEffectChain, - XA23M_EnableEffect, - XA23M_DisableEffect, - XA23M_GetEffectState, - XA23M_SetEffectParameters, - XA23M_GetEffectParameters, - XA23M_SetFilterParameters, - XA23M_GetFilterParameters, - XA23M_SetVolume, - XA23M_GetVolume, - XA23M_SetChannelVolumes, - XA23M_GetChannelVolumes, - XA23M_SetOutputMatrix, - XA23M_GetOutputMatrix, - XA23M_DestroyVoice -}; - -#elif XAUDIO2_VER <= 7 - -XA2VoiceImpl *impl_from_IXAudio27MasteringVoice(IXAudio27MasteringVoice *iface) -{ - return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio27MasteringVoice_iface); -} - -static void WINAPI XA27M_GetVoiceDetails(IXAudio27MasteringVoice *iface, - XAUDIO27_VOICE_DETAILS *pVoiceDetails) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - XAUDIO2_VOICE_DETAILS details; - - IXAudio2MasteringVoice_GetVoiceDetails(&This->IXAudio2MasteringVoice_iface, &details); - - pVoiceDetails->CreationFlags = details.CreationFlags; - pVoiceDetails->InputChannels = details.InputChannels; - pVoiceDetails->InputSampleRate = details.InputSampleRate; -} - -static HRESULT WINAPI XA27M_SetOutputVoices(IXAudio27MasteringVoice *iface, - const XAUDIO2_VOICE_SENDS *pSendList) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetOutputVoices(&This->IXAudio2MasteringVoice_iface, pSendList); -} - -static HRESULT WINAPI XA27M_SetEffectChain(IXAudio27MasteringVoice *iface, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetEffectChain(&This->IXAudio2MasteringVoice_iface, pEffectChain); -} - -static HRESULT WINAPI XA27M_EnableEffect(IXAudio27MasteringVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_EnableEffect(&This->IXAudio2MasteringVoice_iface, - EffectIndex, OperationSet); -} - -static HRESULT WINAPI XA27M_DisableEffect(IXAudio27MasteringVoice *iface, - UINT32 EffectIndex, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_DisableEffect(&This->IXAudio2MasteringVoice_iface, - EffectIndex, OperationSet); -} - -static void WINAPI XA27M_GetEffectState(IXAudio27MasteringVoice *iface, - UINT32 EffectIndex, BOOL *pEnabled) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_GetEffectState(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pEnabled); -} - -static HRESULT WINAPI XA27M_SetEffectParameters(IXAudio27MasteringVoice *iface, - UINT32 EffectIndex, const void *pParameters, UINT32 ParametersByteSize, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetEffectParameters(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pParameters, ParametersByteSize, OperationSet); -} - -static HRESULT WINAPI XA27M_GetEffectParameters(IXAudio27MasteringVoice *iface, - UINT32 EffectIndex, void *pParameters, UINT32 ParametersByteSize) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_GetEffectParameters(&This->IXAudio2MasteringVoice_iface, - EffectIndex, pParameters, ParametersByteSize); -} - -static HRESULT WINAPI XA27M_SetFilterParameters(IXAudio27MasteringVoice *iface, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetFilterParameters(&This->IXAudio2MasteringVoice_iface, - pParameters, OperationSet); -} - -static void WINAPI XA27M_GetFilterParameters(IXAudio27MasteringVoice *iface, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_GetFilterParameters(&This->IXAudio2MasteringVoice_iface, pParameters); -} - -static HRESULT WINAPI XA27M_SetOutputFilterParameters(IXAudio27MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, - const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetOutputFilterParameters(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, pParameters, OperationSet); -} - -static void WINAPI XA27M_GetOutputFilterParameters(IXAudio27MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, - XAUDIO2_FILTER_PARAMETERS *pParameters) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - IXAudio2MasteringVoice_GetOutputFilterParameters(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, pParameters); -} - -static HRESULT WINAPI XA27M_SetVolume(IXAudio27MasteringVoice *iface, - float Volume, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetVolume(&This->IXAudio2MasteringVoice_iface, - Volume, OperationSet); -} - -static void WINAPI XA27M_GetVolume(IXAudio27MasteringVoice *iface, - float *pVolume) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_GetVolume(&This->IXAudio2MasteringVoice_iface, pVolume); -} - -static HRESULT WINAPI XA27M_SetChannelVolumes(IXAudio27MasteringVoice *iface, - UINT32 Channels, const float *pVolumes, UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetChannelVolumes(&This->IXAudio2MasteringVoice_iface, - Channels, pVolumes, OperationSet); -} - -static void WINAPI XA27M_GetChannelVolumes(IXAudio27MasteringVoice *iface, - UINT32 Channels, float *pVolumes) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_GetChannelVolumes(&This->IXAudio2MasteringVoice_iface, - Channels, pVolumes); -} - -static HRESULT WINAPI XA27M_SetOutputMatrix(IXAudio27MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 MasteringChannels, - UINT32 DestinationChannels, const float *pLevelMatrix, - UINT32 OperationSet) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_SetOutputMatrix(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, MasteringChannels, DestinationChannels, - pLevelMatrix, OperationSet); -} - -static void WINAPI XA27M_GetOutputMatrix(IXAudio27MasteringVoice *iface, - IXAudio2Voice *pDestinationVoice, UINT32 MasteringChannels, - UINT32 DestinationChannels, float *pLevelMatrix) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_GetOutputMatrix(&This->IXAudio2MasteringVoice_iface, - pDestinationVoice, MasteringChannels, DestinationChannels, - pLevelMatrix); -} - -static void WINAPI XA27M_DestroyVoice(IXAudio27MasteringVoice *iface) -{ - XA2VoiceImpl *This = impl_from_IXAudio27MasteringVoice(iface); - return IXAudio2MasteringVoice_DestroyVoice(&This->IXAudio2MasteringVoice_iface); -} - -const IXAudio27MasteringVoiceVtbl XAudio27MasteringVoice_Vtbl = { - XA27M_GetVoiceDetails, - XA27M_SetOutputVoices, - XA27M_SetEffectChain, - XA27M_EnableEffect, - XA27M_DisableEffect, - XA27M_GetEffectState, - XA27M_SetEffectParameters, - XA27M_GetEffectParameters, - XA27M_SetFilterParameters, - XA27M_GetFilterParameters, - XA27M_SetOutputFilterParameters, - XA27M_GetOutputFilterParameters, - XA27M_SetVolume, - XA27M_GetVolume, - XA27M_SetChannelVolumes, - XA27M_GetChannelVolumes, - XA27M_SetOutputMatrix, - XA27M_GetOutputMatrix, - XA27M_DestroyVoice -}; -#endif -/* END IXAudio2MasteringVoice */ - - -/* BEGIN IXAudio2 */ -#if XAUDIO2_VER == 0 -static inline IXAudio2Impl *impl_from_IXAudio20(IXAudio20 *iface) -{ - return CONTAINING_RECORD(iface, IXAudio2Impl, IXAudio20_iface); -} - -static HRESULT WINAPI XA20_QueryInterface(IXAudio20 *iface, REFIID riid, - void **ppvObject) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_QueryInterface(&This->IXAudio2_iface, riid, ppvObject); -} - -static ULONG WINAPI XA20_AddRef(IXAudio20 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_AddRef(&This->IXAudio2_iface); -} - -static ULONG WINAPI XA20_Release(IXAudio20 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_Release(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA20_GetDeviceCount(IXAudio20 *iface, UINT32 *pCount) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - TRACE("%p, %p\n", This, pCount); - return FAudio_GetDeviceCount(This->faudio, pCount); -} - -static HRESULT WINAPI XA20_GetDeviceDetails(IXAudio20 *iface, UINT32 index, - XAUDIO2_DEVICE_DETAILS *pDeviceDetails) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - TRACE("%p, %u, %p\n", This, index, pDeviceDetails); - return FAudio_GetDeviceDetails(This->faudio, index, (FAudioDeviceDetails *)pDeviceDetails); -} - -static HRESULT WINAPI XA20_Initialize(IXAudio20 *iface, UINT32 flags, - XAUDIO2_PROCESSOR processor) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - TRACE("(%p)->(0x%x, 0x%x)\n", This, flags, processor); - return xaudio2_initialize(This, flags, processor); -} - -static HRESULT WINAPI XA20_RegisterForCallbacks(IXAudio20 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_RegisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static void WINAPI XA20_UnregisterForCallbacks(IXAudio20 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_UnregisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static HRESULT WINAPI XA20_CreateSourceVoice(IXAudio20 *iface, - IXAudio2SourceVoice **ppSourceVoice, const WAVEFORMATEX *pSourceFormat, - UINT32 flags, float maxFrequencyRatio, - IXAudio2VoiceCallback *pCallback, const XAUDIO23_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2_CreateSourceVoice(&This->IXAudio2_iface, ppSourceVoice, - pSourceFormat, flags, maxFrequencyRatio, pCallback, psends, - pEffectChain); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA20_CreateSubmixVoice(IXAudio20 *iface, - IXAudio2SubmixVoice **ppSubmixVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 processingStage, - const XAUDIO23_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2_CreateSubmixVoice(&This->IXAudio2_iface, ppSubmixVoice, - inputChannels, inputSampleRate, flags, processingStage, psends, - pEffectChain); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA20_CreateMasteringVoice(IXAudio20 *iface, - IXAudio2MasteringVoice **ppMasteringVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 deviceIndex, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - - TRACE("(%p)->(%p, %u, %u, 0x%x, %u, %p)\n", This, ppMasteringVoice, - inputChannels, inputSampleRate, flags, deviceIndex, - pEffectChain); - - EnterCriticalSection(&This->lock); - - /* XAUDIO2_VER == 0 */ - *ppMasteringVoice = (IXAudio2MasteringVoice*)&This->mst.IXAudio20MasteringVoice_iface; - - EnterCriticalSection(&This->mst.lock); - - if(This->mst.in_use){ - LeaveCriticalSection(&This->mst.lock); - LeaveCriticalSection(&This->lock); - return COMPAT_E_INVALID_CALL; - } - - LeaveCriticalSection(&This->lock); - - This->mst.effect_chain = wrap_effect_chain(pEffectChain); - - FAudio_CreateMasteringVoice(This->faudio, &This->mst.faudio_voice, inputChannels, - inputSampleRate, flags, deviceIndex, This->mst.effect_chain); - - This->mst.in_use = TRUE; - - LeaveCriticalSection(&This->mst.lock); - - return S_OK; -} - -static HRESULT WINAPI XA20_StartEngine(IXAudio20 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_StartEngine(&This->IXAudio2_iface); -} - -static void WINAPI XA20_StopEngine(IXAudio20 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_StopEngine(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA20_CommitChanges(IXAudio20 *iface, UINT32 operationSet) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_CommitChanges(&This->IXAudio2_iface, operationSet); -} - -static void WINAPI XA20_GetPerformanceData(IXAudio20 *iface, - XAUDIO20_PERFORMANCE_DATA *pPerfData) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - XAUDIO2_PERFORMANCE_DATA data; - - IXAudio2_GetPerformanceData(&This->IXAudio2_iface, &data); - - pPerfData->AudioCyclesSinceLastQuery = data.AudioCyclesSinceLastQuery; - pPerfData->TotalCyclesSinceLastQuery = data.TotalCyclesSinceLastQuery; - pPerfData->MinimumCyclesPerQuantum = data.MinimumCyclesPerQuantum; - pPerfData->MaximumCyclesPerQuantum = data.MaximumCyclesPerQuantum; - pPerfData->MemoryUsageInBytes = data.MemoryUsageInBytes; - pPerfData->CurrentLatencyInSamples = data.CurrentLatencyInSamples; - pPerfData->GlitchesSinceLastQuery = data.GlitchesSinceEngineStarted - This->last_query_glitches; - This->last_query_glitches = data.GlitchesSinceEngineStarted; - pPerfData->ActiveSourceVoiceCount = data.ActiveSourceVoiceCount; - pPerfData->TotalSourceVoiceCount = data.TotalSourceVoiceCount; - - pPerfData->ActiveSubmixVoiceCount = data.ActiveSubmixVoiceCount; - pPerfData->TotalSubmixVoiceCount = data.ActiveSubmixVoiceCount; - - pPerfData->ActiveXmaSourceVoices = data.ActiveXmaSourceVoices; - pPerfData->ActiveXmaStreams = data.ActiveXmaStreams; -} - -static void WINAPI XA20_SetDebugConfiguration(IXAudio20 *iface, - const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration, - void *pReserved) -{ - IXAudio2Impl *This = impl_from_IXAudio20(iface); - return IXAudio2_SetDebugConfiguration(&This->IXAudio2_iface, - pDebugConfiguration, pReserved); -} - -const IXAudio20Vtbl XAudio20_Vtbl = { - XA20_QueryInterface, - XA20_AddRef, - XA20_Release, - XA20_GetDeviceCount, - XA20_GetDeviceDetails, - XA20_Initialize, - XA20_RegisterForCallbacks, - XA20_UnregisterForCallbacks, - XA20_CreateSourceVoice, - XA20_CreateSubmixVoice, - XA20_CreateMasteringVoice, - XA20_StartEngine, - XA20_StopEngine, - XA20_CommitChanges, - XA20_GetPerformanceData, - XA20_SetDebugConfiguration -}; - -#elif XAUDIO2_VER <= 2 - -static inline IXAudio2Impl *impl_from_IXAudio22(IXAudio22 *iface) -{ - return CONTAINING_RECORD(iface, IXAudio2Impl, IXAudio22_iface); -} - -static HRESULT WINAPI XA22_QueryInterface(IXAudio22 *iface, REFIID riid, - void **ppvObject) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_QueryInterface(&This->IXAudio2_iface, riid, ppvObject); -} - -static ULONG WINAPI XA22_AddRef(IXAudio22 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_AddRef(&This->IXAudio2_iface); -} - -static ULONG WINAPI XA22_Release(IXAudio22 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_Release(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA22_GetDeviceCount(IXAudio22 *iface, UINT32 *pCount) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - TRACE("%p, %p\n", This, pCount); - return FAudio_GetDeviceCount(This->faudio, pCount); -} - -static HRESULT WINAPI XA22_GetDeviceDetails(IXAudio22 *iface, UINT32 index, - XAUDIO2_DEVICE_DETAILS *pDeviceDetails) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - TRACE("%p, %u, %p\n", This, index, pDeviceDetails); - return FAudio_GetDeviceDetails(This->faudio, index, (FAudioDeviceDetails *)pDeviceDetails); -} - -static HRESULT WINAPI XA22_Initialize(IXAudio22 *iface, UINT32 flags, - XAUDIO2_PROCESSOR processor) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - TRACE("(%p)->(0x%x, 0x%x)\n", This, flags, processor); - return xaudio2_initialize(This, flags, processor); -} - -static HRESULT WINAPI XA22_RegisterForCallbacks(IXAudio22 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_RegisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static void WINAPI XA22_UnregisterForCallbacks(IXAudio22 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - IXAudio2_UnregisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static HRESULT WINAPI XA22_CreateSourceVoice(IXAudio22 *iface, - IXAudio2SourceVoice **ppSourceVoice, const WAVEFORMATEX *pSourceFormat, - UINT32 flags, float maxFrequencyRatio, - IXAudio2VoiceCallback *pCallback, const XAUDIO23_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2_CreateSourceVoice(&This->IXAudio2_iface, ppSourceVoice, - pSourceFormat, flags, maxFrequencyRatio, pCallback, psends, - pEffectChain); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA22_CreateSubmixVoice(IXAudio22 *iface, - IXAudio2SubmixVoice **ppSubmixVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 processingStage, - const XAUDIO23_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2_CreateSubmixVoice(&This->IXAudio2_iface, ppSubmixVoice, - inputChannels, inputSampleRate, flags, processingStage, psends, - pEffectChain); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA22_CreateMasteringVoice(IXAudio22 *iface, - IXAudio2MasteringVoice **ppMasteringVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 deviceIndex, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - - TRACE("(%p)->(%p, %u, %u, 0x%x, %u, %p)\n", This, ppMasteringVoice, - inputChannels, inputSampleRate, flags, deviceIndex, - pEffectChain); - - EnterCriticalSection(&This->lock); - - /* 1 <= XAUDIO2_VER <= 2 */ - *ppMasteringVoice = (IXAudio2MasteringVoice*)&This->mst.IXAudio23MasteringVoice_iface; - - EnterCriticalSection(&This->mst.lock); - - if(This->mst.in_use){ - LeaveCriticalSection(&This->mst.lock); - LeaveCriticalSection(&This->lock); - return COMPAT_E_INVALID_CALL; - } - - LeaveCriticalSection(&This->lock); - - This->mst.effect_chain = wrap_effect_chain(pEffectChain); - - FAudio_CreateMasteringVoice(This->faudio, &This->mst.faudio_voice, inputChannels, - inputSampleRate, flags, deviceIndex, This->mst.effect_chain); - - This->mst.in_use = TRUE; - - LeaveCriticalSection(&This->mst.lock); - - return S_OK; -} - -static HRESULT WINAPI XA22_StartEngine(IXAudio22 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_StartEngine(&This->IXAudio2_iface); -} - -static void WINAPI XA22_StopEngine(IXAudio22 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_StopEngine(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA22_CommitChanges(IXAudio22 *iface, UINT32 operationSet) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_CommitChanges(&This->IXAudio2_iface, operationSet); -} - -static void WINAPI XA22_GetPerformanceData(IXAudio22 *iface, - XAUDIO22_PERFORMANCE_DATA *pPerfData) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - XAUDIO2_PERFORMANCE_DATA data; - - IXAudio2_GetPerformanceData(&This->IXAudio2_iface, &data); - - pPerfData->AudioCyclesSinceLastQuery = data.AudioCyclesSinceLastQuery; - pPerfData->TotalCyclesSinceLastQuery = data.TotalCyclesSinceLastQuery; - pPerfData->MinimumCyclesPerQuantum = data.MinimumCyclesPerQuantum; - pPerfData->MaximumCyclesPerQuantum = data.MaximumCyclesPerQuantum; - pPerfData->MemoryUsageInBytes = data.MemoryUsageInBytes; - pPerfData->CurrentLatencyInSamples = data.CurrentLatencyInSamples; - pPerfData->GlitchesSinceEngineStarted = data.GlitchesSinceEngineStarted; - pPerfData->ActiveSourceVoiceCount = data.ActiveSourceVoiceCount; - pPerfData->TotalSourceVoiceCount = data.TotalSourceVoiceCount; - - pPerfData->ActiveSubmixVoiceCount = data.ActiveSubmixVoiceCount; - pPerfData->TotalSubmixVoiceCount = data.ActiveSubmixVoiceCount; - - pPerfData->ActiveXmaSourceVoices = data.ActiveXmaSourceVoices; - pPerfData->ActiveXmaStreams = data.ActiveXmaStreams; -} - -static void WINAPI XA22_SetDebugConfiguration(IXAudio22 *iface, - const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration, - void *pReserved) -{ - IXAudio2Impl *This = impl_from_IXAudio22(iface); - return IXAudio2_SetDebugConfiguration(&This->IXAudio2_iface, - pDebugConfiguration, pReserved); -} - -const IXAudio22Vtbl XAudio22_Vtbl = { - XA22_QueryInterface, - XA22_AddRef, - XA22_Release, - XA22_GetDeviceCount, - XA22_GetDeviceDetails, - XA22_Initialize, - XA22_RegisterForCallbacks, - XA22_UnregisterForCallbacks, - XA22_CreateSourceVoice, - XA22_CreateSubmixVoice, - XA22_CreateMasteringVoice, - XA22_StartEngine, - XA22_StopEngine, - XA22_CommitChanges, - XA22_GetPerformanceData, - XA22_SetDebugConfiguration -}; - -#elif XAUDIO2_VER <= 3 - -static inline IXAudio2Impl *impl_from_IXAudio23(IXAudio23 *iface) -{ - return CONTAINING_RECORD(iface, IXAudio2Impl, IXAudio23_iface); -} - -static HRESULT WINAPI XA23_QueryInterface(IXAudio23 *iface, REFIID riid, - void **ppvObject) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_QueryInterface(&This->IXAudio2_iface, riid, ppvObject); -} - -static ULONG WINAPI XA23_AddRef(IXAudio23 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_AddRef(&This->IXAudio2_iface); -} - -static ULONG WINAPI XA23_Release(IXAudio23 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_Release(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA23_GetDeviceCount(IXAudio23 *iface, UINT32 *pCount) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - TRACE("%p, %p\n", This, pCount); - return FAudio_GetDeviceCount(This->faudio, pCount); -} - -static HRESULT WINAPI XA23_GetDeviceDetails(IXAudio23 *iface, UINT32 index, - XAUDIO2_DEVICE_DETAILS *pDeviceDetails) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - TRACE("%p, %u, %p\n", This, index, pDeviceDetails); - return FAudio_GetDeviceDetails(This->faudio, index, (FAudioDeviceDetails *)pDeviceDetails); -} - -static HRESULT WINAPI XA23_Initialize(IXAudio23 *iface, UINT32 flags, - XAUDIO2_PROCESSOR processor) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - TRACE("(%p)->(0x%x, 0x%x)\n", This, flags, processor); - return xaudio2_initialize(This, flags, processor); -} - -static HRESULT WINAPI XA23_RegisterForCallbacks(IXAudio23 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_RegisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static void WINAPI XA23_UnregisterForCallbacks(IXAudio23 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - IXAudio2_UnregisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static HRESULT WINAPI XA23_CreateSourceVoice(IXAudio23 *iface, - IXAudio2SourceVoice **ppSourceVoice, const WAVEFORMATEX *pSourceFormat, - UINT32 flags, float maxFrequencyRatio, - IXAudio2VoiceCallback *pCallback, const XAUDIO23_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2_CreateSourceVoice(&This->IXAudio2_iface, ppSourceVoice, - pSourceFormat, flags, maxFrequencyRatio, pCallback, psends, - pEffectChain); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA23_CreateSubmixVoice(IXAudio23 *iface, - IXAudio2SubmixVoice **ppSubmixVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 processingStage, - const XAUDIO23_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - XAUDIO2_VOICE_SENDS sends, *psends = NULL; - HRESULT hr; - - if(pSendList){ - sends.SendCount = pSendList->OutputCount; - sends.pSends = convert_send_descriptors23(pSendList); - psends = &sends; - } - - hr = IXAudio2_CreateSubmixVoice(&This->IXAudio2_iface, ppSubmixVoice, - inputChannels, inputSampleRate, flags, processingStage, psends, - pEffectChain); - - if(pSendList) - HeapFree(GetProcessHeap(), 0, sends.pSends); - - return hr; -} - -static HRESULT WINAPI XA23_CreateMasteringVoice(IXAudio23 *iface, - IXAudio2MasteringVoice **ppMasteringVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 deviceIndex, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - - TRACE("(%p)->(%p, %u, %u, 0x%x, %u, %p)\n", This, ppMasteringVoice, - inputChannels, inputSampleRate, flags, deviceIndex, - pEffectChain); - - EnterCriticalSection(&This->lock); - - /* XAUDIO2_VER == 3 */ - *ppMasteringVoice = (IXAudio2MasteringVoice*)&This->mst.IXAudio23MasteringVoice_iface; - - EnterCriticalSection(&This->mst.lock); - - if(This->mst.in_use){ - LeaveCriticalSection(&This->mst.lock); - LeaveCriticalSection(&This->lock); - return COMPAT_E_INVALID_CALL; - } - - LeaveCriticalSection(&This->lock); - - This->mst.effect_chain = wrap_effect_chain(pEffectChain); - - FAudio_CreateMasteringVoice(This->faudio, &This->mst.faudio_voice, inputChannels, - inputSampleRate, flags, deviceIndex, This->mst.effect_chain); - - This->mst.in_use = TRUE; - - LeaveCriticalSection(&This->mst.lock); - - return S_OK; -} - -static HRESULT WINAPI XA23_StartEngine(IXAudio23 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_StartEngine(&This->IXAudio2_iface); -} - -static void WINAPI XA23_StopEngine(IXAudio23 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_StopEngine(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA23_CommitChanges(IXAudio23 *iface, UINT32 operationSet) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_CommitChanges(&This->IXAudio2_iface, operationSet); -} - -static void WINAPI XA23_GetPerformanceData(IXAudio23 *iface, - XAUDIO2_PERFORMANCE_DATA *pPerfData) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_GetPerformanceData(&This->IXAudio2_iface, pPerfData); -} - -static void WINAPI XA23_SetDebugConfiguration(IXAudio23 *iface, - const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration, - void *pReserved) -{ - IXAudio2Impl *This = impl_from_IXAudio23(iface); - return IXAudio2_SetDebugConfiguration(&This->IXAudio2_iface, - pDebugConfiguration, pReserved); -} - -const IXAudio23Vtbl XAudio23_Vtbl = { - XA23_QueryInterface, - XA23_AddRef, - XA23_Release, - XA23_GetDeviceCount, - XA23_GetDeviceDetails, - XA23_Initialize, - XA23_RegisterForCallbacks, - XA23_UnregisterForCallbacks, - XA23_CreateSourceVoice, - XA23_CreateSubmixVoice, - XA23_CreateMasteringVoice, - XA23_StartEngine, - XA23_StopEngine, - XA23_CommitChanges, - XA23_GetPerformanceData, - XA23_SetDebugConfiguration -}; - -#elif XAUDIO2_VER <= 7 - -static inline IXAudio2Impl *impl_from_IXAudio27(IXAudio27 *iface) -{ - return CONTAINING_RECORD(iface, IXAudio2Impl, IXAudio27_iface); -} - -static HRESULT WINAPI XA27_QueryInterface(IXAudio27 *iface, REFIID riid, - void **ppvObject) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_QueryInterface(&This->IXAudio2_iface, riid, ppvObject); -} - -static ULONG WINAPI XA27_AddRef(IXAudio27 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_AddRef(&This->IXAudio2_iface); -} - -static ULONG WINAPI XA27_Release(IXAudio27 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_Release(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA27_GetDeviceCount(IXAudio27 *iface, UINT32 *pCount) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - TRACE("%p, %p\n", This, pCount); - return FAudio_GetDeviceCount(This->faudio, pCount); -} - -static HRESULT WINAPI XA27_GetDeviceDetails(IXAudio27 *iface, UINT32 index, - XAUDIO2_DEVICE_DETAILS *pDeviceDetails) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - TRACE("%p, %u, %p\n", This, index, pDeviceDetails); - return FAudio_GetDeviceDetails(This->faudio, index, (FAudioDeviceDetails *)pDeviceDetails); -} - -static HRESULT WINAPI XA27_Initialize(IXAudio27 *iface, UINT32 flags, - XAUDIO2_PROCESSOR processor) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - TRACE("(%p)->(0x%x, 0x%x)\n", This, flags, processor); - return xaudio2_initialize(This, flags, processor); -} - -static HRESULT WINAPI XA27_RegisterForCallbacks(IXAudio27 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_RegisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static void WINAPI XA27_UnregisterForCallbacks(IXAudio27 *iface, - IXAudio2EngineCallback *pCallback) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - IXAudio2_UnregisterForCallbacks(&This->IXAudio2_iface, pCallback); -} - -static HRESULT WINAPI XA27_CreateSourceVoice(IXAudio27 *iface, - IXAudio2SourceVoice **ppSourceVoice, const WAVEFORMATEX *pSourceFormat, - UINT32 flags, float maxFrequencyRatio, - IXAudio2VoiceCallback *pCallback, const XAUDIO2_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_CreateSourceVoice(&This->IXAudio2_iface, ppSourceVoice, - pSourceFormat, flags, maxFrequencyRatio, pCallback, pSendList, - pEffectChain); -} - -static HRESULT WINAPI XA27_CreateSubmixVoice(IXAudio27 *iface, - IXAudio2SubmixVoice **ppSubmixVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 processingStage, - const XAUDIO2_VOICE_SENDS *pSendList, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_CreateSubmixVoice(&This->IXAudio2_iface, ppSubmixVoice, - inputChannels, inputSampleRate, flags, processingStage, pSendList, - pEffectChain); -} - -static HRESULT WINAPI XA27_CreateMasteringVoice(IXAudio27 *iface, - IXAudio2MasteringVoice **ppMasteringVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, UINT32 deviceIndex, - const XAUDIO2_EFFECT_CHAIN *pEffectChain) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - - TRACE("(%p)->(%p, %u, %u, 0x%x, %u, %p)\n", This, ppMasteringVoice, - inputChannels, inputSampleRate, flags, deviceIndex, - pEffectChain); - - EnterCriticalSection(&This->lock); - - /* 4 <= XAUDIO2_VER <= 7 */ - *ppMasteringVoice = (IXAudio2MasteringVoice*)&This->mst.IXAudio27MasteringVoice_iface; - - EnterCriticalSection(&This->mst.lock); - - if(This->mst.in_use){ - LeaveCriticalSection(&This->mst.lock); - LeaveCriticalSection(&This->lock); - return COMPAT_E_INVALID_CALL; - } - - LeaveCriticalSection(&This->lock); - - This->mst.effect_chain = wrap_effect_chain(pEffectChain); - - FAudio_CreateMasteringVoice(This->faudio, &This->mst.faudio_voice, inputChannels, - inputSampleRate, flags, deviceIndex, This->mst.effect_chain); - - This->mst.in_use = TRUE; - - LeaveCriticalSection(&This->mst.lock); - - return S_OK; -} - -static HRESULT WINAPI XA27_StartEngine(IXAudio27 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_StartEngine(&This->IXAudio2_iface); -} - -static void WINAPI XA27_StopEngine(IXAudio27 *iface) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_StopEngine(&This->IXAudio2_iface); -} - -static HRESULT WINAPI XA27_CommitChanges(IXAudio27 *iface, UINT32 operationSet) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_CommitChanges(&This->IXAudio2_iface, operationSet); -} - -static void WINAPI XA27_GetPerformanceData(IXAudio27 *iface, - XAUDIO2_PERFORMANCE_DATA *pPerfData) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_GetPerformanceData(&This->IXAudio2_iface, pPerfData); -} - -static void WINAPI XA27_SetDebugConfiguration(IXAudio27 *iface, - const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration, - void *pReserved) -{ - IXAudio2Impl *This = impl_from_IXAudio27(iface); - return IXAudio2_SetDebugConfiguration(&This->IXAudio2_iface, - pDebugConfiguration, pReserved); -} - -const IXAudio27Vtbl XAudio27_Vtbl = { - XA27_QueryInterface, - XA27_AddRef, - XA27_Release, - XA27_GetDeviceCount, - XA27_GetDeviceDetails, - XA27_Initialize, - XA27_RegisterForCallbacks, - XA27_UnregisterForCallbacks, - XA27_CreateSourceVoice, - XA27_CreateSubmixVoice, - XA27_CreateMasteringVoice, - XA27_StartEngine, - XA27_StopEngine, - XA27_CommitChanges, - XA27_GetPerformanceData, - XA27_SetDebugConfiguration -}; -#endif -/* END IXAudio2 */ diff --git a/dlls/xaudio2_7/tests/Makefile.in b/dlls/xaudio2_7/tests/Makefile.in index ba56d94a1f3..99b982a97ed 100644 --- a/dlls/xaudio2_7/tests/Makefile.in +++ b/dlls/xaudio2_7/tests/Makefile.in @@ -1,5 +1,8 @@ TESTDLL = xaudio2_7.dll IMPORTS = ole32 +EXTRADEFS = -DXAUDIO2_VER=7
C_SRCS = \ xaudio2.c + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xaudio2_7/tests/xaudio2.c b/dlls/xaudio2_7/tests/xaudio2.c index 8bf79eb2a34..5f60f448187 100644 --- a/dlls/xaudio2_7/tests/xaudio2.c +++ b/dlls/xaudio2_7/tests/xaudio2.c @@ -18,42 +18,75 @@
#include <windows.h> #include <math.h> +#include <stdbool.h>
#define COBJMACROS #include "wine/test.h" #include "initguid.h" -#include "xaudio2.h" -#include "xaudio2fx.h" +#include "xaudio_classes.h" #include "xapo.h" #include "xapofx.h" #include "mmsystem.h" #include "ks.h" #include "ksmedia.h"
-static BOOL xaudio27; +static const GUID IID_IXAudio27 = {0x8bcf1f58, 0x9fe7, 0x4583, {0x8a, 0xc6, 0xe2, 0xad, 0xc4, 0x65, 0xc8, 0xbb}}; +static const GUID IID_IXAudio28 = {0x2b02e3cf, 0x2e0b, 0x4ec3, {0xbe, 0x45, 0x1b, 0x2a, 0x3f, 0xe7, 0x21, 0x0d}}; + +static const GUID CLSID_AudioVolumeMeter20 = {0xc0c56f46, 0x29b1, 0x44e9, {0x99, 0x39, 0xa3, 0x2c, 0xe8, 0x68, 0x67, 0xe2}}; +static const GUID CLSID_AudioVolumeMeter21 = {0xc1e3f122, 0xa2ea, 0x442c, {0x85, 0x4f, 0x20, 0xd9, 0x8f, 0x83, 0x57, 0xa1}}; +static const GUID CLSID_AudioVolumeMeter22 = {0xf5ca7b34, 0x8055, 0x42c0, {0xb8, 0x36, 0x21, 0x61, 0x29, 0xeb, 0x7e, 0x30}}; +static const GUID CLSID_AudioVolumeMeter23 = {0xe180344b, 0xac83, 0x4483, {0x95, 0x9e, 0x18, 0xa5, 0xc5, 0x6a, 0x5e, 0x19}}; +static const GUID CLSID_AudioVolumeMeter24 = {0xc7338b95, 0x52b8, 0x4542, {0xaa, 0x79, 0x42, 0xeb, 0x01, 0x6c, 0x8c, 0x1c}}; +static const GUID CLSID_AudioVolumeMeter25 = {0x2139e6da, 0xc341, 0x4774, {0x9a, 0xc3, 0xb4, 0xe0, 0x26, 0x34, 0x7f, 0x64}}; +static const GUID CLSID_AudioVolumeMeter26 = {0xe48c5a3f, 0x93ef, 0x43bb, {0xa0, 0x92, 0x2c, 0x7c, 0xeb, 0x94, 0x6f, 0x27}}; +static const GUID CLSID_AudioVolumeMeter27 = {0xcac1105f, 0x619b, 0x4d04, {0x83, 0x1a, 0x44, 0xe1, 0xcb, 0xf1, 0x2d, 0x57}}; +static const GUID CLSID_AudioReverb20 = {0x6f6ea3a9, 0x2cf5, 0x41cf, {0x91, 0xc1, 0x21, 0x70, 0xb1, 0x54, 0x00, 0x63}}; +static const GUID CLSID_AudioReverb21 = {0xf4769300, 0xb949, 0x4df9, {0xb3, 0x33, 0x00, 0xd3, 0x39, 0x32, 0xe9, 0xa6}}; +static const GUID CLSID_AudioReverb22 = {0x629cf0de, 0x3ecc, 0x41e7, {0x99, 0x26, 0xf7, 0xe4, 0x3e, 0xeb, 0xec, 0x51}}; +static const GUID CLSID_AudioReverb23 = {0x9cab402c, 0x1d37, 0x44b4, {0x88, 0x6d, 0xfa, 0x4f, 0x36, 0x17, 0x0a, 0x4c}}; +static const GUID CLSID_AudioReverb24 = {0x8bb7778b, 0x645b, 0x4475, {0x9a, 0x73, 0x1d, 0xe3, 0x17, 0x0b, 0xd3, 0xaf}}; +static const GUID CLSID_AudioReverb25 = {0xd06df0d0, 0x8518, 0x441e, {0x82, 0x2f, 0x54, 0x51, 0xd5, 0xc5, 0x95, 0xb8}}; +static const GUID CLSID_AudioReverb26 = {0xcecec95a, 0xd894, 0x491a, {0xbe, 0xe3, 0x5e, 0x10, 0x6f, 0xb5, 0x9f, 0x2d}}; +static const GUID CLSID_AudioReverb27 = {0x6a93130e, 0x1d53, 0x41d1, {0xa9, 0xcf, 0xe7, 0x58, 0x80, 0x0b, 0xb1, 0x79}}; + +static const bool xaudio27 = (XAUDIO2_VER <= 7); + +static IXAudio2 *create_xaudio2(void) +{ + IXAudio2 *audio; + HRESULT hr;
-static HRESULT (WINAPI *pXAudio2Create)(IXAudio2 **, UINT32, XAUDIO2_PROCESSOR) = NULL; -static HRESULT (WINAPI *pCreateAudioVolumeMeter)(IUnknown**) = NULL; +#if XAUDIO2_VER <= 7 + hr = CoCreateInstance(&CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER, &IID_IXAudio2, (void **)&audio); + ok(hr == S_OK, "Got hr %#lx.\n", hr);
-#define XA2CALL_0(method) if(xaudio27) hr = IXAudio27_##method((IXAudio27*)xa); else hr = IXAudio2_##method(xa); -#define XA2CALL_0V(method) if(xaudio27) IXAudio27_##method((IXAudio27*)xa); else IXAudio2_##method(xa); -#define XA2CALL_V(method, ...) if(xaudio27) IXAudio27_##method((IXAudio27*)xa, __VA_ARGS__); else IXAudio2_##method(xa, __VA_ARGS__); -#define XA2CALL(method, ...) if(xaudio27) hr = IXAudio27_##method((IXAudio27*)xa, __VA_ARGS__); else hr = IXAudio2_##method(xa, __VA_ARGS__); + hr = IXAudio2_Initialize(audio, 0, XAUDIO2_ANY_PROCESSOR); + ok(hr == S_OK, "Got hr %#lx.\n", hr); +#else + hr = XAudio2Create(&audio, 0, XAUDIO2_DEFAULT_PROCESSOR); + ok(hr == S_OK, "Got hr %#lx.\n", hr); +#endif + + return audio; +}
static HRESULT create_mastering_voice(IXAudio2 *audio, unsigned int channel_count, IXAudio2MasteringVoice **voice) { - if (xaudio27) - return IXAudio27_CreateMasteringVoice((IXAudio27*)audio, voice, channel_count, 44100, 0, 0, NULL); - else - return IXAudio2_CreateMasteringVoice(audio, voice, channel_count, 44100, 0, NULL, NULL, AudioCategory_GameEffects); +#if XAUDIO2_VER <= 7 + return IXAudio2_CreateMasteringVoice(audio, voice, channel_count, 44100, 0, 0, NULL); +#else + return IXAudio2_CreateMasteringVoice(audio, voice, channel_count, 44100, 0, NULL, NULL, AudioCategory_GameEffects); +#endif }
static void get_voice_state(IXAudio2SourceVoice *voice, XAUDIO2_VOICE_STATE *state) { - if (xaudio27) - IXAudio27SourceVoice_GetState((IXAudio27SourceVoice*)voice, state); - else - IXAudio2SourceVoice_GetState(voice, state, 0); +#if XAUDIO2_VER <= 7 + IXAudio2SourceVoice_GetState(voice, state); +#else + IXAudio2SourceVoice_GetState(voice, state, 0); +#endif }
static void fill_buf(float *buf, WAVEFORMATEX *fmt, DWORD hz, DWORD len_frames) @@ -191,16 +224,17 @@ static void test_simple_streaming(IXAudio2 *xa) IUnknown *vumeter; WAVEFORMATEX fmt; XAUDIO2_BUFFER buf, buf2; + XAUDIO2_VOICE_DETAILS details; XAUDIO2_VOICE_STATE state; XAUDIO2_EFFECT_DESCRIPTOR effect; XAUDIO2_EFFECT_CHAIN chain; - DWORD chmask; + IXAPO *xapo;
memset(&ecb_state, 0, sizeof(ecb_state)); memset(&src1_state, 0, sizeof(src1_state)); memset(&src2_state, 0, sizeof(src2_state));
- XA2CALL_0V(StopEngine); + IXAudio2_StopEngine(xa);
/* Tests show in native XA2.8, ECB is called from a mixer thread, but VCBs * may be called from other threads in any order. So we can't rely on any @@ -208,17 +242,20 @@ static void test_simple_streaming(IXAudio2 *xa) * * XA2.7 does all mixing from a single thread, so call sequence can be * tested. */ - XA2CALL(RegisterForCallbacks, &ecb); + hr = IXAudio2_RegisterForCallbacks(xa, &ecb); ok(hr == S_OK, "RegisterForCallbacks failed: %08lx\n", hr);
hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr);
- if(!xaudio27){ - chmask = 0xdeadbeef; +#if XAUDIO2_VER >= 8 + { + DWORD chmask = 0xdeadbeef; + IXAudio2MasteringVoice_GetChannelMask(master, &chmask); ok(chmask == (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT), "Got unexpected channel mask: 0x%lx\n", chmask); } +#endif
/* create first source voice */ fmt.wFormatTag = WAVE_FORMAT_IEEE_FLOAT; @@ -229,23 +266,16 @@ static void test_simple_streaming(IXAudio2 *xa) fmt.nAvgBytesPerSec = fmt.nSamplesPerSec * fmt.nBlockAlign; fmt.cbSize = 0;
- XA2CALL(CreateSourceVoice, &src, &fmt, 0, 1.f, &vcb1, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src, &fmt, 0, 1.f, &vcb1, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
- if(xaudio27){ - XAUDIO27_VOICE_DETAILS details; - IXAudio27SourceVoice_GetVoiceDetails((IXAudio27SourceVoice*)src, &details); - ok(details.CreationFlags == 0, "Got wrong flags: 0x%x\n", details.CreationFlags); - ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); - ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate); - }else{ - XAUDIO2_VOICE_DETAILS details; - IXAudio2SourceVoice_GetVoiceDetails(src, &details); - ok(details.CreationFlags == 0, "Got wrong creation flags: 0x%x\n", details.CreationFlags); - ok(details.ActiveFlags == 0, "Got wrong active flags: 0x%x\n", details.CreationFlags); - ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); - ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate); - } + IXAudio2SourceVoice_GetVoiceDetails(src, &details); + ok(details.CreationFlags == 0, "Got wrong creation flags: 0x%x\n", details.CreationFlags); +#if XAUDIO2_VER >= 8 + ok(details.ActiveFlags == 0, "Got wrong active flags: 0x%x\n", details.ActiveFlags); +#endif + ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); + ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate);
memset(&buf, 0, sizeof(buf)); buf.AudioBytes = 22050 * fmt.nBlockAlign; @@ -259,23 +289,16 @@ static void test_simple_streaming(IXAudio2 *xa) ok(hr == S_OK, "Start failed: %08lx\n", hr);
/* create second source voice */ - XA2CALL(CreateSourceVoice, &src2, &fmt, 0, 1.f, &vcb2, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src2, &fmt, 0, 1.f, &vcb2, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
- if(xaudio27){ - XAUDIO27_VOICE_DETAILS details; - IXAudio27SourceVoice_GetVoiceDetails((IXAudio27SourceVoice*)src2, &details); - ok(details.CreationFlags == 0, "Got wrong flags: 0x%x\n", details.CreationFlags); - ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); - ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate); - }else{ - XAUDIO2_VOICE_DETAILS details; - IXAudio2SourceVoice_GetVoiceDetails(src2, &details); - ok(details.CreationFlags == 0, "Got wrong creation flags: 0x%x\n", details.CreationFlags); - ok(details.ActiveFlags == 0, "Got wrong active flags: 0x%x\n", details.CreationFlags); - ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); - ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate); - } + IXAudio2SourceVoice_GetVoiceDetails(src2, &details); + ok(details.CreationFlags == 0, "Got wrong creation flags: 0x%x\n", details.CreationFlags); +#if XAUDIO2_VER >= 8 + ok(details.ActiveFlags == 0, "Got wrong active flags: 0x%x\n", details.ActiveFlags); +#endif + ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); + ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate);
memset(&buf2, 0, sizeof(buf2)); buf2.AudioBytes = 22050 * fmt.nBlockAlign; @@ -288,32 +311,21 @@ static void test_simple_streaming(IXAudio2 *xa) hr = IXAudio2SourceVoice_Start(src2, 0, XAUDIO2_COMMIT_NOW); ok(hr == S_OK, "Start failed: %08lx\n", hr);
- XA2CALL_0(StartEngine); + hr = IXAudio2_StartEngine(xa); ok(hr == S_OK, "StartEngine failed: %08lx\n", hr);
/* hook up volume meter */ - if(xaudio27){ - IXAPO *xapo; - - hr = CoCreateInstance(&CLSID_AudioVolumeMeter27, NULL, - CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)&vumeter); - ok(hr == S_OK, "CoCreateInstance(AudioVolumeMeter) failed: %08lx\n", hr); - - hr = IUnknown_QueryInterface(vumeter, &IID_IXAPO27, (void**)&xapo); - ok(hr == S_OK, "Couldn't get IXAPO27 interface: %08lx\n", hr); - if(SUCCEEDED(hr)) - IXAPO_Release(xapo); - }else{ - IXAPO *xapo; - - hr = pCreateAudioVolumeMeter(&vumeter); - ok(hr == S_OK, "CreateAudioVolumeMeter failed: %08lx\n", hr); - - hr = IUnknown_QueryInterface(vumeter, &IID_IXAPO, (void**)&xapo); - ok(hr == S_OK, "Couldn't get IXAPO interface: %08lx\n", hr); - if(SUCCEEDED(hr)) - IXAPO_Release(xapo); - } +#if XAUDIO2_VER <= 7 + hr = CoCreateInstance(&CLSID_AudioVolumeMeter, NULL, + CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&vumeter); +#else + hr = CreateAudioVolumeMeter(&vumeter); +#endif + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IUnknown_QueryInterface(vumeter, &IID_IXAPO27, (void **)&xapo); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + IXAPO_Release(xapo);
effect.InitialState = TRUE; effect.OutputChannels = 2; @@ -339,16 +351,11 @@ static void test_simple_streaming(IXAudio2 *xa) HeapFree(GetProcessHeap(), 0, (void*)buf.pAudioData); HeapFree(GetProcessHeap(), 0, (void*)buf2.pAudioData);
- if(xaudio27){ - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src); - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src2); - }else{ - IXAudio2SourceVoice_DestroyVoice(src); - IXAudio2SourceVoice_DestroyVoice(src2); - } + IXAudio2SourceVoice_DestroyVoice(src); + IXAudio2SourceVoice_DestroyVoice(src2); IXAudio2MasteringVoice_DestroyVoice(master);
- XA2CALL_V(UnregisterForCallbacks, &ecb); + IXAudio2_UnregisterForCallbacks(xa, &ecb); }
static void WINAPI vcb_buf_OnVoiceProcessingPassStart(IXAudio2VoiceCallback *This, @@ -487,7 +494,7 @@ static void test_buffer_callbacks(IXAudio2 *xa) obs_calls = 0; obe_calls = 0;
- XA2CALL_0V(StopEngine); + IXAudio2_StopEngine(xa);
hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr); @@ -501,7 +508,7 @@ static void test_buffer_callbacks(IXAudio2 *xa) fmt.nAvgBytesPerSec = fmt.nSamplesPerSec * fmt.nBlockAlign; fmt.cbSize = 0;
- XA2CALL(CreateSourceVoice, &src, &fmt, 0, 1.f, &vcb_buf, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src, &fmt, 0, 1.f, &vcb_buf, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
memset(&buf, 0, sizeof(buf)); @@ -523,16 +530,14 @@ static void test_buffer_callbacks(IXAudio2 *xa) ok(hr == S_OK, "Start failed: %08lx\n", hr);
- XA2CALL_0(StartEngine); + hr = IXAudio2_StartEngine(xa); ok(hr == S_OK, "StartEngine failed: %08lx\n", hr);
- if(xaudio27){ - hr = IXAudio27SourceVoice_SetSourceSampleRate((IXAudio27SourceVoice*)src, 48000); + hr = IXAudio2SourceVoice_SetSourceSampleRate(src, 48000); + if (xaudio27) ok(hr == S_OK, "SetSourceSampleRate failed: %08lx\n", hr); - }else{ - hr = IXAudio2SourceVoice_SetSourceSampleRate(src, 48000); + else ok(hr == XAUDIO2_E_INVALID_CALL, "SetSourceSampleRate should have failed: %08lx\n", hr); - }
while(1){ get_voice_state(src, &state); @@ -543,14 +548,10 @@ static void test_buffer_callbacks(IXAudio2 *xa)
ok(state.SamplesPlayed == 4410 * 5, "Got wrong samples played\n");
- if(xaudio27) - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src); - else - IXAudio2SourceVoice_DestroyVoice(src); - + IXAudio2SourceVoice_DestroyVoice(src);
/* test OnStreamEnd callback */ - XA2CALL(CreateSourceVoice, &src, &fmt, 0, 1.f, &loop_buf, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src, &fmt, 0, 1.f, &loop_buf, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
buf.Flags = XAUDIO2_END_OF_STREAM; @@ -573,12 +574,7 @@ static void test_buffer_callbacks(IXAudio2 *xa) get_voice_state(src, &state); ok(state.SamplesPlayed == 0, "Got wrong samples played\n");
- if(xaudio27) - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src); - else - IXAudio2SourceVoice_DestroyVoice(src); - - + IXAudio2SourceVoice_DestroyVoice(src); IXAudio2MasteringVoice_DestroyVoice(master);
HeapFree(GetProcessHeap(), 0, (void*)buf.pAudioData); @@ -598,12 +594,8 @@ static UINT32 play_to_completion(IXAudio2SourceVoice *src, UINT32 max_samples) get_voice_state(src, &state); if(state.BuffersQueued == 0) break; - if(state.SamplesPlayed >= max_samples){ - if(xaudio27) - IXAudio27SourceVoice_ExitLoop((IXAudio27SourceVoice*)src, XAUDIO2_COMMIT_NOW); - else - IXAudio2SourceVoice_ExitLoop(src, XAUDIO2_COMMIT_NOW); - } + if (state.SamplesPlayed >= max_samples) + IXAudio2SourceVoice_ExitLoop(src, XAUDIO2_COMMIT_NOW); Sleep(100); }
@@ -622,7 +614,7 @@ static void test_looping(IXAudio2 *xa) XAUDIO2_BUFFER buf; UINT32 played, running_total = 0;
- XA2CALL_0V(StopEngine); + IXAudio2_StopEngine(xa);
hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr); @@ -636,7 +628,7 @@ static void test_looping(IXAudio2 *xa) fmt.nAvgBytesPerSec = fmt.nSamplesPerSec * fmt.nBlockAlign; fmt.cbSize = 0;
- XA2CALL(CreateSourceVoice, &src, &fmt, 0, 1.f, &loop_buf, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src, &fmt, 0, 1.f, &loop_buf, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
memset(&buf, 0, sizeof(buf)); @@ -645,7 +637,7 @@ static void test_looping(IXAudio2 *xa) buf.pAudioData = HeapAlloc(GetProcessHeap(), 0, buf.AudioBytes); fill_buf((float*)buf.pAudioData, &fmt, 440, 44100);
- XA2CALL_0(StartEngine); + hr = IXAudio2_StartEngine(xa); ok(hr == S_OK, "StartEngine failed: %08lx\n", hr);
/* play from middle to end */ @@ -789,10 +781,7 @@ static void test_looping(IXAudio2 *xa) ok(nloopends == (played - running_total) / 88200 + 1, "Got wrong OnLoopEnd calls: %u\n", nloopends); running_total = played;
- if(xaudio27) - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src); - else - IXAudio2SourceVoice_DestroyVoice(src); + IXAudio2SourceVoice_DestroyVoice(src); IXAudio2MasteringVoice_DestroyVoice(master); HeapFree(GetProcessHeap(), 0, (void*)buf.pAudioData); } @@ -801,30 +790,24 @@ static void test_submix(IXAudio2 *xa) { HRESULT hr; IXAudio2MasteringVoice *master; + XAUDIO2_VOICE_DETAILS details; IXAudio2SubmixVoice *sub;
- XA2CALL_0V(StopEngine); + IXAudio2_StopEngine(xa);
hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr);
- XA2CALL(CreateSubmixVoice, &sub, 2, 44100, 0, 0, NULL, NULL); + hr = IXAudio2_CreateSubmixVoice(xa, &sub, 2, 44100, 0, 0, NULL, NULL); ok(hr == S_OK, "CreateSubmixVoice failed: %08lx\n", hr);
- if(xaudio27){ - XAUDIO27_VOICE_DETAILS details; - IXAudio27SubmixVoice_GetVoiceDetails((IXAudio27SubmixVoice*)sub, &details); - ok(details.CreationFlags == 0, "Got wrong flags: 0x%x\n", details.CreationFlags); - ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); - ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate); - }else{ - XAUDIO2_VOICE_DETAILS details; - IXAudio2SubmixVoice_GetVoiceDetails(sub, &details); - ok(details.CreationFlags == 0, "Got wrong creation flags: 0x%x\n", details.CreationFlags); - ok(details.ActiveFlags == 0, "Got wrong active flags: 0x%x\n", details.CreationFlags); - ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); - ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate); - } + IXAudio2SubmixVoice_GetVoiceDetails(sub, &details); + ok(details.CreationFlags == 0, "Got wrong creation flags: 0x%x\n", details.CreationFlags); +#if XAUDIO2_VER >= 8 + ok(details.ActiveFlags == 0, "Got wrong active flags: 0x%x\n", details.ActiveFlags); +#endif + ok(details.InputChannels == 2, "Got wrong channel count: 0x%x\n", details.InputChannels); + ok(details.InputSampleRate == 44100, "Got wrong sample rate: 0x%x\n", details.InputSampleRate);
IXAudio2SubmixVoice_DestroyVoice(sub); IXAudio2MasteringVoice_DestroyVoice(master); @@ -839,7 +822,7 @@ static void test_flush(IXAudio2 *xa) XAUDIO2_BUFFER buf; XAUDIO2_VOICE_STATE state;
- XA2CALL_0V(StopEngine); + IXAudio2_StopEngine(xa);
hr = create_mastering_voice(xa, 2, &master); ok(hr == S_OK, "CreateMasteringVoice failed: %08lx\n", hr); @@ -852,7 +835,7 @@ static void test_flush(IXAudio2 *xa) fmt.nAvgBytesPerSec = fmt.nSamplesPerSec * fmt.nBlockAlign; fmt.cbSize = 0;
- XA2CALL(CreateSourceVoice, &src, &fmt, 0, 1.f, NULL, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src, &fmt, 0, 1.f, NULL, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
memset(&buf, 0, sizeof(buf)); @@ -866,7 +849,7 @@ static void test_flush(IXAudio2 *xa) hr = IXAudio2SourceVoice_Start(src, 0, XAUDIO2_COMMIT_NOW); ok(hr == S_OK, "Start failed: %08lx\n", hr);
- XA2CALL_0(StartEngine); + hr = IXAudio2_StartEngine(xa); ok(hr == S_OK, "StartEngine failed: %08lx\n", hr);
while(1){ @@ -890,30 +873,25 @@ static void test_flush(IXAudio2 *xa) hr = IXAudio2SourceVoice_SubmitSourceBuffer(src, &buf, NULL); ok(hr == S_OK, "SubmitSourceBuffer failed: %08lx\n", hr);
- if(xaudio27){ - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src); - }else{ - IXAudio2SourceVoice_DestroyVoice(src); - } + IXAudio2SourceVoice_DestroyVoice(src); IXAudio2MasteringVoice_DestroyVoice(master);
HeapFree(GetProcessHeap(), 0, (void*)buf.pAudioData); }
-static UINT32 test_DeviceDetails(IXAudio27 *xa) +static void test_DeviceDetails(IXAudio2 *xa) { +#if XAUDIO2_VER <= 7 HRESULT hr; XAUDIO2_DEVICE_DETAILS dd; UINT32 count, i;
- hr = IXAudio27_GetDeviceCount(xa, &count); + hr = IXAudio2_GetDeviceCount(xa, &count); ok(hr == S_OK, "GetDeviceCount failed: %08lx\n", hr); - - if(count == 0) - return 0; + ok(count > 0, "Got %u devices.\n", count);
for(i = 0; i < count; ++i){ - hr = IXAudio27_GetDeviceDetails(xa, i, &dd); + hr = IXAudio2_GetDeviceDetails(xa, i, &dd); ok(hr == S_OK, "GetDeviceDetails failed: %08lx\n", hr);
if(i == 0) @@ -924,8 +902,7 @@ static UINT32 test_DeviceDetails(IXAudio27 *xa) ok(IsEqualGUID(&dd.OutputFormat.SubFormat, &KSDATAFORMAT_SUBTYPE_PCM), "got format %s\n", debugstr_guid(&dd.OutputFormat.SubFormat)); } - - return count; +#endif }
static void test_xapo_creation_legacy(const char *module, unsigned int version) @@ -1159,10 +1136,10 @@ static void test_setchannelvolumes(IXAudio2 *xa) fmt_8ch.nAvgBytesPerSec = fmt_8ch.nSamplesPerSec * fmt_8ch.nBlockAlign; fmt_8ch.cbSize = 0;
- XA2CALL(CreateSourceVoice, &src_2ch, &fmt_2ch, 0, 1.f, NULL, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src_2ch, &fmt_2ch, 0, 1.f, NULL, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
- XA2CALL(CreateSourceVoice, &src_8ch, &fmt_8ch, 0, 1.f, NULL, NULL, NULL); + hr = IXAudio2_CreateSourceVoice(xa, &src_8ch, &fmt_8ch, 0, 1.f, NULL, NULL, NULL); ok(hr == S_OK, "CreateSourceVoice failed: %08lx\n", hr);
hr = IXAudio2SourceVoice_SetChannelVolumes(src_2ch, 2, volumes, XAUDIO2_COMMIT_NOW); @@ -1188,14 +1165,8 @@ static void test_setchannelvolumes(IXAudio2 *xa) ok(hr == XAUDIO2_E_INVALID_CALL, "SetChannelVolumes should have failed: %08lx\n", hr); }
- if(xaudio27){ - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src_2ch); - IXAudio27SourceVoice_DestroyVoice((IXAudio27SourceVoice*)src_8ch); - }else{ - IXAudio2SourceVoice_DestroyVoice(src_2ch); - IXAudio2SourceVoice_DestroyVoice(src_8ch); - } - + IXAudio2SourceVoice_DestroyVoice(src_2ch); + IXAudio2SourceVoice_DestroyVoice(src_8ch); IXAudio2MasteringVoice_DestroyVoice(master); }
@@ -1215,76 +1186,39 @@ static UINT32 check_has_devices(IXAudio2 *xa)
START_TEST(xaudio2) { + IXAudio2 *audio, *audio2; HRESULT hr; - IXAudio27 *xa27 = NULL; - IXAudio2 *xa = NULL; - HANDLE xa28dll; - UINT32 has_devices; - ULONG rc; + ULONG ref;
CoInitialize(NULL);
- xa28dll = LoadLibraryA("xaudio2_8.dll"); - if(xa28dll){ - pXAudio2Create = (void*)GetProcAddress(xa28dll, "XAudio2Create"); - pCreateAudioVolumeMeter = (void*)GetProcAddress(xa28dll, "CreateAudioVolumeMeter"); - } - test_xapo_creation();
- /* XAudio 2.7 (Jun 2010 DirectX) */ - hr = CoCreateInstance(&CLSID_XAudio27, NULL, CLSCTX_INPROC_SERVER, - &IID_IXAudio27, (void**)&xa27); - if(hr == S_OK){ - xaudio27 = TRUE; - - hr = IXAudio27_QueryInterface(xa27, &IID_IXAudio28, (void**) &xa); - ok(hr != S_OK, "QueryInterface with IID_IXAudio28 on IXAudio27 object returned success. Expected to fail\n"); - - hr = IXAudio27_Initialize(xa27, 0, XAUDIO2_ANY_PROCESSOR); - ok(hr == S_OK, "Initialize failed: %08lx\n", hr); - - has_devices = test_DeviceDetails(xa27); - if(has_devices){ - test_simple_streaming((IXAudio2*)xa27); - test_buffer_callbacks((IXAudio2*)xa27); - test_looping((IXAudio2*)xa27); - test_submix((IXAudio2*)xa27); - test_flush((IXAudio2*)xa27); - test_setchannelvolumes((IXAudio2*)xa27); - }else - skip("No audio devices available\n"); - - rc = IXAudio27_Release(xa27); - ok(rc == 0, "IXAudio2.7 object should have been released, got refcount %lu\n", rc); - }else - win_skip("XAudio 2.7 not available\n"); - - /* XAudio 2.8 (Win8+) */ - if(pXAudio2Create){ - xaudio27 = FALSE; - - hr = pXAudio2Create(&xa, 0, XAUDIO2_DEFAULT_PROCESSOR); - ok(hr == S_OK, "XAudio2Create failed: %08lx\n", hr); - - hr = IXAudio2_QueryInterface(xa, &IID_IXAudio27, (void**)&xa27); - ok(hr == E_NOINTERFACE, "XA28 object should support IXAudio27, gave: %08lx\n", hr); - - has_devices = check_has_devices(xa); - if(has_devices){ - test_simple_streaming(xa); - test_buffer_callbacks(xa); - test_looping(xa); - test_submix(xa); - test_flush(xa); - test_setchannelvolumes(xa); - }else - skip("No audio devices available\n"); - - rc = IXAudio2_Release(xa); - ok(rc == 0, "IXAudio2 object should have been released, got refcount %lu\n", rc); - }else - win_skip("XAudio 2.8 not available\n"); + audio = create_xaudio2(); + + hr = IXAudio2_QueryInterface(audio, &IID_IXAudio27, (void **)&audio2); + ok(hr == (xaudio27 ? S_OK : E_NOINTERFACE), "Got hr %#lx.\n", hr); + if (hr == S_OK) + IXAudio2_Release(audio2); + hr = IXAudio2_QueryInterface(audio, &IID_IXAudio28, (void **)&audio2); + todo_wine_if (!xaudio27) + ok(hr == (xaudio27 ? E_NOINTERFACE : S_OK), "Got hr %#lx.\n", hr); + if (hr == S_OK) + IXAudio2_Release(audio2); + + if (check_has_devices(audio)) + { + test_DeviceDetails(audio); + test_simple_streaming(audio); + test_buffer_callbacks(audio); + test_looping(audio); + test_submix(audio); + test_flush(audio); + test_setchannelvolumes(audio); + } + + ref = IXAudio2_Release(audio); + ok(!ref, "Got unexpected refcount %lu.\n", ref);
CoUninitialize(); } diff --git a/dlls/xaudio2_7/tests/xaudio_classes.idl b/dlls/xaudio2_7/tests/xaudio_classes.idl new file mode 100644 index 00000000000..eb9967b6cb2 --- /dev/null +++ b/dlls/xaudio2_7/tests/xaudio_classes.idl @@ -0,0 +1,24 @@ +/* + * COM Classes for xaudio + * + * Copyright 2015 Guillaume Charifi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#pragma makedep header + +#include "xaudio2.idl" +#include "xaudio2fx.idl" diff --git a/dlls/xaudio2_7/xapo.c b/dlls/xaudio2_7/xapo.c index c8c323ff78a..2772fff9e66 100644 --- a/dlls/xaudio2_7/xapo.c +++ b/dlls/xaudio2_7/xapo.c @@ -24,7 +24,6 @@ #define COBJMACROS
#include "xaudio_private.h" -#include "xaudio2fx.h" #include "xapofx.h"
#include "wine/debug.h" @@ -366,11 +365,11 @@ static HRESULT WINAPI xapocf_CreateInstance(IClassFactory *iface, IUnknown *pOut return CLASS_E_NOAGGREGATION;
#if XAUDIO2_VER < 8 && !defined(XAPOFX1_VER) - if (IsEqualGUID(This->class, &CLSID_AudioVolumeMeter27)) + if (IsEqualGUID(This->class, &CLSID_AudioVolumeMeter)) { hr = volume_meter_create(&object); } - else if (IsEqualGUID(This->class, &CLSID_AudioReverb27)) + else if (IsEqualGUID(This->class, &CLSID_AudioReverb)) { hr = reverb_create(&object); } diff --git a/dlls/xaudio2_7/xaudio_classes.idl b/dlls/xaudio2_7/xaudio_classes.idl index 17a59c35ccb..a8dc5fdb148 100644 --- a/dlls/xaudio2_7/xaudio_classes.idl +++ b/dlls/xaudio2_7/xaudio_classes.idl @@ -18,188 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
+#pragma makedep header #pragma makedep register
-#if XAUDIO2_VER == 7 -[ - helpstring("XAudio2 Class"), - threading(both), - uuid(5a508685-a254-4fba-9b82-9a24b00306af) -] -coclass XAudio27 { interface IXAudio27; } - -[ - helpstring("XAudio2 Volume Meter Class"), - threading(both), - uuid(cac1105f-619b-4d04-831a-44e1cbf12d57) -] -coclass AudioVolumeMeter { interface IUnknown; } - -[ - helpstring("XAudio2 Reverb Class"), - threading(both), - uuid(6a93130e-1d53-41d1-a9cf-e758800bb179) -] -coclass AudioReverb { interface IUnknown; } -#endif /* XAUDIO2_VER == 7 */ - -#if XAUDIO2_VER == 6 -[ - helpstring("XAudio2.6 Class"), - threading(both), - uuid(3eda9b49-2085-498b-9bb2-39a6778493de) -] -coclass XAudio26 { interface IXAudio27; } - -[ - helpstring("XAudio2.6 AudioReverb Class"), - threading(both), - uuid(cecec95a-d894-491a-bee3-5e106fb59f2d) -] -coclass AudioReverb26 { interface IXAPO; } - -[ - helpstring("XAudio2.6 AudioVolumeMeter Class"), - threading(both), - uuid(e48c5a3f-93ef-43bb-a092-2c7ceb946f27) -] -coclass AudioVolumeMeter26 { interface IXAPO; } -#endif /* XAUDIO2_VER == 6 */ - -#if XAUDIO2_VER == 5 -[ - helpstring("XAudio2.5 Class"), - threading(both), - uuid(4c9b6dde-6809-46e6-a278-9b6a97588670) -] -coclass XAudio25 { interface IXAudio27; } - -[ - helpstring("XAudio2.5 AudioReverb Class"), - threading(both), - uuid(d06df0d0-8518-441e-822f-5451d5c595b8) -] -coclass AudioReverb25 { interface IXAPO; } - -[ - helpstring("XAudio2.5 AudioVolumeMeter Class"), - threading(both), - uuid(2139e6da-c341-4774-9ac3-b4e026347f64) -] -coclass AudioVolumeMeter25 { interface IXAPO; } -#endif /* XAUDIO2_VER == 5 */ - -#if XAUDIO2_VER == 4 -[ - helpstring("XAudio2.4 Class"), - threading(both), - uuid(03219e78-5bc3-44d1-b92e-f63d89cc6526) -] -coclass XAudio24 { interface IXAudio27; } - -[ - helpstring("XAudio2.4 AudioReverb Class"), - threading(both), - uuid(8bb7778b-645b-4475-9a73-1de3170bd3af) -] -coclass AudioReverb24 { interface IXAPO; } - -[ - helpstring("XAudio2.4 AudioVolumeMeter Class"), - threading(both), - uuid(c7338b95-52b8-4542-aa79-42eb016c8c1c) -] -coclass AudioVolumeMeter24 { interface IXAPO; } -#endif /* XAUDIO2_VER == 4 */ - -#if XAUDIO2_VER == 3 -[ - helpstring("XAudio2.3 Class"), - threading(both), - uuid(4c5e637a-16c7-4de3-9c46-5ed22181962d) -] -coclass XAudio23 { interface IXAudio27; } - -[ - helpstring("XAudio2.3 AudioReverb Class"), - threading(both), - uuid(9cab402c-1d37-44b4-886d-fa4f36170a4c) -] -coclass AudioReverb23 { interface IXAPO; } - -[ - helpstring("XAudio2.3 AudioVolumeMeter Class"), - threading(both), - uuid(e180344b-ac83-4483-959e-18a5c56a5e19) -] -coclass AudioVolumeMeter23 { interface IXAPO; } -#endif /* XAUDIO2_VER == 3 */ - -#if XAUDIO2_VER == 2 -[ - helpstring("XAudio2.2 Class"), - threading(both), - uuid(b802058a-464a-42db-bc10-b650d6f2586a) -] -coclass XAudio22 { interface IXAudio22; } - -[ - helpstring("XAudio2.2 AudioReverb Class"), - threading(both), - uuid(629cf0de-3ecc-41e7-9926-f7e43eebec51) -] -coclass AudioReverb22 { interface IXAPO; } - -[ - helpstring("XAudio2.2 AudioVolumeMeter Class"), - threading(both), - uuid(f5ca7b34-8055-42c0-b836-216129eb7e30) -] -coclass AudioVolumeMeter22 { interface IXAPO; } -#endif /* XAUDIO2_VER == 2 */ - -#if XAUDIO2_VER == 1 -[ - helpstring("XAudio2.1 Class"), - threading(both), - uuid(e21a7345-eb21-468e-be50-804db97cf708) -] -coclass XAudio21 { interface IXAudio22; } - -[ - helpstring("XAudio2.1 AudioReverb Class"), - threading(both), - uuid(f4769300-b949-4df9-b333-00d33932e9a6) -] -coclass AudioReverb21 { interface IXAPO; } - -[ - helpstring("XAudio2.1 AudioVolumeMeter Class"), - threading(both), - uuid(c1e3f122-a2ea-442c-854f-20d98f8357a1) -] -coclass AudioVolumeMeter21 { interface IXAPO; } -#endif /* XAUDIO2_VER == 1 */ - -#if XAUDIO2_VER == 0 -[ - helpstring("XAudio2.0 Class"), - threading(both), - uuid(fac23f48-31f5-45a8-b49b-5225d61401aa) -] -coclass XAudio20 { interface IXAudio20; } - -[ - helpstring("XAudio2.0 AudioReverb Class"), - threading(both), - uuid(6f6ea3a9-2cf5-41cf-91c1-2170b1540063) -] -coclass AudioReverb20 { interface IXAPO; } - -[ - helpstring("XAudio2.0 AudioVolumeMeter Class"), - threading(both), - uuid(c0c56f46-29b1-44e9-9939-a32ce86867e2) -] -coclass AudioVolumeMeter20 { interface IXAPO; } -#endif /* XAUDIO2_VER == 0 */ +#include "xaudio2.idl" +#include "xaudio2fx.idl" diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c index ab759b678a9..5b9513b3ab0 100644 --- a/dlls/xaudio2_7/xaudio_dll.c +++ b/dlls/xaudio2_7/xaudio_dll.c @@ -29,7 +29,6 @@
#include "initguid.h" #include "xaudio_private.h" -#include "xaudio2fx.h" #if XAUDIO2_VER >= 8 #include "xapofx.h" #endif @@ -346,6 +345,16 @@ static FAudioVoiceSends *wrap_voice_sends(const XAUDIO2_VOICE_SENDS *sends) if(!sends) return NULL;
+#if XAUDIO2_VER <= 3 + ret = heap_alloc(sizeof(*ret) + sends->OutputCount * sizeof(FAudioSendDescriptor)); + ret->SendCount = sends->OutputCount; + ret->pSends = (FAudioSendDescriptor*)(ret + 1); + for(i = 0; i < sends->OutputCount; ++i){ + XA2VoiceImpl *voice = impl_from_IXAudio2Voice(sends->pOutputVoices[i]); + ret->pSends[i].pOutputVoice = voice->faudio_voice; + ret->pSends[i].Flags = 0; + } +#else ret = heap_alloc(sizeof(*ret) + sends->SendCount * sizeof(FAudioSendDescriptor)); ret->SendCount = sends->SendCount; ret->pSends = (FAudioSendDescriptor*)(ret + 1); @@ -354,6 +363,7 @@ static FAudioVoiceSends *wrap_voice_sends(const XAUDIO2_VOICE_SENDS *sends) ret->pSends[i].pOutputVoice = voice->faudio_voice; ret->pSends[i].Flags = sends->pSends[i].Flags; } +#endif return ret; }
@@ -377,11 +387,11 @@ static void FAUDIOCALL XA2VCB_OnVoiceProcessingPassStart(FAudioVoiceCallback *if XA2VoiceImpl *This = impl_from_FAudioVoiceCallback(iface); TRACE("%p\n", This); if(This->cb) -#if XAUDIO2_VER == 0 - IXAudio20VoiceCallback_OnVoiceProcessingPassStart((IXAudio20VoiceCallback*)This->cb); -#else - IXAudio2VoiceCallback_OnVoiceProcessingPassStart(This->cb, BytesRequired); + IXAudio2VoiceCallback_OnVoiceProcessingPassStart(This->cb +#if XAUDIO2_VER > 0 + , BytesRequired #endif + ); }
static void FAUDIOCALL XA2VCB_OnVoiceProcessingPassEnd(FAudioVoiceCallback *iface) @@ -497,6 +507,21 @@ static inline void destroy_voice(XA2VoiceImpl *This) This->in_use = FALSE; }
+static void get_voice_details(XA2VoiceImpl *voice, XAUDIO2_VOICE_DETAILS *details) +{ + FAudioVoiceDetails faudio_details; + + TRACE("%p, %p\n", voice, details); + + FAudioVoice_GetVoiceDetails(voice->faudio_voice, &faudio_details); + details->CreationFlags = faudio_details.CreationFlags; +#if XAUDIO2_VER >= 8 + details->ActiveFlags = faudio_details.ActiveFlags; +#endif + details->InputChannels = faudio_details.InputChannels; + details->InputSampleRate = faudio_details.InputSampleRate; +} + /* Source Voices */
static inline XA2VoiceImpl *impl_from_IXAudio2SourceVoice(IXAudio2SourceVoice *iface) @@ -504,12 +529,11 @@ static inline XA2VoiceImpl *impl_from_IXAudio2SourceVoice(IXAudio2SourceVoice *i return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio2SourceVoice_iface); }
-static void WINAPI XA2SRC_GetVoiceDetails(IXAudio2SourceVoice *iface, - XAUDIO2_VOICE_DETAILS *pVoiceDetails) +static void WINAPI XA2SRC_GetVoiceDetails(IXAudio2SourceVoice *iface, XAUDIO2_VOICE_DETAILS *details) { - XA2VoiceImpl *This = impl_from_IXAudio2SourceVoice(iface); - TRACE("%p, %p\n", This, pVoiceDetails); - FAudioVoice_GetVoiceDetails(This->faudio_voice, (FAudioVoiceDetails *)pVoiceDetails); + XA2VoiceImpl *voice = impl_from_IXAudio2SourceVoice(iface); + + get_voice_details(voice, details); }
static HRESULT WINAPI XA2SRC_SetOutputVoices(IXAudio2SourceVoice *iface, @@ -608,6 +632,7 @@ static void WINAPI XA2SRC_GetFilterParameters(IXAudio2SourceVoice *iface, FAudioVoice_GetFilterParameters(This->faudio_voice, (FAudioFilterParameters *)pParameters); }
+#if XAUDIO2_VER >= 4 static HRESULT WINAPI XA2SRC_SetOutputFilterParameters(IXAudio2SourceVoice *iface, IXAudio2Voice *pDestinationVoice, const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) @@ -633,6 +658,7 @@ static void WINAPI XA2SRC_GetOutputFilterParameters(IXAudio2SourceVoice *iface, FAudioVoice_GetOutputFilterParameters(This->faudio_voice, dst ? dst->faudio_voice : NULL, (FAudioFilterParameters *)pParameters); } +#endif
static HRESULT WINAPI XA2SRC_SetVolume(IXAudio2SourceVoice *iface, float Volume, UINT32 OperationSet) @@ -682,7 +708,12 @@ static HRESULT WINAPI XA2SRC_SetOutputMatrix(IXAudio2SourceVoice *iface, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet); }
-static void WINAPI XA2SRC_GetOutputMatrix(IXAudio2SourceVoice *iface, +#if XAUDIO2_VER == 0 + static HRESULT +#else + static void +#endif +WINAPI XA2SRC_GetOutputMatrix(IXAudio2SourceVoice *iface, IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, UINT32 DestinationChannels, float *pLevelMatrix) { @@ -694,6 +725,9 @@ static void WINAPI XA2SRC_GetOutputMatrix(IXAudio2SourceVoice *iface,
FAudioVoice_GetOutputMatrix(This->faudio_voice, dst ? dst->faudio_voice : NULL, SourceChannels, DestinationChannels, pLevelMatrix); +#if XAUDIO2_VER == 0 + return S_OK; +#endif }
static void WINAPI XA2SRC_DestroyVoice(IXAudio2SourceVoice *iface) @@ -766,10 +800,16 @@ static HRESULT WINAPI XA2SRC_ExitLoop(IXAudio2SourceVoice *iface, UINT32 Operati return FAudioSourceVoice_ExitLoop(This->faudio_voice, OperationSet); }
-static void WINAPI XA2SRC_GetState(IXAudio2SourceVoice *iface, - XAUDIO2_VOICE_STATE *pVoiceState, UINT32 Flags) +#if XAUDIO2_VER >= 8 +static void WINAPI XA2SRC_GetState(IXAudio2SourceVoice *iface, XAUDIO2_VOICE_STATE *pVoiceState, UINT32 Flags) +#else +static void WINAPI XA2SRC_GetState(IXAudio2SourceVoice *iface, XAUDIO2_VOICE_STATE *pVoiceState) +#endif { XA2VoiceImpl *This = impl_from_IXAudio2SourceVoice(iface); +#if XAUDIO2_VER < 8 + UINT32 Flags = 0; +#endif
TRACE("%p, %p, 0x%x\n", This, pVoiceState, Flags);
@@ -795,6 +835,7 @@ static void WINAPI XA2SRC_GetFrequencyRatio(IXAudio2SourceVoice *iface, float *p return FAudioSourceVoice_GetFrequencyRatio(This->faudio_voice, pRatio); }
+#if XAUDIO2_VER >= 4 static HRESULT WINAPI XA2SRC_SetSourceSampleRate( IXAudio2SourceVoice *iface, UINT32 NewSourceSampleRate) @@ -805,6 +846,7 @@ static HRESULT WINAPI XA2SRC_SetSourceSampleRate(
return FAudioSourceVoice_SetSourceSampleRate(This->faudio_voice, NewSourceSampleRate); } +#endif
static const IXAudio2SourceVoiceVtbl XAudio2SourceVoice_Vtbl = { XA2SRC_GetVoiceDetails, @@ -817,8 +859,10 @@ static const IXAudio2SourceVoiceVtbl XAudio2SourceVoice_Vtbl = { XA2SRC_GetEffectParameters, XA2SRC_SetFilterParameters, XA2SRC_GetFilterParameters, +#if XAUDIO2_VER >= 4 XA2SRC_SetOutputFilterParameters, XA2SRC_GetOutputFilterParameters, +#endif XA2SRC_SetVolume, XA2SRC_GetVolume, XA2SRC_SetChannelVolumes, @@ -835,7 +879,9 @@ static const IXAudio2SourceVoiceVtbl XAudio2SourceVoice_Vtbl = { XA2SRC_GetState, XA2SRC_SetFrequencyRatio, XA2SRC_GetFrequencyRatio, +#if XAUDIO2_VER >= 4 XA2SRC_SetSourceSampleRate +#endif };
/* Submix Voices */ @@ -845,12 +891,11 @@ static inline XA2VoiceImpl *impl_from_IXAudio2SubmixVoice(IXAudio2SubmixVoice *i return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio2SubmixVoice_iface); }
-static void WINAPI XA2SUB_GetVoiceDetails(IXAudio2SubmixVoice *iface, - XAUDIO2_VOICE_DETAILS *pVoiceDetails) +static void WINAPI XA2SUB_GetVoiceDetails(IXAudio2SubmixVoice *iface, XAUDIO2_VOICE_DETAILS *details) { - XA2VoiceImpl *This = impl_from_IXAudio2SubmixVoice(iface); - TRACE("%p, %p\n", This, pVoiceDetails); - FAudioVoice_GetVoiceDetails(This->faudio_voice, (FAudioVoiceDetails *)pVoiceDetails); + XA2VoiceImpl *voice = impl_from_IXAudio2SubmixVoice(iface); + + get_voice_details(voice, details); }
static HRESULT WINAPI XA2SUB_SetOutputVoices(IXAudio2SubmixVoice *iface, @@ -949,6 +994,7 @@ static void WINAPI XA2SUB_GetFilterParameters(IXAudio2SubmixVoice *iface, FAudioVoice_GetFilterParameters(This->faudio_voice, (FAudioFilterParameters *)pParameters); }
+#if XAUDIO2_VER >= 4 static HRESULT WINAPI XA2SUB_SetOutputFilterParameters(IXAudio2SubmixVoice *iface, IXAudio2Voice *pDestinationVoice, const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) @@ -974,6 +1020,7 @@ static void WINAPI XA2SUB_GetOutputFilterParameters(IXAudio2SubmixVoice *iface, FAudioVoice_GetOutputFilterParameters(This->faudio_voice, dst ? dst->faudio_voice : NULL, (FAudioFilterParameters *)pParameters); } +#endif
static HRESULT WINAPI XA2SUB_SetVolume(IXAudio2SubmixVoice *iface, float Volume, UINT32 OperationSet) @@ -1023,7 +1070,12 @@ static HRESULT WINAPI XA2SUB_SetOutputMatrix(IXAudio2SubmixVoice *iface, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet); }
-static void WINAPI XA2SUB_GetOutputMatrix(IXAudio2SubmixVoice *iface, +#if XAUDIO2_VER == 0 + static HRESULT +#else + static void +#endif +WINAPI XA2SUB_GetOutputMatrix(IXAudio2SubmixVoice *iface, IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, UINT32 DestinationChannels, float *pLevelMatrix) { @@ -1035,6 +1087,9 @@ static void WINAPI XA2SUB_GetOutputMatrix(IXAudio2SubmixVoice *iface,
FAudioVoice_GetOutputMatrix(This->faudio_voice, dst ? dst->faudio_voice : NULL, SourceChannels, DestinationChannels, pLevelMatrix); +#if XAUDIO2_VER == 0 + return S_OK; +#endif }
static void WINAPI XA2SUB_DestroyVoice(IXAudio2SubmixVoice *iface) @@ -1061,8 +1116,10 @@ static const struct IXAudio2SubmixVoiceVtbl XAudio2SubmixVoice_Vtbl = { XA2SUB_GetEffectParameters, XA2SUB_SetFilterParameters, XA2SUB_GetFilterParameters, +#if XAUDIO2_VER >= 4 XA2SUB_SetOutputFilterParameters, XA2SUB_GetOutputFilterParameters, +#endif XA2SUB_SetVolume, XA2SUB_GetVolume, XA2SUB_SetChannelVolumes, @@ -1079,12 +1136,11 @@ static inline XA2VoiceImpl *impl_from_IXAudio2MasteringVoice(IXAudio2MasteringVo return CONTAINING_RECORD(iface, XA2VoiceImpl, IXAudio2MasteringVoice_iface); }
-static void WINAPI XA2M_GetVoiceDetails(IXAudio2MasteringVoice *iface, - XAUDIO2_VOICE_DETAILS *pVoiceDetails) +static void WINAPI XA2M_GetVoiceDetails(IXAudio2MasteringVoice *iface, XAUDIO2_VOICE_DETAILS *details) { - XA2VoiceImpl *This = impl_from_IXAudio2MasteringVoice(iface); - TRACE("%p, %p\n", This, pVoiceDetails); - FAudioVoice_GetVoiceDetails(This->faudio_voice, (FAudioVoiceDetails *)pVoiceDetails); + XA2VoiceImpl *voice = impl_from_IXAudio2MasteringVoice(iface); + + get_voice_details(voice, details); }
static HRESULT WINAPI XA2M_SetOutputVoices(IXAudio2MasteringVoice *iface, @@ -1183,6 +1239,7 @@ static void WINAPI XA2M_GetFilterParameters(IXAudio2MasteringVoice *iface, FAudioVoice_GetFilterParameters(This->faudio_voice, (FAudioFilterParameters *)pParameters); }
+#if XAUDIO2_VER >= 4 static HRESULT WINAPI XA2M_SetOutputFilterParameters(IXAudio2MasteringVoice *iface, IXAudio2Voice *pDestinationVoice, const XAUDIO2_FILTER_PARAMETERS *pParameters, UINT32 OperationSet) @@ -1208,6 +1265,7 @@ static void WINAPI XA2M_GetOutputFilterParameters(IXAudio2MasteringVoice *iface, FAudioVoice_GetOutputFilterParameters(This->faudio_voice, dst ? dst->faudio_voice : NULL, (FAudioFilterParameters *)pParameters); } +#endif
static HRESULT WINAPI XA2M_SetVolume(IXAudio2MasteringVoice *iface, float Volume, UINT32 OperationSet) @@ -1257,7 +1315,12 @@ static HRESULT WINAPI XA2M_SetOutputMatrix(IXAudio2MasteringVoice *iface, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet); }
-static void WINAPI XA2M_GetOutputMatrix(IXAudio2MasteringVoice *iface, +#if XAUDIO2_VER == 0 + static HRESULT +#else + static void +#endif +WINAPI XA2M_GetOutputMatrix(IXAudio2MasteringVoice *iface, IXAudio2Voice *pDestinationVoice, UINT32 SourceChannels, UINT32 DestinationChannels, float *pLevelMatrix) { @@ -1269,6 +1332,9 @@ static void WINAPI XA2M_GetOutputMatrix(IXAudio2MasteringVoice *iface,
FAudioVoice_GetOutputMatrix(This->faudio_voice, dst ? dst->faudio_voice : NULL, SourceChannels, DestinationChannels, pLevelMatrix); +#if XAUDIO2_VER == 0 + return S_OK; +#endif }
static void WINAPI XA2M_DestroyVoice(IXAudio2MasteringVoice *iface) @@ -1284,6 +1350,7 @@ static void WINAPI XA2M_DestroyVoice(IXAudio2MasteringVoice *iface) LeaveCriticalSection(&This->lock); }
+#if XAUDIO2_VER >= 8 static void WINAPI XA2M_GetChannelMask(IXAudio2MasteringVoice *iface, DWORD *pChannelMask) { @@ -1293,6 +1360,7 @@ static void WINAPI XA2M_GetChannelMask(IXAudio2MasteringVoice *iface,
FAudioMasteringVoice_GetChannelMask(This->faudio_voice, (uint32_t *)pChannelMask); } +#endif
static const struct IXAudio2MasteringVoiceVtbl XAudio2MasteringVoice_Vtbl = { XA2M_GetVoiceDetails, @@ -1305,8 +1373,10 @@ static const struct IXAudio2MasteringVoiceVtbl XAudio2MasteringVoice_Vtbl = { XA2M_GetEffectParameters, XA2M_SetFilterParameters, XA2M_GetFilterParameters, +#if XAUDIO2_VER >= 4 XA2M_SetOutputFilterParameters, XA2M_GetOutputFilterParameters, +#endif XA2M_SetVolume, XA2M_GetVolume, XA2M_SetChannelVolumes, @@ -1314,7 +1384,9 @@ static const struct IXAudio2MasteringVoiceVtbl XAudio2MasteringVoice_Vtbl = { XA2M_SetOutputMatrix, XA2M_GetOutputMatrix, XA2M_DestroyVoice, +#if XAUDIO2_VER >= 8 XA2M_GetChannelMask +#endif };
/* More Common Voice Functions */ @@ -1327,28 +1399,6 @@ static XA2VoiceImpl *impl_from_IXAudio2Voice(IXAudio2Voice *iface) return impl_from_IXAudio2MasteringVoice((IXAudio2MasteringVoice*)iface); if(iface->lpVtbl == (void*)&XAudio2SubmixVoice_Vtbl) return impl_from_IXAudio2SubmixVoice((IXAudio2SubmixVoice*)iface); -#if XAUDIO2_VER == 0 - if(iface->lpVtbl == (void*)&XAudio20SourceVoice_Vtbl) - return impl_from_IXAudio20SourceVoice((IXAudio20SourceVoice*)iface); - if(iface->lpVtbl == (void*)&XAudio20SubmixVoice_Vtbl) - return impl_from_IXAudio20SubmixVoice((IXAudio20SubmixVoice*)iface); - if(iface->lpVtbl == (void*)&XAudio20MasteringVoice_Vtbl) - return impl_from_IXAudio20MasteringVoice((IXAudio20MasteringVoice*)iface); -#elif XAUDIO2_VER <= 3 - if(iface->lpVtbl == (void*)&XAudio23SourceVoice_Vtbl) - return impl_from_IXAudio23SourceVoice((IXAudio23SourceVoice*)iface); - if(iface->lpVtbl == (void*)&XAudio23SubmixVoice_Vtbl) - return impl_from_IXAudio23SubmixVoice((IXAudio23SubmixVoice*)iface); - if(iface->lpVtbl == (void*)&XAudio23MasteringVoice_Vtbl) - return impl_from_IXAudio23MasteringVoice((IXAudio23MasteringVoice*)iface); -#elif XAUDIO2_VER <= 7 - if(iface->lpVtbl == (void*)&XAudio27SourceVoice_Vtbl) - return impl_from_IXAudio27SourceVoice((IXAudio27SourceVoice*)iface); - if(iface->lpVtbl == (void*)&XAudio27SubmixVoice_Vtbl) - return impl_from_IXAudio27SubmixVoice((IXAudio27SubmixVoice*)iface); - if(iface->lpVtbl == (void*)&XAudio27MasteringVoice_Vtbl) - return impl_from_IXAudio27MasteringVoice((IXAudio27MasteringVoice*)iface); -#endif ERR("invalid IXAudio2Voice pointer: %p\n", iface); return NULL; } @@ -1368,25 +1418,9 @@ static HRESULT WINAPI IXAudio2Impl_QueryInterface(IXAudio2 *iface, REFIID riid, TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppvObject);
if(IsEqualGUID(riid, &IID_IUnknown) || -#if XAUDIO2_VER == 8 - IsEqualGUID(riid, &IID_IXAudio28) || -#endif IsEqualGUID(riid, &IID_IXAudio2)) *ppvObject = &This->IXAudio2_iface; - else if(IsEqualGUID(riid, &IID_IXAudio27)){ - /* all xaudio versions before 28 share an IID */ -#if XAUDIO2_VER == 0 - *ppvObject = &This->IXAudio20_iface; -#elif XAUDIO2_VER <= 2 - *ppvObject = &This->IXAudio22_iface; -#elif XAUDIO2_VER <= 3 - *ppvObject = &This->IXAudio23_iface; -#elif XAUDIO2_VER <= 7 - *ppvObject = &This->IXAudio27_iface; -#else - *ppvObject = NULL; -#endif - }else + else *ppvObject = NULL;
if(*ppvObject){ @@ -1433,6 +1467,36 @@ static ULONG WINAPI IXAudio2Impl_Release(IXAudio2 *iface) return ref; }
+#if XAUDIO2_VER <= 7 +static HRESULT WINAPI IXAudio2Impl_GetDeviceCount(IXAudio2 *iface, UINT32 *count) +{ + IXAudio2Impl *audio = impl_from_IXAudio2(iface); + + TRACE("%p, %p\n", audio, count); + + return FAudio_GetDeviceCount(audio->faudio, count); +} + +static HRESULT WINAPI IXAudio2Impl_GetDeviceDetails(IXAudio2 *iface, UINT32 index, + XAUDIO2_DEVICE_DETAILS *details) +{ + IXAudio2Impl *audio = impl_from_IXAudio2(iface); + + TRACE("%p, %u, %p\n", audio, index, details); + + return FAudio_GetDeviceDetails(audio->faudio, index, (FAudioDeviceDetails *)details); +} + +static HRESULT WINAPI IXAudio2Impl_Initialize(IXAudio2 *iface, UINT32 flags, XAUDIO2_PROCESSOR processor) +{ + IXAudio2Impl *audio = impl_from_IXAudio2(iface); + + TRACE("%p, %#x, %#x\n", audio, flags, processor); + + return xaudio2_initialize(audio, flags, processor); +} +#endif + static HRESULT WINAPI IXAudio2Impl_RegisterForCallbacks(IXAudio2 *iface, IXAudio2EngineCallback *pCallback) { @@ -1501,23 +1565,7 @@ static inline XA2VoiceImpl *create_voice(IXAudio2Impl *This) list_add_head(&This->voices, &voice->entry);
voice->IXAudio2SourceVoice_iface.lpVtbl = &XAudio2SourceVoice_Vtbl; -#if XAUDIO2_VER == 0 - voice->IXAudio20SourceVoice_iface.lpVtbl = &XAudio20SourceVoice_Vtbl; -#elif XAUDIO2_VER <= 3 - voice->IXAudio23SourceVoice_iface.lpVtbl = &XAudio23SourceVoice_Vtbl; -#elif XAUDIO2_VER <= 7 - voice->IXAudio27SourceVoice_iface.lpVtbl = &XAudio27SourceVoice_Vtbl; -#endif - voice->IXAudio2SubmixVoice_iface.lpVtbl = &XAudio2SubmixVoice_Vtbl; -#if XAUDIO2_VER == 0 - voice->IXAudio20SubmixVoice_iface.lpVtbl = &XAudio20SubmixVoice_Vtbl; -#elif XAUDIO2_VER <= 3 - voice->IXAudio23SubmixVoice_iface.lpVtbl = &XAudio23SubmixVoice_Vtbl; -#elif XAUDIO2_VER <= 7 - voice->IXAudio27SubmixVoice_iface.lpVtbl = &XAudio27SubmixVoice_Vtbl; -#endif - voice->FAudioVoiceCallback_vtbl = FAudioVoiceCallback_Vtbl;
InitializeCriticalSection(&voice->lock); @@ -1574,15 +1622,7 @@ static HRESULT WINAPI IXAudio2Impl_CreateSourceVoice(IXAudio2 *iface,
LeaveCriticalSection(&src->lock);
-#if XAUDIO2_VER == 0 - *ppSourceVoice = (IXAudio2SourceVoice*)&src->IXAudio20SourceVoice_iface; -#elif XAUDIO2_VER <= 3 - *ppSourceVoice = (IXAudio2SourceVoice*)&src->IXAudio23SourceVoice_iface; -#elif XAUDIO2_VER <= 7 - *ppSourceVoice = (IXAudio2SourceVoice*)&src->IXAudio27SourceVoice_iface; -#else *ppSourceVoice = &src->IXAudio2SourceVoice_iface; -#endif
TRACE("Created source voice: %p\n", src);
@@ -1635,15 +1675,7 @@ static HRESULT WINAPI IXAudio2Impl_CreateSubmixVoice(IXAudio2 *iface,
LeaveCriticalSection(&sub->lock);
-#if XAUDIO2_VER == 0 - *ppSubmixVoice = (IXAudio2SubmixVoice*)&sub->IXAudio20SubmixVoice_iface; -#elif XAUDIO2_VER <= 3 - *ppSubmixVoice = (IXAudio2SubmixVoice*)&sub->IXAudio23SubmixVoice_iface; -#elif XAUDIO2_VER <= 7 - *ppSubmixVoice = (IXAudio2SubmixVoice*)&sub->IXAudio27SubmixVoice_iface; -#else *ppSubmixVoice = &sub->IXAudio2SubmixVoice_iface; -#endif
TRACE("Created submix voice: %p\n", sub);
@@ -1652,23 +1684,25 @@ static HRESULT WINAPI IXAudio2Impl_CreateSubmixVoice(IXAudio2 *iface,
static HRESULT WINAPI IXAudio2Impl_CreateMasteringVoice(IXAudio2 *iface, IXAudio2MasteringVoice **ppMasteringVoice, UINT32 inputChannels, - UINT32 inputSampleRate, UINT32 flags, const WCHAR *deviceId, - const XAUDIO2_EFFECT_CHAIN *pEffectChain, - AUDIO_STREAM_CATEGORY streamCategory) + UINT32 inputSampleRate, UINT32 flags, +#if XAUDIO2_VER >= 8 + const WCHAR *deviceId, +#else + UINT32 index, +#endif + const XAUDIO2_EFFECT_CHAIN *pEffectChain +#if XAUDIO2_VER >= 8 + , AUDIO_STREAM_CATEGORY streamCategory +#endif + ) { IXAudio2Impl *This = impl_from_IXAudio2(iface);
- TRACE("(%p)->(%p, %u, %u, 0x%x, %s, %p, 0x%x)\n", This, - ppMasteringVoice, inputChannels, inputSampleRate, flags, - wine_dbgstr_w(deviceId), pEffectChain, streamCategory); + TRACE("(%p)->(%p, %u, %u, 0x%x, %p)\n", This, + ppMasteringVoice, inputChannels, inputSampleRate, flags, pEffectChain);
EnterCriticalSection(&This->lock);
- /* Note that we don't have paths for each XAUDIO2_VER here. - * All versions < 8 have a very different CreateMasteringVoice, so we - * implement those separately in compat.c. - * -flibit - */ *ppMasteringVoice = &This->mst.IXAudio2MasteringVoice_iface;
EnterCriticalSection(&This->mst.lock); @@ -1683,9 +1717,18 @@ static HRESULT WINAPI IXAudio2Impl_CreateMasteringVoice(IXAudio2 *iface,
This->mst.effect_chain = wrap_effect_chain(pEffectChain);
+#if XAUDIO2_VER >= 8 + TRACE("device id %s, category %#x\n", debugstr_w(deviceId), streamCategory); + FAudio_CreateMasteringVoice8(This->faudio, &This->mst.faudio_voice, inputChannels, inputSampleRate, flags, NULL /* TODO: (uint16_t*)deviceId */, This->mst.effect_chain, (FAudioStreamCategory)streamCategory); +#else + TRACE("device index %u\n", index); + + FAudio_CreateMasteringVoice(This->faudio, &This->mst.faudio_voice, inputChannels, + inputSampleRate, flags, index, This->mst.effect_chain); +#endif
This->mst.in_use = TRUE;
@@ -1722,14 +1765,38 @@ static HRESULT WINAPI IXAudio2Impl_CommitChanges(IXAudio2 *iface, return FAudio_CommitOperationSet(This->faudio, operationSet); }
-static void WINAPI IXAudio2Impl_GetPerformanceData(IXAudio2 *iface, - XAUDIO2_PERFORMANCE_DATA *pPerfData) +static void WINAPI IXAudio2Impl_GetPerformanceData(IXAudio2 *iface, XAUDIO2_PERFORMANCE_DATA *data) { - IXAudio2Impl *This = impl_from_IXAudio2(iface); + IXAudio2Impl *audio = impl_from_IXAudio2(iface); + FAudioPerformanceData faudio_data;
- TRACE("(%p)->(%p)\n", This, pPerfData); + TRACE("(%p)->(%p)\n", audio, data);
- FAudio_GetPerformanceData(This->faudio, (FAudioPerformanceData *)pPerfData); + FAudio_GetPerformanceData(audio->faudio, &faudio_data); + + data->AudioCyclesSinceLastQuery = faudio_data.AudioCyclesSinceLastQuery; + data->TotalCyclesSinceLastQuery = faudio_data.TotalCyclesSinceLastQuery; + data->MinimumCyclesPerQuantum = faudio_data.MinimumCyclesPerQuantum; + data->MaximumCyclesPerQuantum = faudio_data.MaximumCyclesPerQuantum; + data->MemoryUsageInBytes = faudio_data.MemoryUsageInBytes; + data->CurrentLatencyInSamples = faudio_data.CurrentLatencyInSamples; +#if XAUDIO2_VER == 0 + data->GlitchesSinceLastQuery = faudio_data.GlitchesSinceEngineStarted - audio->last_query_glitches; + audio->last_query_glitches = faudio_data.GlitchesSinceEngineStarted; +#else + data->GlitchesSinceEngineStarted = faudio_data.GlitchesSinceEngineStarted; +#endif + data->ActiveSourceVoiceCount = faudio_data.ActiveSourceVoiceCount; + data->TotalSourceVoiceCount = faudio_data.TotalSourceVoiceCount; + data->ActiveSubmixVoiceCount = faudio_data.ActiveSubmixVoiceCount; +#if XAUDIO2_VER <= 2 + data->TotalSubmixVoiceCount = faudio_data.ActiveSubmixVoiceCount; +#else + data->ActiveResamplerCount = faudio_data.ActiveResamplerCount; + data->ActiveMatrixMixCount = faudio_data.ActiveMatrixMixCount; +#endif + data->ActiveXmaSourceVoices = faudio_data.ActiveXmaSourceVoices; + data->ActiveXmaStreams = faudio_data.ActiveXmaStreams; }
static void WINAPI IXAudio2Impl_SetDebugConfiguration(IXAudio2 *iface, @@ -1743,12 +1810,16 @@ static void WINAPI IXAudio2Impl_SetDebugConfiguration(IXAudio2 *iface, FAudio_SetDebugConfiguration(This->faudio, (FAudioDebugConfiguration *)pDebugConfiguration, pReserved); }
-/* XAudio2 2.8 */ static const IXAudio2Vtbl XAudio2_Vtbl = { IXAudio2Impl_QueryInterface, IXAudio2Impl_AddRef, IXAudio2Impl_Release, +#if XAUDIO2_VER <= 7 + IXAudio2Impl_GetDeviceCount, + IXAudio2Impl_GetDeviceDetails, + IXAudio2Impl_Initialize, +#endif IXAudio2Impl_RegisterForCallbacks, IXAudio2Impl_UnregisterForCallbacks, IXAudio2Impl_CreateSourceVoice, @@ -1825,27 +1896,8 @@ static HRESULT WINAPI XAudio2CF_CreateInstance(IClassFactory *iface, IUnknown *p return E_OUTOFMEMORY;
object->IXAudio2_iface.lpVtbl = &XAudio2_Vtbl; - -#if XAUDIO2_VER == 0 - object->IXAudio20_iface.lpVtbl = &XAudio20_Vtbl; -#elif XAUDIO2_VER <= 2 - object->IXAudio22_iface.lpVtbl = &XAudio22_Vtbl; -#elif XAUDIO2_VER <= 3 - object->IXAudio23_iface.lpVtbl = &XAudio23_Vtbl; -#elif XAUDIO2_VER <= 7 - object->IXAudio27_iface.lpVtbl = &XAudio27_Vtbl; -#endif - object->mst.IXAudio2MasteringVoice_iface.lpVtbl = &XAudio2MasteringVoice_Vtbl;
-#if XAUDIO2_VER == 0 - object->mst.IXAudio20MasteringVoice_iface.lpVtbl = &XAudio20MasteringVoice_Vtbl; -#elif XAUDIO2_VER <= 3 - object->mst.IXAudio23MasteringVoice_iface.lpVtbl = &XAudio23MasteringVoice_Vtbl; -#elif XAUDIO2_VER <= 7 - object->mst.IXAudio27MasteringVoice_iface.lpVtbl = &XAudio27MasteringVoice_Vtbl; -#endif - object->FAudioEngineCallback_vtbl = FAudioEngineCallback_Vtbl;
list_init(&object->voices); @@ -1914,44 +1966,23 @@ HRESULT xaudio2_initialize(IXAudio2Impl *This, UINT32 flags, XAUDIO2_PROCESSOR p return FAudio_Initialize(This->faudio, flags, FAUDIO_DEFAULT_PROCESSOR); }
+#if XAUDIO2_VER <= 7 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv) { TRACE("(%s, %s, %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
- if(IsEqualGUID(rclsid, &CLSID_XAudio20) || - IsEqualGUID(rclsid, &CLSID_XAudio21) || - IsEqualGUID(rclsid, &CLSID_XAudio22) || - IsEqualGUID(rclsid, &CLSID_XAudio23) || - IsEqualGUID(rclsid, &CLSID_XAudio24) || - IsEqualGUID(rclsid, &CLSID_XAudio25) || - IsEqualGUID(rclsid, &CLSID_XAudio26) || - IsEqualGUID(rclsid, &CLSID_XAudio27)) + if (IsEqualGUID(rclsid, &CLSID_XAudio2)) return make_xaudio2_factory(riid, ppv);
- if(IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter20) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter21) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter22) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter23) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter24) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter25) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter26) || - IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter27)) - return make_xapo_factory(&CLSID_AudioVolumeMeter27, riid, ppv); - - if(IsEqualGUID(rclsid, &CLSID_AudioReverb20) || - IsEqualGUID(rclsid, &CLSID_AudioReverb21) || - IsEqualGUID(rclsid, &CLSID_AudioReverb22) || - IsEqualGUID(rclsid, &CLSID_AudioReverb23) || - IsEqualGUID(rclsid, &CLSID_AudioReverb24) || - IsEqualGUID(rclsid, &CLSID_AudioReverb25) || - IsEqualGUID(rclsid, &CLSID_AudioReverb26) || - IsEqualGUID(rclsid, &CLSID_AudioReverb27)) - return make_xapo_factory(&CLSID_AudioReverb27, riid, ppv); + if (IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter)) + return make_xapo_factory(&CLSID_AudioVolumeMeter, riid, ppv); + + if (IsEqualGUID(rclsid, &CLSID_AudioReverb)) + return make_xapo_factory(&CLSID_AudioReverb, riid, ppv);
return CLASS_E_CLASSNOTAVAILABLE; } - -#if XAUDIO2_VER >= 8 +#else HRESULT WINAPI XAudio2Create(IXAudio2 **ppxa2, UINT32 flags, XAUDIO2_PROCESSOR proc) { HRESULT hr; diff --git a/dlls/xaudio2_7/xaudio_private.h b/dlls/xaudio2_7/xaudio_private.h index c24bddff80b..0f87b83f999 100644 --- a/dlls/xaudio2_7/xaudio_private.h +++ b/dlls/xaudio2_7/xaudio_private.h @@ -20,7 +20,10 @@ #include "windef.h" #include "wine/list.h"
-#include "xaudio2.h" +/* Don't include xaudio2.h directly; it's generated from an IDL with ifdefs and + * hence is frozen at version 2.7. Instead include that IDL in a local IDL and + * include the generated header. */ +#include "xaudio_classes.h" #include "xapo.h"
#include <FAudio.h> @@ -52,31 +55,10 @@ typedef struct _XA2XAPOFXImpl {
typedef struct _XA2VoiceImpl { IXAudio2SourceVoice IXAudio2SourceVoice_iface; -#if XAUDIO2_VER == 0 - IXAudio20SourceVoice IXAudio20SourceVoice_iface; -#elif XAUDIO2_VER <= 3 - IXAudio23SourceVoice IXAudio23SourceVoice_iface; -#elif XAUDIO2_VER <= 7 - IXAudio27SourceVoice IXAudio27SourceVoice_iface; -#endif
IXAudio2SubmixVoice IXAudio2SubmixVoice_iface; -#if XAUDIO2_VER == 0 - IXAudio20SubmixVoice IXAudio20SubmixVoice_iface; -#elif XAUDIO2_VER <= 3 - IXAudio23SubmixVoice IXAudio23SubmixVoice_iface; -#elif XAUDIO2_VER <= 7 - IXAudio27SubmixVoice IXAudio27SubmixVoice_iface; -#endif
IXAudio2MasteringVoice IXAudio2MasteringVoice_iface; -#if XAUDIO2_VER == 0 - IXAudio20MasteringVoice IXAudio20MasteringVoice_iface; -#elif XAUDIO2_VER <= 3 - IXAudio23MasteringVoice IXAudio23MasteringVoice_iface; -#elif XAUDIO2_VER <= 7 - IXAudio27MasteringVoice IXAudio27MasteringVoice_iface; -#endif
FAudioVoiceCallback FAudioVoiceCallback_vtbl; FAudioEffectChain *effect_chain; @@ -101,16 +83,6 @@ typedef struct _XA2VoiceImpl { typedef struct _IXAudio2Impl { IXAudio2 IXAudio2_iface;
-#if XAUDIO2_VER == 0 - IXAudio20 IXAudio20_iface; -#elif XAUDIO2_VER <= 2 - IXAudio22 IXAudio22_iface; -#elif XAUDIO2_VER <= 3 - IXAudio23 IXAudio23_iface; -#elif XAUDIO2_VER <= 7 - IXAudio27 IXAudio27_iface; -#endif - CRITICAL_SECTION lock;
struct list voices; @@ -127,39 +99,6 @@ typedef struct _IXAudio2Impl { IXAudio2EngineCallback **cbs; } IXAudio2Impl;
-#if XAUDIO2_VER == 0 -extern const IXAudio20SourceVoiceVtbl XAudio20SourceVoice_Vtbl DECLSPEC_HIDDEN; -extern const IXAudio20SubmixVoiceVtbl XAudio20SubmixVoice_Vtbl DECLSPEC_HIDDEN; -extern const IXAudio20MasteringVoiceVtbl XAudio20MasteringVoice_Vtbl DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio20SourceVoice(IXAudio20SourceVoice *iface) DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio20SubmixVoice(IXAudio20SubmixVoice *iface) DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio20MasteringVoice(IXAudio20MasteringVoice *iface) DECLSPEC_HIDDEN; -#elif XAUDIO2_VER <= 3 -extern const IXAudio23SourceVoiceVtbl XAudio23SourceVoice_Vtbl DECLSPEC_HIDDEN; -extern const IXAudio23SubmixVoiceVtbl XAudio23SubmixVoice_Vtbl DECLSPEC_HIDDEN; -extern const IXAudio23MasteringVoiceVtbl XAudio23MasteringVoice_Vtbl DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio23SourceVoice(IXAudio23SourceVoice *iface) DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio23SubmixVoice(IXAudio23SubmixVoice *iface) DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio23MasteringVoice(IXAudio23MasteringVoice *iface) DECLSPEC_HIDDEN; -#elif XAUDIO2_VER <= 7 -extern const IXAudio27SourceVoiceVtbl XAudio27SourceVoice_Vtbl DECLSPEC_HIDDEN; -extern const IXAudio27SubmixVoiceVtbl XAudio27SubmixVoice_Vtbl DECLSPEC_HIDDEN; -extern const IXAudio27MasteringVoiceVtbl XAudio27MasteringVoice_Vtbl DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio27SourceVoice(IXAudio27SourceVoice *iface) DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio27SubmixVoice(IXAudio27SubmixVoice *iface) DECLSPEC_HIDDEN; -extern XA2VoiceImpl *impl_from_IXAudio27MasteringVoice(IXAudio27MasteringVoice *iface) DECLSPEC_HIDDEN; -#endif - -#if XAUDIO2_VER == 0 -extern const IXAudio20Vtbl XAudio20_Vtbl DECLSPEC_HIDDEN; -#elif XAUDIO2_VER <= 2 -extern const IXAudio22Vtbl XAudio22_Vtbl DECLSPEC_HIDDEN; -#elif XAUDIO2_VER <= 3 -extern const IXAudio23Vtbl XAudio23_Vtbl DECLSPEC_HIDDEN; -#elif XAUDIO2_VER <= 7 -extern const IXAudio27Vtbl XAudio27_Vtbl DECLSPEC_HIDDEN; -#endif - /* xaudio_dll.c */ extern HRESULT xaudio2_initialize(IXAudio2Impl *This, UINT32 flags, XAUDIO2_PROCESSOR proc) DECLSPEC_HIDDEN; extern FAudioEffectChain *wrap_effect_chain(const XAUDIO2_EFFECT_CHAIN *pEffectChain) DECLSPEC_HIDDEN; diff --git a/dlls/xaudio2_8/Makefile.in b/dlls/xaudio2_8/Makefile.in index 3e00abd892d..131da70954a 100644 --- a/dlls/xaudio2_8/Makefile.in +++ b/dlls/xaudio2_8/Makefile.in @@ -1,11 +1,11 @@ EXTRADEFS = -DXAUDIO2_VER=8 MODULE = xaudio2_8.dll +IMPORTLIB = xaudio2_8 IMPORTS = $(FAUDIO_PE_LIBS) advapi32 ole32 user32 uuid EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ x3daudio.c \ xapo.c \ xapofx.c \ diff --git a/dlls/xaudio2_8/tests/Makefile.in b/dlls/xaudio2_8/tests/Makefile.in new file mode 100644 index 00000000000..f8e0eae50e4 --- /dev/null +++ b/dlls/xaudio2_8/tests/Makefile.in @@ -0,0 +1,9 @@ +TESTDLL = xaudio2_8.dll +IMPORTS = ole32 xaudio2_8 +EXTRADEFS = -DXAUDIO2_VER=8 +PARENTSRC = ../../xaudio2_7/tests + +C_SRCS = \ + xaudio2.c + +IDL_SRCS = xaudio_classes.idl diff --git a/dlls/xaudio2_9/Makefile.in b/dlls/xaudio2_9/Makefile.in index eb299816b55..51f69c7ba7d 100644 --- a/dlls/xaudio2_9/Makefile.in +++ b/dlls/xaudio2_9/Makefile.in @@ -5,7 +5,6 @@ EXTRAINCL = $(FAUDIO_PE_CFLAGS) PARENTSRC = ../xaudio2_7
C_SRCS = \ - compat.c \ x3daudio.c \ xapo.c \ xapofx.c \ diff --git a/include/xaudio2.idl b/include/xaudio2.idl index e9aeacc7ba8..d0e781fe1c6 100644 --- a/include/xaudio2.idl +++ b/include/xaudio2.idl @@ -16,6 +16,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
+#ifndef XAUDIO2_VER +#define XAUDIO2_VER 9 +#endif + import "unknwn.idl"; import "mmdeviceapi.idl";
@@ -23,69 +27,57 @@ import "audiosessiontypes.h";
cpp_quote("#include <pshpack1.h>")
-[ - uuid(fac23f48-31f5-45a8-b49b-5225d61401aa) -] -coclass XAudio20 { - interface IUnknown; -} +#if XAUDIO2_VER <= 7
[ + threading(both), +#if XAUDIO2_VER == 0 + uuid(fac23f48-31f5-45a8-b49b-5225d61401aa) +#elif XAUDIO2_VER == 1 uuid(e21a7345-eb21-468e-be50-804db97cf708) -] -coclass XAudio21 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 2 uuid(b802058a-464a-42db-bc10-b650d6f2586a) -] -coclass XAudio22 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 3 uuid(4c5e637a-16c7-4de3-9c46-5ed22181962d) -] -coclass XAudio23 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 4 uuid(03219e78-5bc3-44d1-b92e-f63d89cc6526) -] -coclass XAudio24 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 5 uuid(4c9b6dde-6809-46e6-a278-9b6a97588670) -] -coclass XAudio25 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 6 uuid(3eda9b49-2085-498b-9bb2-39a6778493de) -] -coclass XAudio26 { - interface IUnknown; -} - -[ +#else uuid(5a508685-a254-4fba-9b82-9a24b00306af) +#endif ] -coclass XAudio27 { +coclass XAudio2 { interface IUnknown; }
[ +#if XAUDIO2_VER == 0 + uuid(fac23f48-31f5-45a8-b49b-5225d61401db) +#elif XAUDIO2_VER == 1 + uuid(f7a76c21-53d4-46bb-ac53-8b459cae46bd) +#elif XAUDIO2_VER == 2 + uuid(97dfb7e7-5161-4015-87a9-c79e6a1952cc) +#elif XAUDIO2_VER == 3 + uuid(ef0aa05d-8075-4e5d-bead-45be0c3ccbb3) +#elif XAUDIO2_VER == 4 + uuid(4256535c-1ea4-4d4b-8ad5-f9db762eca9e) +#elif XAUDIO2_VER == 5 + uuid(715bdd1a-aa82-436b-b0fa-6acea39bd0a1) +#elif XAUDIO2_VER == 6 + uuid(47199894-7cc2-444d-9873-ced2562cc60e) +#else uuid(db05ea35-0329-4d4b-a53a-6dead03d3852) +#endif ] coclass XAudio2Debug { interface IUnknown; }
+#endif + cpp_quote("#if 0") typedef struct WAVEFORMATEX { @@ -160,50 +152,24 @@ typedef struct XAUDIO2_PERFORMANCE_DATA UINT32 MaximumCyclesPerQuantum; UINT32 MemoryUsageInBytes; UINT32 CurrentLatencyInSamples; +#if XAUDIO2_VER == 0 + UINT32 GlitchesSinceLastQuery; +#else UINT32 GlitchesSinceEngineStarted; +#endif UINT32 ActiveSourceVoiceCount; UINT32 TotalSourceVoiceCount; UINT32 ActiveSubmixVoiceCount; +#if XAUDIO2_VER <= 2 + UINT32 TotalSubmixVoiceCount; +#else UINT32 ActiveResamplerCount; UINT32 ActiveMatrixMixCount; +#endif UINT32 ActiveXmaSourceVoices; UINT32 ActiveXmaStreams; } XAUDIO2_PERFORMANCE_DATA;
-typedef struct XAUDIO22_PERFORMANCE_DATA -{ - UINT64 AudioCyclesSinceLastQuery; - UINT64 TotalCyclesSinceLastQuery; - UINT32 MinimumCyclesPerQuantum; - UINT32 MaximumCyclesPerQuantum; - UINT32 MemoryUsageInBytes; - UINT32 CurrentLatencyInSamples; - UINT32 GlitchesSinceEngineStarted; - UINT32 ActiveSourceVoiceCount; - UINT32 TotalSourceVoiceCount; - UINT32 ActiveSubmixVoiceCount; - UINT32 TotalSubmixVoiceCount; - UINT32 ActiveXmaSourceVoices; - UINT32 ActiveXmaStreams; -} XAUDIO22_PERFORMANCE_DATA; - -typedef struct XAUDIO20_PERFORMANCE_DATA -{ - UINT64 AudioCyclesSinceLastQuery; - UINT64 TotalCyclesSinceLastQuery; - UINT32 MinimumCyclesPerQuantum; - UINT32 MaximumCyclesPerQuantum; - UINT32 MemoryUsageInBytes; - UINT32 CurrentLatencyInSamples; - UINT32 GlitchesSinceLastQuery; - UINT32 ActiveSourceVoiceCount; - UINT32 TotalSourceVoiceCount; - UINT32 ActiveSubmixVoiceCount; - UINT32 TotalSubmixVoiceCount; - UINT32 ActiveXmaSourceVoices; - UINT32 ActiveXmaStreams; -} XAUDIO20_PERFORMANCE_DATA; - typedef enum XAUDIO2_DEVICE_ROLE { NotDefaultDevice = 0x0, @@ -215,6 +181,7 @@ typedef enum XAUDIO2_DEVICE_ROLE InvalidDeviceRole = ~GlobalDefaultDevice } XAUDIO2_DEVICE_ROLE;
+#if XAUDIO2_VER <= 7 typedef struct XAUDIO2_DEVICE_DETAILS { WCHAR DeviceID[256]; @@ -222,40 +189,37 @@ typedef struct XAUDIO2_DEVICE_DETAILS XAUDIO2_DEVICE_ROLE Role; WAVEFORMATEXTENSIBLE OutputFormat; } XAUDIO2_DEVICE_DETAILS; - -typedef struct XAUDIO27_VOICE_DETAILS -{ - UINT32 CreationFlags; - UINT32 InputChannels; - UINT32 InputSampleRate; -} XAUDIO27_VOICE_DETAILS; +#endif
typedef struct XAUDIO2_VOICE_DETAILS { UINT32 CreationFlags; +#if XAUDIO2_VER >= 8 UINT32 ActiveFlags; +#endif UINT32 InputChannels; UINT32 InputSampleRate; } XAUDIO2_VOICE_DETAILS;
+#if XAUDIO2_VER <= 3 +typedef struct XAUDIO2_VOICE_SENDS +{ + UINT32 OutputCount; + IXAudio2Voice **pOutputVoices; +} XAUDIO2_VOICE_SENDS; +#else typedef struct XAUDIO2_SEND_DESCRIPTOR { UINT32 Flags; IXAudio2Voice* pOutputVoice; } XAUDIO2_SEND_DESCRIPTOR;
-/* XAudio2 2.3's XAUDIO2_VOICE_SENDS struct */ -typedef struct XAUDIO23_VOICE_SENDS -{ - UINT32 OutputCount; - IXAudio2Voice **pOutputVoices; -} XAUDIO23_VOICE_SENDS; - typedef struct XAUDIO2_VOICE_SENDS { UINT32 SendCount; XAUDIO2_SEND_DESCRIPTOR* pSends; } XAUDIO2_VOICE_SENDS; +#endif
typedef struct XAUDIO2_EFFECT_DESCRIPTOR { @@ -282,15 +246,21 @@ const float XAUDIO2_MAX_FREQ_RATIO = 1024.0; const float XAUDIO2_DEFAULT_FREQ_RATIO = 2.0; const float XAUDIO2_MAX_FILTER_ONEOVERQ = 1.5; const float XAUDIO2_MAX_FILTER_FREQUENCY = 1.0; +#if XAUDIO2_VER > 0 const UINT32 XAUDIO2_MAX_LOOP_COUNT = 254; -const UINT32 XAUDIO20_MAX_LOOP_COUNT = 0x100000; /* xaudio 2.0 */ +#else +const UINT32 XAUDIO2_MAX_LOOP_COUNT = 0x100000; +#endif
const UINT32 XAUDIO2_COMMIT_NOW = 0; const UINT32 XAUDIO2_COMMIT_ALL = 0; const UINT32 XAUDIO2_INVALID_OPSET = 0xffffffff; const UINT32 XAUDIO2_NO_LOOP_REGION = 0; +#if XAUDIO2_VER > 0 const UINT32 XAUDIO2_LOOP_INFINITE = 255; -const UINT32 XAUDIO20_LOOP_INFINITE = ((UINT)-1); /* xaudio 2.0 */ +#else +const UINT32 XAUDIO2_LOOP_INFINITE = ((UINT)-1); +#endif const UINT32 XAUDIO2_DEFAULT_CHANNELS = 0; const UINT32 XAUDIO2_DEFAULT_SAMPLERATE = 0;
@@ -322,18 +292,15 @@ typedef struct XAUDIO2_FILTER_PARAMETERS float OneOverQ; } XAUDIO2_FILTER_PARAMETERS;
-/* XAudio 2.0's IXAudio2Voice */ -/* XAudio2 2.0's IXAudio2Voice interface. Actually called - * IXAudio2Voice in the Mar 2008 DX SDK */ [ object, local ] -interface IXAudio20Voice +interface IXAudio2Voice { - void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails); + void GetVoiceDetails([out] XAUDIO2_VOICE_DETAILS* pVoiceDetails);
- HRESULT SetOutputVoices([in] const XAUDIO23_VOICE_SENDS* pSendList); + HRESULT SetOutputVoices([in] const XAUDIO2_VOICE_SENDS* pSendList);
HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain);
@@ -366,6 +333,17 @@ interface IXAudio20Voice
void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters);
+#if XAUDIO2_VER >= 4 + HRESULT SetOutputFilterParameters( + [in] IXAudio2Voice* pDestinationVoice, + [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, + [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + + void GetOutputFilterParameters( + [in] IXAudio2Voice* pDestinationVoice, + [out] XAUDIO2_FILTER_PARAMETERS* pParameters); +#endif + HRESULT SetVolume( [in] float Volume, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); @@ -388,7 +366,12 @@ interface IXAudio20Voice [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);
- HRESULT GetOutputMatrix( +#if XAUDIO2_VER == 0 + HRESULT +#else + void +#endif + GetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, @@ -397,791 +380,147 @@ interface IXAudio20Voice void DestroyVoice(); }
-/* XAudio 2.3's IXAudio2Voice */ -/* XAudio2 2.3's IXAudio2Voice interface. Actually called - * IXAudio2Voice in the Nov 2008 DX SDK */ -[ - object, - local -] -interface IXAudio23Voice +typedef struct XAUDIO2_BUFFER { - void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails); - - HRESULT SetOutputVoices([in] const XAUDIO23_VOICE_SENDS* pSendList); + UINT32 Flags; + UINT32 AudioBytes; + const BYTE* pAudioData; + UINT32 PlayBegin; + UINT32 PlayLength; + UINT32 LoopBegin; + UINT32 LoopLength; + UINT32 LoopCount; + void* pContext; +} XAUDIO2_BUFFER;
- HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); +typedef struct XAUDIO2_BUFFER_WMA +{ + const UINT32* pDecodedPacketCumulativeBytes; + UINT32 PacketCount; +} XAUDIO2_BUFFER_WMA;
- HRESULT EnableEffect( - [in] UINT32 EffectIndex, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); +typedef struct XAUDIO2_VOICE_STATE +{ + void* pCurrentBufferContext; + UINT32 BuffersQueued; + UINT64 SamplesPlayed; +} XAUDIO2_VOICE_STATE;
- HRESULT DisableEffect( - [in] UINT32 EffectIndex, +[ + local +] +interface IXAudio2SourceVoice : IXAudio2Voice +{ + HRESULT Start( + [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);
- void GetEffectState( - [in] UINT32 EffectIndex, - [out] BOOL* pEnabled); - - HRESULT SetEffectParameters( - [in] UINT32 EffectIndex, - [in] const void* pParameters, - [in] UINT32 ParametersByteSize, + HRESULT Stop( + [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);
- HRESULT GetEffectParameters( - [in] UINT32 EffectIndex, - [out] void* pParameters, - [in] UINT32 ParametersByteSize); + HRESULT SubmitSourceBuffer( + [in] const XAUDIO2_BUFFER* pBuffer, + [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA);
- HRESULT SetFilterParameters( - [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + HRESULT FlushSourceBuffers();
- void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); + HRESULT Discontinuity();
- HRESULT SetVolume( - [in] float Volume, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);
- void GetVolume([out] float* pVolume); +#if XAUDIO2_VER >= 8 + void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState, [in, defaultvalue(0)] UINT32 Flags); +#else + void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); +#endif
- HRESULT SetChannelVolumes( - [in] UINT32 Channels, - [in, size_is(Channels)] const float* pVolumes, + HRESULT SetFrequencyRatio( + [in] float Ratio, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);
- void GetChannelVolumes( - [in] UINT32 Channels, - [out, size_is(Channels)] float* pVolumes); + void GetFrequencyRatio([out] float* pRatio);
- HRESULT SetOutputMatrix( - [in] IXAudio2Voice* pDestinationVoice, - [in] UINT32 SourceChannels, - [in] UINT32 DestinationChannels, - [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); +#if XAUDIO2_VER >= 4 + HRESULT SetSourceSampleRate([in] UINT32 NewSourceSampleRate); +#endif +}
- void GetOutputMatrix( - [in] IXAudio2Voice* pDestinationVoice, - [in] UINT32 SourceChannels, - [in] UINT32 DestinationChannels, - [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); +[ + local +] +interface IXAudio2SubmixVoice : IXAudio2Voice +{ +}
- void DestroyVoice(); +[ + local +] +interface IXAudio2MasteringVoice : IXAudio2Voice +{ +#if XAUDIO2_VER >= 8 + void GetChannelMask([out] DWORD *pChannelMask); +#endif }
-/* XAudio 2.7's IXAudio2Voice */ -/* XAudio2 2.7's IXAudio2Voice interface. Actually called - * IXAudio2Voice in the Jun 2010 DX SDK */ [ object, local ] -interface IXAudio27Voice +interface IXAudio2VoiceCallback { - void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails); +#if XAUDIO2_VER > 0 + void OnVoiceProcessingPassStart([in] UINT32 BytesRequired); +#else + void OnVoiceProcessingPassStart(); +#endif
- HRESULT SetOutputVoices([in] const XAUDIO2_VOICE_SENDS* pSendList); + void OnVoiceProcessingPassEnd();
- HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); + void OnStreamEnd();
- HRESULT EnableEffect( - [in] UINT32 EffectIndex, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + void OnBufferStart([in] void* pBufferContext);
- HRESULT DisableEffect( - [in] UINT32 EffectIndex, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + void OnBufferEnd([in] void* pBufferContext);
- void GetEffectState( - [in] UINT32 EffectIndex, - [out] BOOL* pEnabled); + void OnLoopEnd([in] void* pBufferContext);
- HRESULT SetEffectParameters( - [in] UINT32 EffectIndex, - [in] const void* pParameters, - [in] UINT32 ParametersByteSize, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + void OnVoiceError( + [in] void* pBuffercontext, + [in] HRESULT Error); +}
- HRESULT GetEffectParameters( - [in] UINT32 EffectIndex, - [out] void* pParameters, - [in] UINT32 ParametersByteSize); +typedef struct XAUDIO2_DEBUG_CONFIGURATION +{ + UINT32 TraceMask; + UINT32 BreakMask; + BOOL LogThreadID; + BOOL LogFileline; + BOOL LogFunctionName; + BOOL LogTiming; +} XAUDIO2_DEBUG_CONFIGURATION;
- HRESULT SetFilterParameters( - [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); +[ + object, +#if XAUDIO2_VER <= 7 + uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb) +#elif XAUDIO2_VER == 8 + uuid(60d8dac8-5aa1-4e8e-b597-2f5e2883d484) +#else + uuid(2b02e3cf-2e0b-4ec3-be45-1b2a3fe7210d) +#endif +] +/* XAudio2 2.9's IXAudio2 interface. */ +interface IXAudio2 : IUnknown +{ +#if XAUDIO2_VER <= 7 + HRESULT GetDeviceCount(UINT32 *count);
- void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); + HRESULT GetDeviceDetails(UINT32 index, XAUDIO2_DEVICE_DETAILS *details);
- HRESULT SetOutputFilterParameters( - [in] IXAudio2Voice* pDestinationVoice, - [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); + HRESULT Initialize(UINT32 flags, XAUDIO2_PROCESSOR processor); +#endif
- void GetOutputFilterParameters( - [in] IXAudio2Voice* pDestinationVoice, - [out] XAUDIO2_FILTER_PARAMETERS* pParameters); - - HRESULT SetVolume( - [in] float Volume, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetVolume([out] float* pVolume); - - HRESULT SetChannelVolumes( - [in] UINT32 Channels, - [in, size_is(Channels)] const float* pVolumes, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetChannelVolumes( - [in] UINT32 Channels, - [out, size_is(Channels)] float* pVolumes); - - HRESULT SetOutputMatrix( - [in] IXAudio2Voice* pDestinationVoice, - [in] UINT32 SourceChannels, - [in] UINT32 DestinationChannels, - [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetOutputMatrix( - [in] IXAudio2Voice* pDestinationVoice, - [in] UINT32 SourceChannels, - [in] UINT32 DestinationChannels, - [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); - - void DestroyVoice(); -} - -[ - object, - local -] -interface IXAudio2Voice -{ - void GetVoiceDetails([out] XAUDIO2_VOICE_DETAILS* pVoiceDetails); - - HRESULT SetOutputVoices([in] const XAUDIO2_VOICE_SENDS* pSendList); - - HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT EnableEffect( - [in] UINT32 EffectIndex, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT DisableEffect( - [in] UINT32 EffectIndex, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetEffectState( - [in] UINT32 EffectIndex, - [out] BOOL* pEnabled); - - HRESULT SetEffectParameters( - [in] UINT32 EffectIndex, - [in] const void* pParameters, - [in] UINT32 ParametersByteSize, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT GetEffectParameters( - [in] UINT32 EffectIndex, - [out] void* pParameters, - [in] UINT32 ParametersByteSize); - - HRESULT SetFilterParameters( - [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); - - HRESULT SetOutputFilterParameters( - [in] IXAudio2Voice* pDestinationVoice, - [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetOutputFilterParameters( - [in] IXAudio2Voice* pDestinationVoice, - [out] XAUDIO2_FILTER_PARAMETERS* pParameters); - - HRESULT SetVolume( - [in] float Volume, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetVolume([out] float* pVolume); - - HRESULT SetChannelVolumes( - [in] UINT32 Channels, - [in, size_is(Channels)] const float* pVolumes, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetChannelVolumes( - [in] UINT32 Channels, - [out, size_is(Channels)] float* pVolumes); - - HRESULT SetOutputMatrix( - [in] IXAudio2Voice* pDestinationVoice, - [in] UINT32 SourceChannels, - [in] UINT32 DestinationChannels, - [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetOutputMatrix( - [in] IXAudio2Voice* pDestinationVoice, - [in] UINT32 SourceChannels, - [in] UINT32 DestinationChannels, - [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); - - void DestroyVoice(); -} - -typedef struct XAUDIO2_BUFFER -{ - UINT32 Flags; - UINT32 AudioBytes; - const BYTE* pAudioData; - UINT32 PlayBegin; - UINT32 PlayLength; - UINT32 LoopBegin; - UINT32 LoopLength; - UINT32 LoopCount; - void* pContext; -} XAUDIO2_BUFFER; - -typedef struct XAUDIO2_BUFFER_WMA -{ - const UINT32* pDecodedPacketCumulativeBytes; - UINT32 PacketCount; -} XAUDIO2_BUFFER_WMA; - -typedef struct XAUDIO2_VOICE_STATE -{ - void* pCurrentBufferContext; - UINT32 BuffersQueued; - UINT64 SamplesPlayed; -} XAUDIO2_VOICE_STATE; - -[ - local -] -/* XAudio2 2.0's IXAudio2SourceVoice interface. Actually called - * IXAudio2SourceVoice in the Mar 2008 DX SDK */ -interface IXAudio20SourceVoice : IXAudio20Voice -{ - HRESULT Start( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT Stop( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT SubmitSourceBuffer( - [in] const XAUDIO2_BUFFER* pBuffer, - [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); - - HRESULT FlushSourceBuffers(); - - HRESULT Discontinuity(); - - HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); - - HRESULT SetFrequencyRatio( - [in] float Ratio, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetFrequencyRatio([out] float* pRatio); -} - -[ - local -] -/* XAudio2 2.3's IXAudio2SourceVoice interface. Actually called - * IXAudio2SourceVoice in the Nov 2008 DX SDK */ -interface IXAudio23SourceVoice : IXAudio23Voice -{ - HRESULT Start( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT Stop( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT SubmitSourceBuffer( - [in] const XAUDIO2_BUFFER* pBuffer, - [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); - - HRESULT FlushSourceBuffers(); - - HRESULT Discontinuity(); - - HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); - - HRESULT SetFrequencyRatio( - [in] float Ratio, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetFrequencyRatio([out] float* pRatio); -} - -[ - local -] -/* XAudio2 2.7's IXAudio2SourceVoice interface. Actually called - * IXAudio2SourceVoice in the Jun 2010 DX SDK */ -interface IXAudio27SourceVoice : IXAudio27Voice -{ - HRESULT Start( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT Stop( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT SubmitSourceBuffer( - [in] const XAUDIO2_BUFFER* pBuffer, - [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); - - HRESULT FlushSourceBuffers(); - - HRESULT Discontinuity(); - - HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); - - HRESULT SetFrequencyRatio( - [in] float Ratio, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetFrequencyRatio([out] float* pRatio); - - HRESULT SetSourceSampleRate([in] UINT32 NewSourceSampleRate); -} - -[ - local -] -/* XAudio2 2.8's IXAudio2SourceVoice interface. */ -interface IXAudio2SourceVoice : IXAudio2Voice -{ - HRESULT Start( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT Stop( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - HRESULT SubmitSourceBuffer( - [in] const XAUDIO2_BUFFER* pBuffer, - [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); - - HRESULT FlushSourceBuffers(); - - HRESULT Discontinuity(); - - HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState, [in, defaultvalue(0)] UINT32 Flags); - - HRESULT SetFrequencyRatio( - [in] float Ratio, - [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); - - void GetFrequencyRatio([out] float* pRatio); - - HRESULT SetSourceSampleRate([in] UINT32 NewSourceSampleRate); -} - -[ - local -] -/* XAudio2 2.0's IXAudio2SubmixVoice interface. Actually called - * IXAudio2SubmixVoice in the Mar 2008 DX SDK */ -interface IXAudio20SubmixVoice : IXAudio20Voice -{ -} - -[ - local -] -/* XAudio2 2.3's IXAudio2SubmixVoice interface. Actually called - * IXAudio2SubmixVoice in the Nov 2008 DX SDK */ -interface IXAudio23SubmixVoice : IXAudio23Voice -{ -} - -[ - local -] -/* XAudio2 2.7's IXAudio2SubmixVoice interface. Actually called - * IXAudio2SubmixVoice in the Jun 2010 DX SDK */ -interface IXAudio27SubmixVoice : IXAudio27Voice -{ -} - -[ - local -] -interface IXAudio2SubmixVoice : IXAudio2Voice -{ -} - -[ - local -] -/* XAudio2 2.0's IXAudio2MasteringVoice interface. Actually called - * IXAudio2MasteringVoice in the Mar 2008 DX SDK */ -interface IXAudio20MasteringVoice : IXAudio20Voice -{ -} - -[ - local -] -/* XAudio2 2.3's IXAudio2MasteringVoice interface. Actually called - * IXAudio2MasteringVoice in the Nov 2008 DX SDK */ -interface IXAudio23MasteringVoice : IXAudio23Voice -{ -} - -[ - local -] -/* XAudio2 2.7's IXAudio2MasteringVoice interface. Actually called - * IXAudio2MasteringVoice in the Jun 2010 DX SDK */ -interface IXAudio27MasteringVoice : IXAudio27Voice -{ -} - -[ - local -] -interface IXAudio2MasteringVoice : IXAudio2Voice -{ - /* not present in XAudio2 2.7 */ - void GetChannelMask([out] DWORD *pChannelMask); -} - -[ - object, - local -] -interface IXAudio20VoiceCallback -{ - void OnVoiceProcessingPassStart(); - - void OnVoiceProcessingPassEnd(); - - void OnStreamEnd(); - - void OnBufferStart([in] void* pBufferContext); - - void OnBufferEnd([in] void* pBufferContext); - - void OnLoopEnd([in] void* pBufferContext); - - void OnVoiceError( - [in] void* pBuffercontext, - [in] HRESULT Error); -} - -[ - object, - local -] -interface IXAudio2VoiceCallback -{ - void OnVoiceProcessingPassStart([in] UINT32 BytesRequired); - - void OnVoiceProcessingPassEnd(); - - void OnStreamEnd(); - - void OnBufferStart([in] void* pBufferContext); - - void OnBufferEnd([in] void* pBufferContext); - - void OnLoopEnd([in] void* pBufferContext); - - void OnVoiceError( - [in] void* pBuffercontext, - [in] HRESULT Error); -} - -typedef struct XAUDIO2_DEBUG_CONFIGURATION -{ - UINT32 TraceMask; - UINT32 BreakMask; - BOOL LogThreadID; - BOOL LogFileline; - BOOL LogFunctionName; - BOOL LogTiming; -} XAUDIO2_DEBUG_CONFIGURATION; - -[ - object, - uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */ -] -/* XAudio2 2.0's IXAudio2 interface. Actually called IXAudio2 in the Mar 2008 - * DX SDK */ -interface IXAudio20 : IUnknown -{ - HRESULT GetDeviceCount([out] UINT32* pCount); - - HRESULT GetDeviceDetails( - [in] UINT32 Index, - [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); - - HRESULT Initialize( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); - - HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - HRESULT CreateSourceVoice( - [out] IXAudio2SourceVoice** ppSourceVoice, - [in] const WAVEFORMATEX* pSourceFormat, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, - [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, - [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateSubmixVoice( - [out] IXAudio2SubmixVoice** ppSubmixVoice, - [in] UINT32 InputChannels, - [in] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 ProcessingStage, - [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateMasteringVoice( - [out] IXAudio2MasteringVoice** ppMasteringVoice, - [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, - [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 DeviceIndex, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT StartEngine(); - - void StopEngine(); - - HRESULT CommitChanges([in] UINT32 OperationSet); - - void GetPerformanceData([out] XAUDIO20_PERFORMANCE_DATA* pPerfData); - - [local] void SetDebugConfiguration( - [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, - [in, defaultvalue(NULL)] void* pReserved); -} - -[ - object, - uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */ -] -/* XAudio2 2.2's IXAudio2 interface. Actually called IXAudio2 in the Jun 2010 - * DX SDK */ -interface IXAudio22 : IUnknown -{ - HRESULT GetDeviceCount([out] UINT32* pCount); - - HRESULT GetDeviceDetails( - [in] UINT32 Index, - [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); - - HRESULT Initialize( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); - - HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - HRESULT CreateSourceVoice( - [out] IXAudio2SourceVoice** ppSourceVoice, - [in] const WAVEFORMATEX* pSourceFormat, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, - [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, - [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateSubmixVoice( - [out] IXAudio2SubmixVoice** ppSubmixVoice, - [in] UINT32 InputChannels, - [in] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 ProcessingStage, - [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateMasteringVoice( - [out] IXAudio2MasteringVoice** ppMasteringVoice, - [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, - [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 DeviceIndex, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT StartEngine(); - - void StopEngine(); - - HRESULT CommitChanges([in] UINT32 OperationSet); - - void GetPerformanceData([out] XAUDIO22_PERFORMANCE_DATA* pPerfData); - - [local] void SetDebugConfiguration( - [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, - [in, defaultvalue(NULL)] void* pReserved); -} - -[ - object, - uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */ -] -/* XAudio2 2.3's IXAudio2 interface. Actually called IXAudio2 in the Nov 2008 - * DX SDK */ -interface IXAudio23 : IUnknown -{ - HRESULT GetDeviceCount([out] UINT32* pCount); - - HRESULT GetDeviceDetails( - [in] UINT32 Index, - [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); - - HRESULT Initialize( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); - - HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - HRESULT CreateSourceVoice( - [out] IXAudio2SourceVoice** ppSourceVoice, - [in] const WAVEFORMATEX* pSourceFormat, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, - [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, - [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateSubmixVoice( - [out] IXAudio2SubmixVoice** ppSubmixVoice, - [in] UINT32 InputChannels, - [in] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 ProcessingStage, - [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateMasteringVoice( - [out] IXAudio2MasteringVoice** ppMasteringVoice, - [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, - [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 DeviceIndex, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT StartEngine(); - - void StopEngine(); - - HRESULT CommitChanges([in] UINT32 OperationSet); - - void GetPerformanceData([out] XAUDIO2_PERFORMANCE_DATA* pPerfData); - - [local] void SetDebugConfiguration( - [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, - [in, defaultvalue(NULL)] void* pReserved); -} - -[ - object, - uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), -] -/* XAudio2 2.7's IXAudio2 interface. Actually called IXAudio2 in the Jun 2010 - * DX SDK */ -interface IXAudio27 : IUnknown -{ - HRESULT GetDeviceCount([out] UINT32* pCount); - - HRESULT GetDeviceDetails( - [in] UINT32 Index, - [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); - - HRESULT Initialize( - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); - - HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); - - HRESULT CreateSourceVoice( - [out] IXAudio2SourceVoice** ppSourceVoice, - [in] const WAVEFORMATEX* pSourceFormat, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, - [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, - [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateSubmixVoice( - [out] IXAudio2SubmixVoice** ppSubmixVoice, - [in] UINT32 InputChannels, - [in] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 ProcessingStage, - [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT CreateMasteringVoice( - [out] IXAudio2MasteringVoice** ppMasteringVoice, - [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, - [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, - [in, defaultvalue(0)] UINT32 Flags, - [in, defaultvalue(0)] UINT32 DeviceIndex, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); - - HRESULT StartEngine(); - - void StopEngine(); - - HRESULT CommitChanges([in] UINT32 OperationSet); - - void GetPerformanceData([out] XAUDIO2_PERFORMANCE_DATA* pPerfData); - - [local] void SetDebugConfiguration( - [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, - [in, defaultvalue(NULL)] void* pReserved); -} - -/* XAudio2 2.8's IXAudio2 is identical to 2.9's */ -cpp_quote("DEFINE_GUID(IID_IXAudio28, 0x60d8dac8, 0x5aa1, 0x4e8e, 0xb5, 0x97, 0x2f, 0x5e, 0x28, 0x83, 0xd4, 0x84);") - -[ - object, - uuid(2b02e3cf-2e0b-4ec3-be45-1b2a3fe7210d) -] -/* XAudio2 2.9's IXAudio2 interface. */ -interface IXAudio2 : IUnknown -{ HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback);
void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); @@ -1209,9 +548,16 @@ interface IXAudio2 : IUnknown [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, +#if XAUDIO2_VER >= 8 [in, defaultvalue(NULL)] LPCWSTR DeviceId, - [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain, - [in, defaultvalue(AudioCategory_GameEffects)] AUDIO_STREAM_CATEGORY StreamCategory); +#else + [in, defaultvalue(0)] UINT32 index, +#endif + [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain +#if XAUDIO2_VER >= 8 + , AUDIO_STREAM_CATEGORY category +#endif + );
HRESULT StartEngine();
@@ -1244,15 +590,16 @@ const UINT32 XAUDIO2_QUANTUM_DENOMINATOR = 100; const float XAUDIO2_QUANTUM_MS = (1000.0 * XAUDIO2_QUANTUM_NUMERATOR / XAUDIO2_QUANTUM_DENOMINATOR);
/* use cpp_quote to retain the HRESULT type in header file */ +#if XAUDIO2_VER > 0 cpp_quote("#define XAUDIO2_E_INVALID_CALL ((HRESULT)0x88960001)") cpp_quote("#define XAUDIO2_E_XMA_DECODER_ERROR ((HRESULT)0x88960002)") cpp_quote("#define XAUDIO2_E_XAPO_CREATION_FAILED ((HRESULT)0x88960003)") cpp_quote("#define XAUDIO2_E_DEVICE_INVALIDATED ((HRESULT)0x88960004)") - -/* xaudio 2.0 error codes */ -cpp_quote("#define XAUDIO20_E_XMA_DECODER_ERROR ((HRESULT)0x88960001)") -cpp_quote("#define XAUDIO20_E_XAPO_CREATION_FAILED ((HRESULT)0x88960002)") -cpp_quote("#define XAUDIO20_E_DEVICE_INVALIDATED ((HRESULT)0x88960003)") +#else +cpp_quote("#define XAUDIO2_E_XMA_DECODER_ERROR ((HRESULT)0x88960001)") +cpp_quote("#define XAUDIO2_E_XAPO_CREATION_FAILED ((HRESULT)0x88960002)") +cpp_quote("#define XAUDIO2_E_DEVICE_INVALIDATED ((HRESULT)0x88960003)") +#endif
cpp_quote("#ifdef XAUDIO2_HELPER_FUNCTIONS") cpp_quote("#define _USE_MATH_DEFINES") @@ -1265,6 +612,8 @@ cpp_quote("inline static float XAudio2CutoffFrequencyToRadians(float cutofffreq, cpp_quote("inline static float XAudio2RadiansToCutoffFrequency(float radians, float samplerate) { return samplerate * asinf(radians/2.0f) / (float)M_PI; }") cpp_quote("#endif")
-cpp_quote("HRESULT WINAPI XAudio2Create(IXAudio2** pxaudio2, UINT32 flags, XAUDIO2_PROCESSOR processor);") - cpp_quote("#include <poppack.h>") + +#if XAUDIO2_VER >= 8 +cpp_quote("HRESULT WINAPI XAudio2Create(IXAudio2** pxaudio2, UINT32 flags, XAUDIO2_PROCESSOR processor);") +#endif diff --git a/include/xaudio2fx.idl b/include/xaudio2fx.idl index 224c660a610..a340d2de824 100644 --- a/include/xaudio2fx.idl +++ b/include/xaudio2fx.idl @@ -18,114 +18,58 @@
import "unknwn.idl";
-[ - uuid(c0c56f46-29b1-44e9-9939-a32ce86867e2) -] -coclass AudioVolumeMeter20 { - interface IUnknown; -} +#ifndef XAUDIO2_VER +#define XAUDIO2_VER 9 +#endif
+#if XAUDIO2_VER < 8 [ + threading(both), +#if XAUDIO2_VER == 0 + uuid(c0c56f46-29b1-44e9-9939-a32ce86867e2) +#elif XAUDIO2_VER == 1 uuid(c1e3f122-a2ea-442c-854f-20d98f8357a1) -] -coclass AudioVolumeMeter21 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 2 uuid(f5ca7b34-8055-42c0-b836-216129eb7e30) -] -coclass AudioVolumeMeter22 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 3 uuid(e180344b-ac83-4483-959e-18a5c56a5e19) -] -coclass AudioVolumeMeter23 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 4 uuid(c7338b95-52b8-4542-aa79-42eb016c8c1c) -] -coclass AudioVolumeMeter24 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 5 uuid(2139e6da-c341-4774-9ac3-b4e026347f64) -] -coclass AudioVolumeMeter25 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 6 uuid(e48c5a3f-93ef-43bb-a092-2c7ceb946f27) -] -coclass AudioVolumeMeter26 { - interface IUnknown; -} - -[ +#else uuid(cac1105f-619b-4d04-831a-44e1cbf12d57) +#endif ] -coclass AudioVolumeMeter27 { - interface IUnknown; -} +coclass AudioVolumeMeter {}
[ + threading(both), +#if XAUDIO2_VER == 0 uuid(6f6ea3a9-2cf5-41cf-91c1-2170b1540063) -] -coclass AudioReverb20 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 1 uuid(f4769300-b949-4df9-b333-00d33932e9a6) -] -coclass AudioReverb21 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 2 uuid(629cf0de-3ecc-41e7-9926-f7e43eebec51) -] -coclass AudioReverb22 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 3 uuid(9cab402c-1d37-44b4-886d-fa4f36170a4c) -] -coclass AudioReverb23 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 4 uuid(8bb7778b-645b-4475-9a73-1de3170bd3af) -] -coclass AudioReverb24 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 5 uuid(d06df0d0-8518-441e-822f-5451d5c595b8) -] -coclass AudioReverb25 { - interface IUnknown; -} - -[ +#elif XAUDIO2_VER == 6 uuid(cecec95a-d894-491a-bee3-5e106fb59f2d) -] -coclass AudioReverb26 { - interface IUnknown; -} - -[ +#else uuid(6a93130e-1d53-41d1-a9cf-e758800bb179) +#endif ] -coclass AudioReverb27 { - interface IUnknown; -} +coclass AudioReverb {} + +#else + +HRESULT __stdcall CreateAudioReverb(IUnknown **out); +HRESULT __stdcall CreateAudioVolumeMeter(IUnknown **out); + +#endif