headers: import files from wine

* devpkey.h: required for OpenCL-ICD-Loader
* xapo, xaudio2: required for FAudio

Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
diff --git a/mingw-w64-headers/Makefile.am b/mingw-w64-headers/Makefile.am
index a014218..9cb7d80 100644
--- a/mingw-w64-headers/Makefile.am
+++ b/mingw-w64-headers/Makefile.am
@@ -239,6 +239,9 @@
   include/wmdrmsdk.idl \
   include/wpcapi.idl \
   include/wtypes.idl \
+  include/xapo.idl \
+  include/xaudio2.idl \
+  include/xaudio2fx.idl \
   include/xmllite.idl \
   include/xpsdigitalsignature.idl \
   include/xpsobjectmodel_1.idl \
diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index 2497aab..d0f12e8 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -302,6 +302,7 @@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -538,6 +539,9 @@
 @HAVE_WIDL_TRUE@  include/wmdrmsdk.idl \
 @HAVE_WIDL_TRUE@  include/wpcapi.idl \
 @HAVE_WIDL_TRUE@  include/wtypes.idl \
+@HAVE_WIDL_TRUE@  include/xapo.idl \
+@HAVE_WIDL_TRUE@  include/xaudio2.idl \
+@HAVE_WIDL_TRUE@  include/xaudio2fx.idl \
 @HAVE_WIDL_TRUE@  include/xmllite.idl \
 @HAVE_WIDL_TRUE@  include/xpsdigitalsignature.idl \
 @HAVE_WIDL_TRUE@  include/xpsobjectmodel_1.idl \
diff --git a/mingw-w64-headers/include/devpkey.h b/mingw-w64-headers/include/devpkey.h
index d24b382..2f8fe51 100644
--- a/mingw-w64-headers/include/devpkey.h
+++ b/mingw-w64-headers/include/devpkey.h
@@ -1,7 +1,230 @@
-#include <portabledeviceconnectapi.h>
+/*
+ * Copyright (C) 2010 Maarten Lankhorst 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
+ */
+
 #include <devpropdef.h>
 
 DEFINE_DEVPROPKEY(DEVPKEY_NAME, 0xb725f130,0x47ef,0x101a,0xa5,0xf1,0x02,0x60,0x8c,0x9e,0xeb,0xac, 10);
+
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DeviceDesc, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 2);
 DEFINE_DEVPROPKEY(DEVPKEY_Device_HardwareIds, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 3);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_CompatibleIds, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 4);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Service, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 6);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Class, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 9);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ClassGuid, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 10);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Driver, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 11);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ConfigFlags, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 12);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Manufacturer, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 13);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_FriendlyName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 14);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LocationInfo, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 15);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_PDOName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 16);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Capabilities, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 17);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_UINumber, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 18);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_UpperFilters, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 19);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LowerFilters, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 20);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_BusTypeGuid, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 21);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LegacyBusType, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 22);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_BusNumber, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 23);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_EnumeratorName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 24);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Security, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 25);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_SecuritySDS, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 26);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DevType, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 27);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Exclusive, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 28);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Characteristics, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 29);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Address, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 30);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_UINumberDescFormat, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 31);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_PowerData, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 32);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicy, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 33);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicyDefault, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 34);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicyOverride, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 35);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_InstallState, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 36);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LocationPaths, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 37);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_BaseContainerId, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 38);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_InstanceId, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 256);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DevNodeStatus, 0x4340a6c5,0x93fa,0x4706,0x97,0x2c,0x7b,0x64,0x80,0x08,0xa5,0xa7, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ProblemCode, 0x4340a6c5,0x93fa,0x4706,0x97,0x2c,0x7b,0x64,0x80,0x08,0xa5,0xa7, 3);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_EjectionRelations, 0x4340a6c5,0x93fa,0x4706,0x97,0x2c,0x7b,0x64,0x80,0x08,0xa5,0xa7, 4);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalRelations, 0x4340a6c5,0x93fa,0x4706,0x97,0x2c,0x7b,0x64,0x80,0x08,0xa5,0xa7, 5);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_PowerRelations, 0x4340a6c5,0x93fa,0x4706,0x97,0x2c,0x7b,0x64,0x80,0x08,0xa5,0xa7, 6);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_BusRelations, 0x4340a6c5,0x93fa,0x4706,0x97,0x2c,0x7b,0x64,0x80,0x08,0xa5,0xa7, 7);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Parent, 0x4340a6c5,0x93fa,0x4706,0x97,0x2c,0x7b,0x64,0x80,0x08,0xa5,0xa7, 8);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Children, 0x4340a6c5,0x93fa,0x4706,0x97,0x2c,0x7b,0x64,0x80,0x08,0xa5,0xa7, 9);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Siblings, 0x4340a6c5,0x93fa,0x4706,0x97,0x2c,0x7b,0x64,0x80,0x08,0xa5,0xa7, 10);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_TransportRelations, 0x4340a6c5,0x93fa,0x4706,0x97,0x2c,0x7b,0x64,0x80,0x08,0xa5,0xa7, 11);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ProblemStatus, 0x4340a6c5,0x93fa,0x4706,0x97,0x2c,0x7b,0x64,0x80,0x08,0xa5,0xa7, 12);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Reported, 0x80497100,0x8c73,0x48b9,0xaa,0xd9,0xce,0x38,0x7e,0x19,0xc5,0x6e, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Legacy, 0x80497100,0x8c73,0x48b9,0xaa,0xd9,0xce,0x38,0x7e,0x19,0xc5,0x6e, 3);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ContainerId, 0x8c7ed206,0x3f8a,0x4827,0xb3,0xab,0xae,0x9e,0x1f,0xae,0xfc,0x6c, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_InLocalMachineContainer, 0x8c7ed206,0x3f8a,0x4827,0xb3,0xab,0xae,0x9e,0x1f,0xae,0xfc,0x6c, 4);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Model, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 39);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ModelId, 0x80d81ea6,0x7473,0x4b0c,0x82,0x16,0xef,0xc1,0x1a,0x2c,0x4c,0x8b, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_FriendlyNameAttributes, 0x80d81ea6,0x7473,0x4b0c,0x82,0x16,0xef,0xc1,0x1a,0x2c,0x4c,0x8b, 3);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ManufacturerAttributes, 0x80d81ea6,0x7473,0x4b0c,0x82,0x16,0xef,0xc1,0x1a,0x2c,0x4c,0x8b, 4);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_PresenceNotForDevice, 0x80d81ea6,0x7473,0x4b0c,0x82,0x16,0xef,0xc1,0x1a,0x2c,0x4c,0x8b, 5);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_SignalStrength, 0x80d81ea6,0x7473,0x4b0c,0x82,0x16,0xef,0xc1,0x1a,0x2c,0x4c,0x8b, 6);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_IsAssociateableByUserAction, 0x80d81ea6,0x7473,0x4b0c,0x82,0x16,0xef,0xc1,0x1a,0x2c,0x4c,0x8b, 7);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ShowInUninstallUI, 0x80d81ea6,0x7473,0x4b0c,0x82,0x16,0xef,0xc1,0x1a,0x2c,0x4c,0x8b, 8);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Numa_Proximity_Domain, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 1);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DHP_Rebalance_Policy, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Numa_Node, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 3);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_BusReportedDeviceDesc, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 4);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_IsPresent, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 5);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_HasProblem, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 6);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ConfigurationId, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 7);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ReportedDeviceIdsHash, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 8);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_PhysicalDeviceLocation, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 9);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_BiosDeviceName, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 10);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DriverProblemDesc, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 11);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DebuggerSafe, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 12);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_PostInstallInProgress, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 13);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Stack, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 14);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ExtendedConfigurationIds, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 15);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_IsRebootRequired, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 16);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_FirmwareDate, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 17);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_FirmwareVersion, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 18);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_FirmwareRevision, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 19);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DependencyProviders, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 20);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DependencyDependents, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 21);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_SoftRestartSupported, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 22);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ExtendedAddress, 0x540b947e,0x8b40,0x45bc,0xa8,0xa2,0x6a,0x0b,0x89,0x4c,0xbd,0xa2, 23);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_SessionId, 0x83da6326,0x97a6,0x4088,0x94,0x53,0xa1,0x92,0x3f,0x57,0x3b,0x29, 6);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_InstallDate, 0x83da6326,0x97a6,0x4088,0x94,0x53,0xa1,0x92,0x3f,0x57,0x3b,0x29, 100);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_FirstInstallDate, 0x83da6326,0x97a6,0x4088,0x94,0x53,0xa1,0x92,0x3f,0x57,0x3b,0x29, 101);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LastArrivalDate, 0x83da6326,0x97a6,0x4088,0x94,0x53,0xa1,0x92,0x3f,0x57,0x3b,0x29, 102);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LastRemovalDate, 0x83da6326,0x97a6,0x4088,0x94,0x53,0xa1,0x92,0x3f,0x57,0x3b,0x29, 103);
 DEFINE_DEVPROPKEY(DEVPKEY_Device_DriverDate, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 2);
 DEFINE_DEVPROPKEY(DEVPKEY_Device_DriverVersion, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 3);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DriverDesc, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 4);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DriverInfPath, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 5);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DriverInfSection, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 6);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DriverInfSectionExt, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 7);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_MatchingDeviceId, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 8);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DriverProvider, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 9);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DriverPropPageProvider, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 10);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DriverCoInstallers, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 11);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ResourcePickerTags, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 12);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ResourcePickerExceptions, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 13);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DriverRank, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 14);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DriverLogoLevel, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 15);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_NoConnectSound, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 17);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_GenericDriverInstalled, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 18);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_AdditionalSoftwareRequested, 0xa8b865dd,0x2e3d,0x4094,0xad,0x97,0xe5,0x93,0xa7,0xc,0x75,0xd6, 19);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_SafeRemovalRequired, 0xafd97640,0x86a3,0x4210,0xb6,0x7c,0x28,0x9c,0x41,0xaa,0xbe,0x55, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_SafeRemovalRequiredOverride, 0xafd97640,0x86a3,0x4210,0xb6,0x7c,0x28,0x9c,0x41,0xaa,0xbe,0x55, 3);
+
+DEFINE_DEVPROPKEY(DEVPKEY_DrvPkg_Model, 0xcf73bb51,0x3abf,0x44a2,0x85,0xe0,0x9a,0x3d,0xc7,0xa1,0x21,0x32, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_DrvPkg_VendorWebSite, 0xcf73bb51,0x3abf,0x44a2,0x85,0xe0,0x9a,0x3d,0xc7,0xa1,0x21,0x32, 3);
+DEFINE_DEVPROPKEY(DEVPKEY_DrvPkg_DetailedDescription, 0xcf73bb51,0x3abf,0x44a2,0x85,0xe0,0x9a,0x3d,0xc7,0xa1,0x21,0x32, 4);
+DEFINE_DEVPROPKEY(DEVPKEY_DrvPkg_DocumentationLink, 0xcf73bb51,0x3abf,0x44a2,0x85,0xe0,0x9a,0x3d,0xc7,0xa1,0x21,0x32, 5);
+DEFINE_DEVPROPKEY(DEVPKEY_DrvPkg_Icon, 0xcf73bb51,0x3abf,0x44a2,0x85,0xe0,0x9a,0x3d,0xc7,0xa1,0x21,0x32, 6);
+DEFINE_DEVPROPKEY(DEVPKEY_DrvPkg_BrandingIcon, 0xcf73bb51,0x3abf,0x44a2,0x85,0xe0,0x9a,0x3d,0xc7,0xa1,0x21,0x32, 7);
+
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_UpperFilters, 0x4321918b,0xf69e,0x470d,0xa5,0xde,0x4d,0x88,0xc7,0x5a,0xd2,0x4b, 19);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_LowerFilters, 0x4321918b,0xf69e,0x470d,0xa5,0xde,0x4d,0x88,0xc7,0x5a,0xd2,0x4b, 20);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_Security, 0x4321918b,0xf69e,0x470d,0xa5,0xde,0x4d,0x88,0xc7,0x5a,0xd2,0x4b, 25);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_SecuritySDS, 0x4321918b,0xf69e,0x470d,0xa5,0xde,0x4d,0x88,0xc7,0x5a,0xd2,0x4b, 26);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_DevType, 0x4321918b,0xf69e,0x470d,0xa5,0xde,0x4d,0x88,0xc7,0x5a,0xd2,0x4b, 27);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_Exclusive, 0x4321918b,0xf69e,0x470d,0xa5,0xde,0x4d,0x88,0xc7,0x5a,0xd2,0x4b, 28);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_Characteristics, 0x4321918b,0xf69e,0x470d,0xa5,0xde,0x4d,0x88,0xc7,0x5a,0xd2,0x4b, 29);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_Name, 0x259abffc,0x50a7,0x47ce,0xaf,0x8,0x68,0xc9,0xa7,0xd7,0x33,0x66, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_ClassName, 0x259abffc,0x50a7,0x47ce,0xaf,0x8,0x68,0xc9,0xa7,0xd7,0x33,0x66, 3);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_Icon, 0x259abffc,0x50a7,0x47ce,0xaf,0x8,0x68,0xc9,0xa7,0xd7,0x33,0x66, 4);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_ClassInstaller, 0x259abffc,0x50a7,0x47ce,0xaf,0x8,0x68,0xc9,0xa7,0xd7,0x33,0x66, 5);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_PropPageProvider, 0x259abffc,0x50a7,0x47ce,0xaf,0x8,0x68,0xc9,0xa7,0xd7,0x33,0x66, 6);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_NoInstallClass, 0x259abffc,0x50a7,0x47ce,0xaf,0x8,0x68,0xc9,0xa7,0xd7,0x33,0x66, 7);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_NoDisplayClass, 0x259abffc,0x50a7,0x47ce,0xaf,0x8,0x68,0xc9,0xa7,0xd7,0x33,0x66, 8);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_SilentInstall, 0x259abffc,0x50a7,0x47ce,0xaf,0x8,0x68,0xc9,0xa7,0xd7,0x33,0x66, 9);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_NoUseClass, 0x259abffc,0x50a7,0x47ce,0xaf,0x8,0x68,0xc9,0xa7,0xd7,0x33,0x66, 10);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_DefaultService, 0x259abffc,0x50a7,0x47ce,0xaf,0x8,0x68,0xc9,0xa7,0xd7,0x33,0x66, 11);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_IconPath, 0x259abffc,0x50a7,0x47ce,0xaf,0x8,0x68,0xc9,0xa7,0xd7,0x33,0x66, 12);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_DHPRebalanceOptOut, 0xd14d3ef3,0x66cf,0x4ba2,0x9d,0x38,0x0d,0xdb,0x37,0xab,0x47,0x01, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceClass_ClassCoInstallers, 0x713d1703,0xa2e2,0x49f5,0x92,0x14,0x56,0x47,0x2e,0xf3,0xda,0x5c, 2);
+
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_FriendlyName, 0x026e516e,0xb814,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_Enabled, 0x026e516e,0xb814,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 3);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_ClassGuid, 0x026e516e,0xb814,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 4);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_ReferenceString, 0x026e516e,0xb814,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 5);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_Restricted, 0x026e516e,0xb814,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 6);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_UnrestrictedAppCapabilities, 0x026e516e,0xb814,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 8);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_SchematicName, 0x026e516e,0xb814,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 9);
+
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterfaceClass_DefaultInterface, 0x14c83a99,0x0b3f,0x44b7,0xbe,0x4c,0xa1,0x78,0xd3,0x99,0x05,0x64, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterfaceClass_Name, 0x14c83a99,0x0b3f,0x44b7,0xbe,0x4c,0xa1,0x78,0xd3,0x99,0x05,0x64, 3);
+
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_Address, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 51);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_DiscoveryMethod, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 52);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_IsEncrypted, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 53);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_IsAuthenticated, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 54);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_IsConnected, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 55);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_IsPaired, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 56);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_Icon, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 57);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_Version, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 65);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_Last_Seen, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 66);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_Last_Connected, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 67);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_IsShowInDisconnectedState, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 68);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_IsLocalMachine, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 70);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_MetadataPath, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 71);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_IsMetadataSearchInProgress, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 72);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_MetadataChecksum, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 73);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_IsNotInterestingForDisplay, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 74);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_LaunchDeviceStageOnDeviceConnect, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 76);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_LaunchDeviceStageFromExplorer, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 77);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_BaselineExperienceId, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 78);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_IsDeviceUniquelyIdentifiable, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 79);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_AssociationArray, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 80);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_DeviceDescription1, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 81);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_DeviceDescription2, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 82);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_HasProblem, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 83);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_IsSharedDevice, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 84);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_IsNetworkDevice, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 85);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_IsDefaultDevice, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 86);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_MetadataCabinet, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 87);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_RequiresPairingElevation, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 88);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_ExperienceId, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 89);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_Category, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 90);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_Category_Desc_Singular, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 91);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_Category_Desc_Plural, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 92);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_Category_Icon, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 93);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_CategoryGroup_Desc, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 94);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_CategoryGroup_Icon, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 95);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_PrimaryCategory, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 97);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_UnpairUninstall, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 98);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_RequiresUninstallElevation, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 99);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_DeviceFunctionSubRank, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 100);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_AlwaysShowDeviceAsConnected, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 101);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_ConfigFlags, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 105);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_PrivilegedPackageFamilyNames, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 106);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_CustomPrivilegedPackageFamilyNames, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 107);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_IsRebootRequired, 0x78c34fc8,0x104a,0x4aca,0x9e,0xa4,0x52,0x4d,0x52,0x99,0x6e,0x57, 108);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_FriendlyName, 0x656A3BB3,0xECC0,0x43FD,0x84,0x77,0x4A,0xE0,0x40,0x4A,0x96,0xCD, 12288);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_Manufacturer, 0x656A3BB3,0xECC0,0x43FD,0x84,0x77,0x4A,0xE0,0x40,0x4A,0x96,0xCD, 8192);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_ModelName, 0x656A3BB3,0xECC0,0x43FD,0x84,0x77,0x4A,0xE0,0x40,0x4A,0x96,0xCD, 8194);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_ModelNumber, 0x656A3BB3,0xECC0,0x43FD,0x84,0x77,0x4A,0xE0,0x40,0x4A,0x96,0xCD, 8195);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceContainer_InstallInProgress, 0x83da6326,0x97a6,0x4088,0x94,0x53,0xa1,0x92,0x3f,0x57,0x3b,0x29, 9);
+
+DEFINE_DEVPROPKEY(DEVPKEY_DevQuery_ObjectType, 0x13673f42,0xa3d6,0x49f6,0xb4,0xda,0xae,0x46,0xe0,0xc5,0x23,0x7c, 2);
+
+#define DEVPKEY_Numa_Proximity_Domain DEVPKEY_Device_Numa_Proximity_Domain
+
+#define DEVPKEY_DeviceDisplay_DiscoveryMethod DEVPKEY_DeviceContainer_DiscoveryMethod
+#define DEVPKEY_DeviceDisplay_IsShowInDisconnectedState DEVPKEY_DeviceContainer_IsShowInDisconnectedState
+#define DEVPKEY_DeviceDisplay_IsNotInterestingForDisplay DEVPKEY_DeviceContainer_IsNotInterestingForDisplay
+#define DEVPKEY_DeviceDisplay_IsNetworkDevice DEVPKEY_DeviceContainer_IsNetworkDevice
+#define DEVPKEY_DeviceDisplay_Category DEVPKEY_DeviceContainer_Category
+#define DEVPKEY_DeviceDisplay_UnpairUninstall DEVPKEY_DeviceContainer_UnpairUninstall
+#define DEVPKEY_DeviceDisplay_RequiresUninstallElevation DEVPKEY_DeviceContainer_RequiresUninstallElevation
+#define DEVPKEY_DeviceDisplay_AlwaysShowDeviceAsConnected DEVPKEY_DeviceContainer_AlwaysShowDeviceAsConnected
diff --git a/mingw-w64-headers/include/xapo.h b/mingw-w64-headers/include/xapo.h
new file mode 100644
index 0000000..5ab493d
--- /dev/null
+++ b/mingw-w64-headers/include/xapo.h
@@ -0,0 +1,415 @@
+/*** Autogenerated by WIDL 5.13 from include/xapo.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __xapo_h__
+#define __xapo_h__
+
+/* Forward declarations */
+
+#ifndef __IXAPO_FWD_DEFINED__
+#define __IXAPO_FWD_DEFINED__
+typedef interface IXAPO IXAPO;
+#ifdef __cplusplus
+interface IXAPO;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAPOParameters_FWD_DEFINED__
+#define __IXAPOParameters_FWD_DEFINED__
+typedef interface IXAPOParameters IXAPOParameters;
+#ifdef __cplusplus
+interface IXAPOParameters;
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define XAPO_FLAG_CHANNELS_MUST_MATCH 0x1
+#define XAPO_FLAG_FRAMERATE_MUST_MATCH 0x2
+#define XAPO_FLAG_BITSPERSAMPLE_MUST_MATCH 0x4
+#define XAPO_FLAG_BUFFERCOUNT_MUST_MATCH 0x8
+#define XAPO_FLAG_INPLACE_SUPPORTED 0x10
+#define XAPO_FLAG_INPLACE_REQUIRED 0x20
+#if 0
+typedef struct WAVEFORMATEX {
+    WORD wFormatTag;
+    WORD nChannels;
+    DWORD nSamplesPerSec;
+    DWORD nAvgBytesPerSec;
+    WORD nBlockAlign;
+    WORD wBitsPerSample;
+    WORD cbSize;
+} WAVEFORMATEX;
+typedef struct __WIDL_xapo_generated_name_0000000C {
+    WAVEFORMATEX Format;
+    union {
+        WORD wValidBitsPerSample;
+        WORD wSamplesPerBlock;
+        WORD wReserved;
+    } Samples;
+    DWORD dwChannelMask;
+    GUID SubFormat;
+} WAVEFORMATEXTENSIBLE;
+typedef struct __WIDL_xapo_generated_name_0000000C *PWAVEFORMATEXTENSIBLE;
+#else
+#include <mmreg.h>
+#endif
+typedef struct XAPO_REGISTRATION_PROPERTIES {
+    CLSID clsid;
+    WCHAR FriendlyName[256];
+    WCHAR CopyrightInfo[256];
+    UINT32 MajorVersion;
+    UINT32 MinorVersion;
+    UINT32 Flags;
+    UINT32 MinInputBufferCount;
+    UINT32 MaxInputBufferCount;
+    UINT32 MinOutputBufferCount;
+    UINT32 MaxOutputBufferCount;
+} XAPO_REGISTRATION_PROPERTIES;
+typedef struct XAPO20_REGISTRATION_PROPERTIES {
+    CLSID clsid;
+    WCHAR FriendlyName[256];
+    WCHAR CopyrightInfo[256];
+    UINT32 MajorVersion;
+    UINT32 MinorVersion;
+    UINT32 Flags;
+    UINT32 MinInputBufferCount;
+    UINT32 MaxInputBufferCount;
+    UINT32 MinOutputBufferCount;
+    UINT32 MaxOutputBufferCount;
+    UINT32 InterfaceCount;
+    IID InterfaceArray[1];
+} XAPO20_REGISTRATION_PROPERTIES;
+typedef struct XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS {
+    const WAVEFORMATEX *pFormat;
+    UINT32 MaxFrameCount;
+} XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS;
+typedef enum XAPO_BUFFER_FLAGS {
+    XAPO_BUFFER_SILENT = 0,
+    XAPO_BUFFER_VALID = 1
+} XAPO_BUFFER_FLAGS;
+typedef struct XAPO_PROCESS_BUFFER_PARAMETERS {
+    void *pBuffer;
+    XAPO_BUFFER_FLAGS BufferFlags;
+    UINT32 ValidFrameCount;
+} XAPO_PROCESS_BUFFER_PARAMETERS;
+/*****************************************************************************
+ * IXAPO interface
+ */
+#ifndef __IXAPO_INTERFACE_DEFINED__
+#define __IXAPO_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXAPO, 0xa410b984, 0x9839, 0x4819, 0xa0,0xbe, 0x28,0x56,0xae,0x6b,0x3a,0xdb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a410b984-9839-4819-a0be-2856ae6b3adb")
+IXAPO : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetRegistrationProperties(
+        XAPO_REGISTRATION_PROPERTIES **props) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsInputFormatSupported(
+        const WAVEFORMATEX *output_fmt,
+        const WAVEFORMATEX *input_fmt,
+        WAVEFORMATEX **supported_fmt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsOutputFormatSupported(
+        const WAVEFORMATEX *input_fmt,
+        const WAVEFORMATEX *output_fmt,
+        WAVEFORMATEX **supported_fmt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Initialize(
+        const void *data,
+        UINT32 data_len) = 0;
+
+    virtual void STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockForProcess(
+        UINT32 in_params_count,
+        const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *in_params,
+        UINT32 out_params_count,
+        const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *out_params) = 0;
+
+    virtual void STDMETHODCALLTYPE UnlockForProcess(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE Process(
+        UINT32 in_params_count,
+        const XAPO_PROCESS_BUFFER_PARAMETERS *in_params,
+        UINT32 out_params_count,
+        XAPO_PROCESS_BUFFER_PARAMETERS *out_params,
+        WINBOOL enabled) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE CalcInputFrames(
+        UINT32 output_frames) = 0;
+
+    virtual UINT32 STDMETHODCALLTYPE CalcOutputFrames(
+        UINT32 input_frames) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IXAPO, 0xa410b984, 0x9839, 0x4819, 0xa0,0xbe, 0x28,0x56,0xae,0x6b,0x3a,0xdb)
+#endif
+#else
+typedef struct IXAPOVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXAPO *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXAPO *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXAPO *This);
+
+    /*** IXAPO methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetRegistrationProperties)(
+        IXAPO *This,
+        XAPO_REGISTRATION_PROPERTIES **props);
+
+    HRESULT (STDMETHODCALLTYPE *IsInputFormatSupported)(
+        IXAPO *This,
+        const WAVEFORMATEX *output_fmt,
+        const WAVEFORMATEX *input_fmt,
+        WAVEFORMATEX **supported_fmt);
+
+    HRESULT (STDMETHODCALLTYPE *IsOutputFormatSupported)(
+        IXAPO *This,
+        const WAVEFORMATEX *input_fmt,
+        const WAVEFORMATEX *output_fmt,
+        WAVEFORMATEX **supported_fmt);
+
+    HRESULT (STDMETHODCALLTYPE *Initialize)(
+        IXAPO *This,
+        const void *data,
+        UINT32 data_len);
+
+    void (STDMETHODCALLTYPE *Reset)(
+        IXAPO *This);
+
+    HRESULT (STDMETHODCALLTYPE *LockForProcess)(
+        IXAPO *This,
+        UINT32 in_params_count,
+        const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *in_params,
+        UINT32 out_params_count,
+        const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *out_params);
+
+    void (STDMETHODCALLTYPE *UnlockForProcess)(
+        IXAPO *This);
+
+    void (STDMETHODCALLTYPE *Process)(
+        IXAPO *This,
+        UINT32 in_params_count,
+        const XAPO_PROCESS_BUFFER_PARAMETERS *in_params,
+        UINT32 out_params_count,
+        XAPO_PROCESS_BUFFER_PARAMETERS *out_params,
+        WINBOOL enabled);
+
+    UINT32 (STDMETHODCALLTYPE *CalcInputFrames)(
+        IXAPO *This,
+        UINT32 output_frames);
+
+    UINT32 (STDMETHODCALLTYPE *CalcOutputFrames)(
+        IXAPO *This,
+        UINT32 input_frames);
+
+    END_INTERFACE
+} IXAPOVtbl;
+
+interface IXAPO {
+    CONST_VTBL IXAPOVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IXAPO_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXAPO_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXAPO_Release(This) (This)->lpVtbl->Release(This)
+/*** IXAPO methods ***/
+#define IXAPO_GetRegistrationProperties(This,props) (This)->lpVtbl->GetRegistrationProperties(This,props)
+#define IXAPO_IsInputFormatSupported(This,output_fmt,input_fmt,supported_fmt) (This)->lpVtbl->IsInputFormatSupported(This,output_fmt,input_fmt,supported_fmt)
+#define IXAPO_IsOutputFormatSupported(This,input_fmt,output_fmt,supported_fmt) (This)->lpVtbl->IsOutputFormatSupported(This,input_fmt,output_fmt,supported_fmt)
+#define IXAPO_Initialize(This,data,data_len) (This)->lpVtbl->Initialize(This,data,data_len)
+#define IXAPO_Reset(This) (This)->lpVtbl->Reset(This)
+#define IXAPO_LockForProcess(This,in_params_count,in_params,out_params_count,out_params) (This)->lpVtbl->LockForProcess(This,in_params_count,in_params,out_params_count,out_params)
+#define IXAPO_UnlockForProcess(This) (This)->lpVtbl->UnlockForProcess(This)
+#define IXAPO_Process(This,in_params_count,in_params,out_params_count,out_params,enabled) (This)->lpVtbl->Process(This,in_params_count,in_params,out_params_count,out_params,enabled)
+#define IXAPO_CalcInputFrames(This,output_frames) (This)->lpVtbl->CalcInputFrames(This,output_frames)
+#define IXAPO_CalcOutputFrames(This,input_frames) (This)->lpVtbl->CalcOutputFrames(This,input_frames)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IXAPO_QueryInterface(IXAPO* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IXAPO_AddRef(IXAPO* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IXAPO_Release(IXAPO* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IXAPO methods ***/
+static FORCEINLINE HRESULT IXAPO_GetRegistrationProperties(IXAPO* This,XAPO_REGISTRATION_PROPERTIES **props) {
+    return This->lpVtbl->GetRegistrationProperties(This,props);
+}
+static FORCEINLINE HRESULT IXAPO_IsInputFormatSupported(IXAPO* This,const WAVEFORMATEX *output_fmt,const WAVEFORMATEX *input_fmt,WAVEFORMATEX **supported_fmt) {
+    return This->lpVtbl->IsInputFormatSupported(This,output_fmt,input_fmt,supported_fmt);
+}
+static FORCEINLINE HRESULT IXAPO_IsOutputFormatSupported(IXAPO* This,const WAVEFORMATEX *input_fmt,const WAVEFORMATEX *output_fmt,WAVEFORMATEX **supported_fmt) {
+    return This->lpVtbl->IsOutputFormatSupported(This,input_fmt,output_fmt,supported_fmt);
+}
+static FORCEINLINE HRESULT IXAPO_Initialize(IXAPO* This,const void *data,UINT32 data_len) {
+    return This->lpVtbl->Initialize(This,data,data_len);
+}
+static FORCEINLINE void IXAPO_Reset(IXAPO* This) {
+    This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IXAPO_LockForProcess(IXAPO* This,UINT32 in_params_count,const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *in_params,UINT32 out_params_count,const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *out_params) {
+    return This->lpVtbl->LockForProcess(This,in_params_count,in_params,out_params_count,out_params);
+}
+static FORCEINLINE void IXAPO_UnlockForProcess(IXAPO* This) {
+    This->lpVtbl->UnlockForProcess(This);
+}
+static FORCEINLINE void IXAPO_Process(IXAPO* This,UINT32 in_params_count,const XAPO_PROCESS_BUFFER_PARAMETERS *in_params,UINT32 out_params_count,XAPO_PROCESS_BUFFER_PARAMETERS *out_params,WINBOOL enabled) {
+    This->lpVtbl->Process(This,in_params_count,in_params,out_params_count,out_params,enabled);
+}
+static FORCEINLINE UINT32 IXAPO_CalcInputFrames(IXAPO* This,UINT32 output_frames) {
+    return This->lpVtbl->CalcInputFrames(This,output_frames);
+}
+static FORCEINLINE UINT32 IXAPO_CalcOutputFrames(IXAPO* This,UINT32 input_frames) {
+    return This->lpVtbl->CalcOutputFrames(This,input_frames);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAPO_INTERFACE_DEFINED__ */
+
+DEFINE_GUID(IID_IXAPO27, 0xa90bc001, 0xe897, 0xe897, 0x55, 0xe4, 0x9e, 0x47, 0x00, 0x00, 0x00, 0x00);
+/*****************************************************************************
+ * IXAPOParameters interface
+ */
+#ifndef __IXAPOParameters_INTERFACE_DEFINED__
+#define __IXAPOParameters_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXAPOParameters, 0x26d95c66, 0x80f2, 0x499a, 0xad,0x54, 0x5a,0xe7,0xf0,0x1c,0x6d,0x98);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("26d95c66-80f2-499a-ad54-5ae7f01c6d98")
+IXAPOParameters : public IUnknown
+{
+    virtual void STDMETHODCALLTYPE SetParameters(
+        const void *params,
+        UINT32 params_len) = 0;
+
+    virtual void STDMETHODCALLTYPE GetParameters(
+        void *params,
+        UINT32 params_len) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IXAPOParameters, 0x26d95c66, 0x80f2, 0x499a, 0xad,0x54, 0x5a,0xe7,0xf0,0x1c,0x6d,0x98)
+#endif
+#else
+typedef struct IXAPOParametersVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXAPOParameters *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXAPOParameters *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXAPOParameters *This);
+
+    /*** IXAPOParameters methods ***/
+    void (STDMETHODCALLTYPE *SetParameters)(
+        IXAPOParameters *This,
+        const void *params,
+        UINT32 params_len);
+
+    void (STDMETHODCALLTYPE *GetParameters)(
+        IXAPOParameters *This,
+        void *params,
+        UINT32 params_len);
+
+    END_INTERFACE
+} IXAPOParametersVtbl;
+
+interface IXAPOParameters {
+    CONST_VTBL IXAPOParametersVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IXAPOParameters_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXAPOParameters_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXAPOParameters_Release(This) (This)->lpVtbl->Release(This)
+/*** IXAPOParameters methods ***/
+#define IXAPOParameters_SetParameters(This,params,params_len) (This)->lpVtbl->SetParameters(This,params,params_len)
+#define IXAPOParameters_GetParameters(This,params,params_len) (This)->lpVtbl->GetParameters(This,params,params_len)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IXAPOParameters_QueryInterface(IXAPOParameters* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IXAPOParameters_AddRef(IXAPOParameters* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IXAPOParameters_Release(IXAPOParameters* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IXAPOParameters methods ***/
+static FORCEINLINE void IXAPOParameters_SetParameters(IXAPOParameters* This,const void *params,UINT32 params_len) {
+    This->lpVtbl->SetParameters(This,params,params_len);
+}
+static FORCEINLINE void IXAPOParameters_GetParameters(IXAPOParameters* This,void *params,UINT32 params_len) {
+    This->lpVtbl->GetParameters(This,params,params_len);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAPOParameters_INTERFACE_DEFINED__ */
+
+DEFINE_GUID(IID_IXAPO27Parameters, 0xa90bc001, 0xe897, 0xe897, 0x55, 0xe4, 0x9e, 0x47, 0x00, 0x00, 0x00, 0x01);
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __xapo_h__ */
diff --git a/mingw-w64-headers/include/xapo.idl b/mingw-w64-headers/include/xapo.idl
new file mode 100644
index 0000000..841793d
--- /dev/null
+++ b/mingw-w64-headers/include/xapo.idl
@@ -0,0 +1,154 @@
+/*
+ * 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
+ */
+
+import "unknwn.idl";
+
+#define XAPO_REGISTRATION_STRING_LENGTH 256
+
+cpp_quote("#define XAPO_FLAG_CHANNELS_MUST_MATCH 0x1")
+cpp_quote("#define XAPO_FLAG_FRAMERATE_MUST_MATCH 0x2")
+cpp_quote("#define XAPO_FLAG_BITSPERSAMPLE_MUST_MATCH 0x4")
+cpp_quote("#define XAPO_FLAG_BUFFERCOUNT_MUST_MATCH 0x8")
+cpp_quote("#define XAPO_FLAG_INPLACE_SUPPORTED 0x10")
+cpp_quote("#define XAPO_FLAG_INPLACE_REQUIRED 0x20")
+
+cpp_quote("#if 0")
+typedef struct WAVEFORMATEX
+{
+    WORD wFormatTag;
+    WORD nChannels;
+    DWORD nSamplesPerSec;
+    DWORD nAvgBytesPerSec;
+    WORD nBlockAlign;
+    WORD wBitsPerSample;
+    WORD cbSize;
+} WAVEFORMATEX;
+
+typedef struct {
+    WAVEFORMATEX    Format;
+    union {
+        WORD        wValidBitsPerSample;
+        WORD        wSamplesPerBlock;
+        WORD        wReserved;
+    } Samples;
+    DWORD           dwChannelMask;
+    GUID            SubFormat;
+} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
+cpp_quote("#else")
+cpp_quote("#include <mmreg.h>")
+cpp_quote("#endif")
+
+typedef struct XAPO_REGISTRATION_PROPERTIES
+{
+    CLSID clsid;
+    WCHAR FriendlyName[XAPO_REGISTRATION_STRING_LENGTH];
+    WCHAR CopyrightInfo[XAPO_REGISTRATION_STRING_LENGTH];
+    UINT32 MajorVersion;
+    UINT32 MinorVersion;
+    UINT32 Flags;
+    UINT32 MinInputBufferCount;
+    UINT32 MaxInputBufferCount;
+    UINT32 MinOutputBufferCount;
+    UINT32 MaxOutputBufferCount;
+} XAPO_REGISTRATION_PROPERTIES;
+
+typedef struct XAPO20_REGISTRATION_PROPERTIES
+{
+    CLSID clsid;
+    WCHAR FriendlyName[XAPO_REGISTRATION_STRING_LENGTH];
+    WCHAR CopyrightInfo[XAPO_REGISTRATION_STRING_LENGTH];
+    UINT32 MajorVersion;
+    UINT32 MinorVersion;
+    UINT32 Flags;
+    UINT32 MinInputBufferCount;
+    UINT32 MaxInputBufferCount;
+    UINT32 MinOutputBufferCount;
+    UINT32 MaxOutputBufferCount;
+    UINT32 InterfaceCount;
+    IID InterfaceArray[1];
+} XAPO20_REGISTRATION_PROPERTIES;
+
+typedef struct XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS {
+    const WAVEFORMATEX *pFormat;
+    UINT32 MaxFrameCount;
+} XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS;
+
+typedef enum XAPO_BUFFER_FLAGS {
+    XAPO_BUFFER_SILENT,
+    XAPO_BUFFER_VALID
+} XAPO_BUFFER_FLAGS;
+
+typedef struct XAPO_PROCESS_BUFFER_PARAMETERS {
+    void *pBuffer;
+    XAPO_BUFFER_FLAGS BufferFlags;
+    UINT32 ValidFrameCount;
+} XAPO_PROCESS_BUFFER_PARAMETERS;
+
+/* XAudio2 2.8 version of IXAPO */
+[
+    object,
+    local,
+    uuid(a410b984-9839-4819-a0be-2856ae6b3adb)
+]
+interface IXAPO : IUnknown
+{
+    HRESULT GetRegistrationProperties([out] XAPO_REGISTRATION_PROPERTIES **props);
+
+    HRESULT IsInputFormatSupported(const WAVEFORMATEX *output_fmt,
+        const WAVEFORMATEX *input_fmt, WAVEFORMATEX **supported_fmt);
+
+    HRESULT IsOutputFormatSupported(const WAVEFORMATEX *input_fmt,
+        const WAVEFORMATEX *output_fmt, WAVEFORMATEX **supported_fmt);
+
+    HRESULT Initialize(const void *data, UINT32 data_len);
+
+    void Reset(void);
+
+    HRESULT LockForProcess(UINT32 in_params_count, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *in_params,
+        UINT32 out_params_count, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *out_params);
+
+    void UnlockForProcess(void);
+
+    void Process(UINT32 in_params_count, const XAPO_PROCESS_BUFFER_PARAMETERS *in_params,
+        UINT32 out_params_count, XAPO_PROCESS_BUFFER_PARAMETERS *out_params,
+        BOOL enabled);
+
+    UINT32 CalcInputFrames(UINT32 output_frames);
+
+    UINT32 CalcOutputFrames(UINT32 input_frames);
+}
+
+/* XAudio2 2.7 version of IXAPO is identical to 2.8 */
+cpp_quote("DEFINE_GUID(IID_IXAPO27, 0xa90bc001, 0xe897, 0xe897, 0x55, 0xe4, 0x9e, 0x47, 0x00, 0x00, 0x00, 0x00);")
+
+
+/* XAudio2 2.8 version of IXAPOParameters */
+[
+    object,
+    local,
+    uuid(26d95c66-80f2-499a-ad54-5ae7f01c6d98)
+]
+interface IXAPOParameters : IUnknown
+{
+    void SetParameters(const void *params, UINT32 params_len);
+
+    void GetParameters(void *params, UINT32 params_len);
+}
+
+/* XAudio2 2.7 version of IXAPOParameters is identical to 2.8 */
+cpp_quote("DEFINE_GUID(IID_IXAPO27Parameters, 0xa90bc001, 0xe897, 0xe897, 0x55, 0xe4, 0x9e, 0x47, 0x00, 0x00, 0x00, 0x01);")
diff --git a/mingw-w64-headers/include/xapofx.h b/mingw-w64-headers/include/xapofx.h
new file mode 100644
index 0000000..65292db
--- /dev/null
+++ b/mingw-w64-headers/include/xapofx.h
@@ -0,0 +1,44 @@
+/*
+ * 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
+ */
+
+/* CLSIDs used by CreateFX, but never registered */
+
+#ifndef _XAPOFX_H
+#define _XAPOFX_H
+
+/* xapofx 1.0 through 1.5 */
+DEFINE_GUID(CLSID_FXEQ27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x00);
+/* xaudio >= 2.8 */
+DEFINE_GUID(CLSID_FXEQ, 0xf5e01117, 0xd6c4, 0x485a, 0xa3, 0xf5, 0x69, 0x51, 0x96, 0xf3, 0xdb, 0xfa);
+
+/* xapofx 1.0 through 1.5 */
+DEFINE_GUID(CLSID_FXMasteringLimiter27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x01);
+/* xaudio >= 2.8 */
+DEFINE_GUID(CLSID_FXMasteringLimiter, 0xc4137916, 0x2be1, 0x46fd, 0x85, 0x99, 0x44, 0x15, 0x36, 0xf4, 0x98, 0x56);
+
+/* xapofx 1.0 through 1.5 */
+DEFINE_GUID(CLSID_FXReverb27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x02);
+/* xaudio >= 2.8 */
+DEFINE_GUID(CLSID_FXReverb, 0x7d9aca56, 0xcb68, 0x4807, 0xb6, 0x32, 0xb1, 0x37, 0x35, 0x2e, 0x85, 0x96);
+
+/* xapofx 1.0 through 1.5 */
+DEFINE_GUID(CLSID_FXEcho27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x03);
+/* xaudio >= 2.8 */
+DEFINE_GUID(CLSID_FXEcho, 0x5039d740, 0xf736, 0x449a, 0x84, 0xd3, 0xa5, 0x62, 0x02, 0x55, 0x7b, 0x87);
+
+#endif
diff --git a/mingw-w64-headers/include/xaudio2.h b/mingw-w64-headers/include/xaudio2.h
new file mode 100644
index 0000000..132003c
--- /dev/null
+++ b/mingw-w64-headers/include/xaudio2.h
@@ -0,0 +1,6221 @@
+/*** Autogenerated by WIDL 5.13 from include/xaudio2.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __xaudio2_h__
+#define __xaudio2_h__
+
+/* Forward declarations */
+
+#ifndef __XAudio20_FWD_DEFINED__
+#define __XAudio20_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio20 XAudio20;
+#else
+typedef struct XAudio20 XAudio20;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio20_FWD_DEFINED__ */
+
+#ifndef __XAudio21_FWD_DEFINED__
+#define __XAudio21_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio21 XAudio21;
+#else
+typedef struct XAudio21 XAudio21;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio21_FWD_DEFINED__ */
+
+#ifndef __XAudio22_FWD_DEFINED__
+#define __XAudio22_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio22 XAudio22;
+#else
+typedef struct XAudio22 XAudio22;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio22_FWD_DEFINED__ */
+
+#ifndef __XAudio23_FWD_DEFINED__
+#define __XAudio23_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio23 XAudio23;
+#else
+typedef struct XAudio23 XAudio23;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio23_FWD_DEFINED__ */
+
+#ifndef __XAudio24_FWD_DEFINED__
+#define __XAudio24_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio24 XAudio24;
+#else
+typedef struct XAudio24 XAudio24;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio24_FWD_DEFINED__ */
+
+#ifndef __XAudio25_FWD_DEFINED__
+#define __XAudio25_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio25 XAudio25;
+#else
+typedef struct XAudio25 XAudio25;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio25_FWD_DEFINED__ */
+
+#ifndef __XAudio26_FWD_DEFINED__
+#define __XAudio26_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio26 XAudio26;
+#else
+typedef struct XAudio26 XAudio26;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio26_FWD_DEFINED__ */
+
+#ifndef __XAudio27_FWD_DEFINED__
+#define __XAudio27_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio27 XAudio27;
+#else
+typedef struct XAudio27 XAudio27;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio27_FWD_DEFINED__ */
+
+#ifndef __XAudio2Debug_FWD_DEFINED__
+#define __XAudio2Debug_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio2Debug XAudio2Debug;
+#else
+typedef struct XAudio2Debug XAudio2Debug;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio2Debug_FWD_DEFINED__ */
+
+#ifndef __IXAudio2EngineCallback_FWD_DEFINED__
+#define __IXAudio2EngineCallback_FWD_DEFINED__
+typedef interface IXAudio2EngineCallback IXAudio2EngineCallback;
+#ifdef __cplusplus
+interface IXAudio2EngineCallback;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio20Voice_FWD_DEFINED__
+#define __IXAudio20Voice_FWD_DEFINED__
+typedef interface IXAudio20Voice IXAudio20Voice;
+#ifdef __cplusplus
+interface IXAudio20Voice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio23Voice_FWD_DEFINED__
+#define __IXAudio23Voice_FWD_DEFINED__
+typedef interface IXAudio23Voice IXAudio23Voice;
+#ifdef __cplusplus
+interface IXAudio23Voice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio27Voice_FWD_DEFINED__
+#define __IXAudio27Voice_FWD_DEFINED__
+typedef interface IXAudio27Voice IXAudio27Voice;
+#ifdef __cplusplus
+interface IXAudio27Voice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio2Voice_FWD_DEFINED__
+#define __IXAudio2Voice_FWD_DEFINED__
+typedef interface IXAudio2Voice IXAudio2Voice;
+#ifdef __cplusplus
+interface IXAudio2Voice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio20SourceVoice_FWD_DEFINED__
+#define __IXAudio20SourceVoice_FWD_DEFINED__
+typedef interface IXAudio20SourceVoice IXAudio20SourceVoice;
+#ifdef __cplusplus
+interface IXAudio20SourceVoice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio23SourceVoice_FWD_DEFINED__
+#define __IXAudio23SourceVoice_FWD_DEFINED__
+typedef interface IXAudio23SourceVoice IXAudio23SourceVoice;
+#ifdef __cplusplus
+interface IXAudio23SourceVoice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio27SourceVoice_FWD_DEFINED__
+#define __IXAudio27SourceVoice_FWD_DEFINED__
+typedef interface IXAudio27SourceVoice IXAudio27SourceVoice;
+#ifdef __cplusplus
+interface IXAudio27SourceVoice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio2SourceVoice_FWD_DEFINED__
+#define __IXAudio2SourceVoice_FWD_DEFINED__
+typedef interface IXAudio2SourceVoice IXAudio2SourceVoice;
+#ifdef __cplusplus
+interface IXAudio2SourceVoice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio20SubmixVoice_FWD_DEFINED__
+#define __IXAudio20SubmixVoice_FWD_DEFINED__
+typedef interface IXAudio20SubmixVoice IXAudio20SubmixVoice;
+#ifdef __cplusplus
+interface IXAudio20SubmixVoice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio23SubmixVoice_FWD_DEFINED__
+#define __IXAudio23SubmixVoice_FWD_DEFINED__
+typedef interface IXAudio23SubmixVoice IXAudio23SubmixVoice;
+#ifdef __cplusplus
+interface IXAudio23SubmixVoice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio27SubmixVoice_FWD_DEFINED__
+#define __IXAudio27SubmixVoice_FWD_DEFINED__
+typedef interface IXAudio27SubmixVoice IXAudio27SubmixVoice;
+#ifdef __cplusplus
+interface IXAudio27SubmixVoice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio2SubmixVoice_FWD_DEFINED__
+#define __IXAudio2SubmixVoice_FWD_DEFINED__
+typedef interface IXAudio2SubmixVoice IXAudio2SubmixVoice;
+#ifdef __cplusplus
+interface IXAudio2SubmixVoice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio20MasteringVoice_FWD_DEFINED__
+#define __IXAudio20MasteringVoice_FWD_DEFINED__
+typedef interface IXAudio20MasteringVoice IXAudio20MasteringVoice;
+#ifdef __cplusplus
+interface IXAudio20MasteringVoice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio23MasteringVoice_FWD_DEFINED__
+#define __IXAudio23MasteringVoice_FWD_DEFINED__
+typedef interface IXAudio23MasteringVoice IXAudio23MasteringVoice;
+#ifdef __cplusplus
+interface IXAudio23MasteringVoice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio27MasteringVoice_FWD_DEFINED__
+#define __IXAudio27MasteringVoice_FWD_DEFINED__
+typedef interface IXAudio27MasteringVoice IXAudio27MasteringVoice;
+#ifdef __cplusplus
+interface IXAudio27MasteringVoice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio2MasteringVoice_FWD_DEFINED__
+#define __IXAudio2MasteringVoice_FWD_DEFINED__
+typedef interface IXAudio2MasteringVoice IXAudio2MasteringVoice;
+#ifdef __cplusplus
+interface IXAudio2MasteringVoice;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio20VoiceCallback_FWD_DEFINED__
+#define __IXAudio20VoiceCallback_FWD_DEFINED__
+typedef interface IXAudio20VoiceCallback IXAudio20VoiceCallback;
+#ifdef __cplusplus
+interface IXAudio20VoiceCallback;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio2VoiceCallback_FWD_DEFINED__
+#define __IXAudio2VoiceCallback_FWD_DEFINED__
+typedef interface IXAudio2VoiceCallback IXAudio2VoiceCallback;
+#ifdef __cplusplus
+interface IXAudio2VoiceCallback;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio20_FWD_DEFINED__
+#define __IXAudio20_FWD_DEFINED__
+typedef interface IXAudio20 IXAudio20;
+#ifdef __cplusplus
+interface IXAudio20;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio22_FWD_DEFINED__
+#define __IXAudio22_FWD_DEFINED__
+typedef interface IXAudio22 IXAudio22;
+#ifdef __cplusplus
+interface IXAudio22;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio23_FWD_DEFINED__
+#define __IXAudio23_FWD_DEFINED__
+typedef interface IXAudio23 IXAudio23;
+#ifdef __cplusplus
+interface IXAudio23;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio27_FWD_DEFINED__
+#define __IXAudio27_FWD_DEFINED__
+typedef interface IXAudio27 IXAudio27;
+#ifdef __cplusplus
+interface IXAudio27;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IXAudio2_FWD_DEFINED__
+#define __IXAudio2_FWD_DEFINED__
+typedef interface IXAudio2 IXAudio2;
+#ifdef __cplusplus
+interface IXAudio2;
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+#include <mmdeviceapi.h>
+#include <audiosessiontypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <pshpack1.h>
+/*****************************************************************************
+ * XAudio20 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio20, 0xfac23f48, 0x31f5, 0x45a8, 0xb4,0x9b, 0x52,0x25,0xd6,0x14,0x01,0xaa);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("fac23f48-31f5-45a8-b49b-5225d61401aa") XAudio20;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio20, 0xfac23f48, 0x31f5, 0x45a8, 0xb4,0x9b, 0x52,0x25,0xd6,0x14,0x01,0xaa)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio21 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio21, 0xe21a7345, 0xeb21, 0x468e, 0xbe,0x50, 0x80,0x4d,0xb9,0x7c,0xf7,0x08);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("e21a7345-eb21-468e-be50-804db97cf708") XAudio21;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio21, 0xe21a7345, 0xeb21, 0x468e, 0xbe,0x50, 0x80,0x4d,0xb9,0x7c,0xf7,0x08)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio22 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio22, 0xb802058a, 0x464a, 0x42db, 0xbc,0x10, 0xb6,0x50,0xd6,0xf2,0x58,0x6a);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("b802058a-464a-42db-bc10-b650d6f2586a") XAudio22;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio22, 0xb802058a, 0x464a, 0x42db, 0xbc,0x10, 0xb6,0x50,0xd6,0xf2,0x58,0x6a)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio23 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio23, 0x4c5e637a, 0x16c7, 0x4de3, 0x9c,0x46, 0x5e,0xd2,0x21,0x81,0x96,0x2d);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("4c5e637a-16c7-4de3-9c46-5ed22181962d") XAudio23;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio23, 0x4c5e637a, 0x16c7, 0x4de3, 0x9c,0x46, 0x5e,0xd2,0x21,0x81,0x96,0x2d)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio24 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio24, 0x03219e78, 0x5bc3, 0x44d1, 0xb9,0x2e, 0xf6,0x3d,0x89,0xcc,0x65,0x26);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("03219e78-5bc3-44d1-b92e-f63d89cc6526") XAudio24;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio24, 0x03219e78, 0x5bc3, 0x44d1, 0xb9,0x2e, 0xf6,0x3d,0x89,0xcc,0x65,0x26)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio25 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio25, 0x4c9b6dde, 0x6809, 0x46e6, 0xa2,0x78, 0x9b,0x6a,0x97,0x58,0x86,0x70);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("4c9b6dde-6809-46e6-a278-9b6a97588670") XAudio25;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio25, 0x4c9b6dde, 0x6809, 0x46e6, 0xa2,0x78, 0x9b,0x6a,0x97,0x58,0x86,0x70)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio26 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio26, 0x3eda9b49, 0x2085, 0x498b, 0x9b,0xb2, 0x39,0xa6,0x77,0x84,0x93,0xde);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("3eda9b49-2085-498b-9bb2-39a6778493de") XAudio26;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio26, 0x3eda9b49, 0x2085, 0x498b, 0x9b,0xb2, 0x39,0xa6,0x77,0x84,0x93,0xde)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio27 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio27, 0x5a508685, 0xa254, 0x4fba, 0x9b,0x82, 0x9a,0x24,0xb0,0x03,0x06,0xaf);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("5a508685-a254-4fba-9b82-9a24b00306af") XAudio27;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio27, 0x5a508685, 0xa254, 0x4fba, 0x9b,0x82, 0x9a,0x24,0xb0,0x03,0x06,0xaf)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio2Debug coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio2Debug, 0xdb05ea35, 0x0329, 0x4d4b, 0xa5,0x3a, 0x6d,0xea,0xd0,0x3d,0x38,0x52);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("db05ea35-0329-4d4b-a53a-6dead03d3852") XAudio2Debug;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio2Debug, 0xdb05ea35, 0x0329, 0x4d4b, 0xa5,0x3a, 0x6d,0xea,0xd0,0x3d,0x38,0x52)
+#endif
+#endif
+
+#if 0
+typedef struct WAVEFORMATEX {
+    WORD wFormatTag;
+    WORD nChannels;
+    DWORD nSamplesPerSec;
+    DWORD nAvgBytesPerSec;
+    WORD nBlockAlign;
+    WORD wBitsPerSample;
+    WORD cbSize;
+} WAVEFORMATEX;
+typedef struct __WIDL_xaudio2_generated_name_00000020 {
+    WAVEFORMATEX Format;
+    union {
+        WORD wValidBitsPerSample;
+        WORD wSamplesPerBlock;
+        WORD wReserved;
+    } Samples;
+    DWORD dwChannelMask;
+    GUID SubFormat;
+} WAVEFORMATEXTENSIBLE;
+typedef struct __WIDL_xaudio2_generated_name_00000020 *PWAVEFORMATEXTENSIBLE;
+#else
+#include <mmreg.h>
+#endif
+#ifndef __IXAudio2Voice_FWD_DEFINED__
+#define __IXAudio2Voice_FWD_DEFINED__
+typedef interface IXAudio2Voice IXAudio2Voice;
+#ifdef __cplusplus
+interface IXAudio2Voice;
+#endif /* __cplusplus */
+#endif
+
+typedef enum XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER {
+    Processor1 = 0x1,
+    Processor2 = 0x2,
+    Processor3 = 0x4,
+    Processor4 = 0x8,
+    Processor5 = 0x10,
+    Processor6 = 0x20,
+    Processor7 = 0x40,
+    Processor8 = 0x80,
+    Processor9 = 0x100,
+    Processor10 = 0x200,
+    Processor11 = 0x400,
+    Processor12 = 0x800,
+    Processor13 = 0x1000,
+    Processor14 = 0x2000,
+    Processor15 = 0x4000,
+    Processor16 = 0x8000,
+    Processor17 = 0x10000,
+    Processor18 = 0x20000,
+    Processor19 = 0x40000,
+    Processor20 = 0x80000,
+    Processor21 = 0x100000,
+    Processor22 = 0x200000,
+    Processor23 = 0x400000,
+    Processor24 = 0x800000,
+    Processor25 = 0x1000000,
+    Processor26 = 0x2000000,
+    Processor27 = 0x4000000,
+    Processor28 = 0x8000000,
+    Processor29 = 0x10000000,
+    Processor30 = 0x20000000,
+    Processor31 = 0x40000000,
+    Processor32 = 0x80000000,
+    XAUDIO2_ANY_PROCESSOR = 0xffffffff,
+    XAUDIO2_DEFAULT_PROCESSOR = XAUDIO2_ANY_PROCESSOR
+} XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER;
+typedef enum XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER XAUDIO2_PROCESSOR;
+typedef struct XAUDIO2_PERFORMANCE_DATA {
+    UINT64 AudioCyclesSinceLastQuery;
+    UINT64 TotalCyclesSinceLastQuery;
+    UINT32 MinimumCyclesPerQuantum;
+    UINT32 MaximumCyclesPerQuantum;
+    UINT32 MemoryUsageInBytes;
+    UINT32 CurrentLatencyInSamples;
+    UINT32 GlitchesSinceEngineStarted;
+    UINT32 ActiveSourceVoiceCount;
+    UINT32 TotalSourceVoiceCount;
+    UINT32 ActiveSubmixVoiceCount;
+    UINT32 ActiveResamplerCount;
+    UINT32 ActiveMatrixMixCount;
+    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,
+    DefaultConsoleDevice = 0x1,
+    DefaultMultimediaDevice = 0x2,
+    DefaultCommunicationsDevice = 0x4,
+    DefaultGameDevice = 0x8,
+    GlobalDefaultDevice = 0xf,
+    InvalidDeviceRole = ~GlobalDefaultDevice
+} XAUDIO2_DEVICE_ROLE;
+typedef struct XAUDIO2_DEVICE_DETAILS {
+    WCHAR DeviceID[256];
+    WCHAR DisplayName[256];
+    XAUDIO2_DEVICE_ROLE Role;
+    WAVEFORMATEXTENSIBLE OutputFormat;
+} XAUDIO2_DEVICE_DETAILS;
+typedef struct XAUDIO27_VOICE_DETAILS {
+    UINT32 CreationFlags;
+    UINT32 InputChannels;
+    UINT32 InputSampleRate;
+} XAUDIO27_VOICE_DETAILS;
+typedef struct XAUDIO2_VOICE_DETAILS {
+    UINT32 CreationFlags;
+    UINT32 ActiveFlags;
+    UINT32 InputChannels;
+    UINT32 InputSampleRate;
+} XAUDIO2_VOICE_DETAILS;
+typedef struct XAUDIO2_SEND_DESCRIPTOR {
+    UINT32 Flags;
+    IXAudio2Voice *pOutputVoice;
+} XAUDIO2_SEND_DESCRIPTOR;
+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;
+typedef struct XAUDIO2_EFFECT_DESCRIPTOR {
+    IUnknown *pEffect;
+    WINBOOL InitialState;
+    UINT32 OutputChannels;
+} XAUDIO2_EFFECT_DESCRIPTOR;
+typedef struct XAUDIO2_EFFECT_CHAIN {
+    UINT32 EffectCount;
+    XAUDIO2_EFFECT_DESCRIPTOR *pEffectDescriptors;
+} XAUDIO2_EFFECT_CHAIN;
+#define XAUDIO2_MAX_BUFFER_BYTES (0x80000000)
+
+#define XAUDIO2_MAX_QUEUED_BUFFERS (64)
+
+#define XAUDIO2_MAX_BUFFERS_SYSTEM (2)
+
+#define XAUDIO2_MAX_AUDIO_CHANNELS (64)
+
+#define XAUDIO2_MIN_SAMPLE_RATE (1000)
+
+#define XAUDIO2_MAX_SAMPLE_RATE (200000)
+
+#define XAUDIO2_MAX_VOLUME_LEVEL (16777216.0000000)
+
+#define XAUDIO2_MIN_FREQ_RATIO (1 / 1024.00000000000)
+
+#define XAUDIO2_MAX_FREQ_RATIO (1024.00000000000)
+
+#define XAUDIO2_DEFAULT_FREQ_RATIO (2.00000000000000)
+
+#define XAUDIO2_MAX_FILTER_ONEOVERQ (1.50000000000000)
+
+#define XAUDIO2_MAX_FILTER_FREQUENCY (1.00000000000000)
+
+#define XAUDIO2_MAX_LOOP_COUNT (254)
+
+#define XAUDIO20_MAX_LOOP_COUNT (0x100000)
+
+#define XAUDIO2_COMMIT_NOW (0)
+
+#define XAUDIO2_COMMIT_ALL (0)
+
+#define XAUDIO2_INVALID_OPSET (0xffffffff)
+
+#define XAUDIO2_NO_LOOP_REGION (0)
+
+#define XAUDIO2_LOOP_INFINITE (255)
+
+#define XAUDIO20_LOOP_INFINITE ((UINT)-1)
+
+#define XAUDIO2_DEFAULT_CHANNELS (0)
+
+#define XAUDIO2_DEFAULT_SAMPLERATE (0)
+
+/*****************************************************************************
+ * IXAudio2EngineCallback interface
+ */
+#ifndef __IXAudio2EngineCallback_INTERFACE_DEFINED__
+#define __IXAudio2EngineCallback_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio2EngineCallback
+{
+
+    BEGIN_INTERFACE
+
+    virtual void STDMETHODCALLTYPE OnProcessingPassStart(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE OnProcessingPassEnd(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE OnCriticalError(
+        HRESULT Error) = 0;
+
+    END_INTERFACE
+
+};
+#else
+typedef struct IXAudio2EngineCallbackVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio2EngineCallback methods ***/
+    void (STDMETHODCALLTYPE *OnProcessingPassStart)(
+        IXAudio2EngineCallback *This);
+
+    void (STDMETHODCALLTYPE *OnProcessingPassEnd)(
+        IXAudio2EngineCallback *This);
+
+    void (STDMETHODCALLTYPE *OnCriticalError)(
+        IXAudio2EngineCallback *This,
+        HRESULT Error);
+
+    END_INTERFACE
+} IXAudio2EngineCallbackVtbl;
+
+interface IXAudio2EngineCallback {
+    CONST_VTBL IXAudio2EngineCallbackVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio2EngineCallback methods ***/
+#define IXAudio2EngineCallback_OnProcessingPassStart(This) (This)->lpVtbl->OnProcessingPassStart(This)
+#define IXAudio2EngineCallback_OnProcessingPassEnd(This) (This)->lpVtbl->OnProcessingPassEnd(This)
+#define IXAudio2EngineCallback_OnCriticalError(This,Error) (This)->lpVtbl->OnCriticalError(This,Error)
+#else
+/*** IXAudio2EngineCallback methods ***/
+static FORCEINLINE void IXAudio2EngineCallback_OnProcessingPassStart(IXAudio2EngineCallback* This) {
+    This->lpVtbl->OnProcessingPassStart(This);
+}
+static FORCEINLINE void IXAudio2EngineCallback_OnProcessingPassEnd(IXAudio2EngineCallback* This) {
+    This->lpVtbl->OnProcessingPassEnd(This);
+}
+static FORCEINLINE void IXAudio2EngineCallback_OnCriticalError(IXAudio2EngineCallback* This,HRESULT Error) {
+    This->lpVtbl->OnCriticalError(This,Error);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio2EngineCallback_INTERFACE_DEFINED__ */
+
+typedef enum XAUDIO2_FILTER_TYPE {
+    LowPassFilter = 0,
+    BandPassFilter = 1,
+    HighPassFilter = 2,
+    NotchFilter = 3
+} XAUDIO2_FILTER_TYPE;
+typedef struct XAUDIO2_FILTER_PARAMETERS {
+    XAUDIO2_FILTER_TYPE Type;
+    float Frequency;
+    float OneOverQ;
+} XAUDIO2_FILTER_PARAMETERS;
+/*****************************************************************************
+ * IXAudio20Voice interface
+ */
+#ifndef __IXAudio20Voice_INTERFACE_DEFINED__
+#define __IXAudio20Voice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio20Voice
+{
+
+    BEGIN_INTERFACE
+
+    virtual void STDMETHODCALLTYPE GetVoiceDetails(
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputVoices(
+        const XAUDIO23_VOICE_SENDS *pSendList) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEffectChain(
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnableEffect(
+        UINT32 EffectIndex,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DisableEffect(
+        UINT32 EffectIndex,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetEffectState(
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEffectParameters(
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEffectParameters(
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFilterParameters(
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetFilterParameters(
+        XAUDIO2_FILTER_PARAMETERS *pParameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVolume(
+        float Volume,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetVolume(
+        float *pVolume) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetChannelVolumes(
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetChannelVolumes(
+        UINT32 Channels,
+        float *pVolumes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputMatrix(
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOutputMatrix(
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix) = 0;
+
+    virtual void STDMETHODCALLTYPE DestroyVoice(
+        ) = 0;
+
+    END_INTERFACE
+
+};
+#else
+typedef struct IXAudio20VoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio20Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio20Voice *This,
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio20Voice *This,
+        const XAUDIO23_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio20Voice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio20Voice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio20Voice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio20Voice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio20Voice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio20Voice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio20Voice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio20Voice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio20Voice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio20Voice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio20Voice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio20Voice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio20Voice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio20Voice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio20Voice *This);
+
+    END_INTERFACE
+} IXAudio20VoiceVtbl;
+
+interface IXAudio20Voice {
+    CONST_VTBL IXAudio20VoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio20Voice methods ***/
+#define IXAudio20Voice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio20Voice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio20Voice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio20Voice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20Voice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20Voice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio20Voice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio20Voice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio20Voice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio20Voice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio20Voice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio20Voice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio20Voice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio20Voice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio20Voice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio20Voice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio20Voice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio20Voice methods ***/
+static FORCEINLINE void IXAudio20Voice_GetVoiceDetails(IXAudio20Voice* This,XAUDIO27_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetOutputVoices(IXAudio20Voice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetEffectChain(IXAudio20Voice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_EnableEffect(IXAudio20Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_DisableEffect(IXAudio20Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio20Voice_GetEffectState(IXAudio20Voice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetEffectParameters(IXAudio20Voice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_GetEffectParameters(IXAudio20Voice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetFilterParameters(IXAudio20Voice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio20Voice_GetFilterParameters(IXAudio20Voice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetVolume(IXAudio20Voice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio20Voice_GetVolume(IXAudio20Voice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetChannelVolumes(IXAudio20Voice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio20Voice_GetChannelVolumes(IXAudio20Voice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetOutputMatrix(IXAudio20Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_GetOutputMatrix(IXAudio20Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    return This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio20Voice_DestroyVoice(IXAudio20Voice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio20Voice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio23Voice interface
+ */
+#ifndef __IXAudio23Voice_INTERFACE_DEFINED__
+#define __IXAudio23Voice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio23Voice
+{
+
+    BEGIN_INTERFACE
+
+    virtual void STDMETHODCALLTYPE GetVoiceDetails(
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputVoices(
+        const XAUDIO23_VOICE_SENDS *pSendList) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEffectChain(
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnableEffect(
+        UINT32 EffectIndex,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DisableEffect(
+        UINT32 EffectIndex,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetEffectState(
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEffectParameters(
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEffectParameters(
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFilterParameters(
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetFilterParameters(
+        XAUDIO2_FILTER_PARAMETERS *pParameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVolume(
+        float Volume,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetVolume(
+        float *pVolume) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetChannelVolumes(
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetChannelVolumes(
+        UINT32 Channels,
+        float *pVolumes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputMatrix(
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetOutputMatrix(
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix) = 0;
+
+    virtual void STDMETHODCALLTYPE DestroyVoice(
+        ) = 0;
+
+    END_INTERFACE
+
+};
+#else
+typedef struct IXAudio23VoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio23Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio23Voice *This,
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio23Voice *This,
+        const XAUDIO23_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio23Voice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio23Voice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio23Voice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio23Voice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio23Voice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio23Voice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio23Voice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio23Voice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio23Voice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio23Voice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio23Voice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio23Voice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio23Voice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio23Voice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio23Voice *This);
+
+    END_INTERFACE
+} IXAudio23VoiceVtbl;
+
+interface IXAudio23Voice {
+    CONST_VTBL IXAudio23VoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio23Voice methods ***/
+#define IXAudio23Voice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio23Voice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio23Voice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio23Voice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23Voice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23Voice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio23Voice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio23Voice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio23Voice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio23Voice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio23Voice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio23Voice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio23Voice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio23Voice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio23Voice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio23Voice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio23Voice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio23Voice methods ***/
+static FORCEINLINE void IXAudio23Voice_GetVoiceDetails(IXAudio23Voice* This,XAUDIO27_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetOutputVoices(IXAudio23Voice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetEffectChain(IXAudio23Voice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_EnableEffect(IXAudio23Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_DisableEffect(IXAudio23Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio23Voice_GetEffectState(IXAudio23Voice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetEffectParameters(IXAudio23Voice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_GetEffectParameters(IXAudio23Voice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetFilterParameters(IXAudio23Voice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio23Voice_GetFilterParameters(IXAudio23Voice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetVolume(IXAudio23Voice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio23Voice_GetVolume(IXAudio23Voice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetChannelVolumes(IXAudio23Voice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio23Voice_GetChannelVolumes(IXAudio23Voice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetOutputMatrix(IXAudio23Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio23Voice_GetOutputMatrix(IXAudio23Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio23Voice_DestroyVoice(IXAudio23Voice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio23Voice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio27Voice interface
+ */
+#ifndef __IXAudio27Voice_INTERFACE_DEFINED__
+#define __IXAudio27Voice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio27Voice
+{
+
+    BEGIN_INTERFACE
+
+    virtual void STDMETHODCALLTYPE GetVoiceDetails(
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputVoices(
+        const XAUDIO2_VOICE_SENDS *pSendList) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEffectChain(
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnableEffect(
+        UINT32 EffectIndex,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DisableEffect(
+        UINT32 EffectIndex,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetEffectState(
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEffectParameters(
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEffectParameters(
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFilterParameters(
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetFilterParameters(
+        XAUDIO2_FILTER_PARAMETERS *pParameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputFilterParameters(
+        IXAudio2Voice *pDestinationVoice,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetOutputFilterParameters(
+        IXAudio2Voice *pDestinationVoice,
+        XAUDIO2_FILTER_PARAMETERS *pParameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVolume(
+        float Volume,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetVolume(
+        float *pVolume) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetChannelVolumes(
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetChannelVolumes(
+        UINT32 Channels,
+        float *pVolumes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputMatrix(
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetOutputMatrix(
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix) = 0;
+
+    virtual void STDMETHODCALLTYPE DestroyVoice(
+        ) = 0;
+
+    END_INTERFACE
+
+};
+#else
+typedef struct IXAudio27VoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio27Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio27Voice *This,
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio27Voice *This,
+        const XAUDIO2_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio27Voice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio27Voice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio27Voice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio27Voice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio27Voice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio27Voice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio27Voice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio27Voice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputFilterParameters)(
+        IXAudio27Voice *This,
+        IXAudio2Voice *pDestinationVoice,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputFilterParameters)(
+        IXAudio27Voice *This,
+        IXAudio2Voice *pDestinationVoice,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio27Voice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio27Voice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio27Voice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio27Voice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio27Voice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio27Voice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio27Voice *This);
+
+    END_INTERFACE
+} IXAudio27VoiceVtbl;
+
+interface IXAudio27Voice {
+    CONST_VTBL IXAudio27VoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio27Voice methods ***/
+#define IXAudio27Voice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio27Voice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio27Voice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio27Voice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio27Voice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio27Voice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio27Voice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio27Voice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio27Voice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio27Voice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio27Voice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) (This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)
+#define IXAudio27Voice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) (This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)
+#define IXAudio27Voice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio27Voice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio27Voice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio27Voice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio27Voice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio27Voice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio27Voice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio27Voice methods ***/
+static FORCEINLINE void IXAudio27Voice_GetVoiceDetails(IXAudio27Voice* This,XAUDIO27_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio27Voice_SetOutputVoices(IXAudio27Voice* This,const XAUDIO2_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio27Voice_SetEffectChain(IXAudio27Voice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio27Voice_EnableEffect(IXAudio27Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27Voice_DisableEffect(IXAudio27Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio27Voice_GetEffectState(IXAudio27Voice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio27Voice_SetEffectParameters(IXAudio27Voice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27Voice_GetEffectParameters(IXAudio27Voice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio27Voice_SetFilterParameters(IXAudio27Voice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio27Voice_GetFilterParameters(IXAudio27Voice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio27Voice_SetOutputFilterParameters(IXAudio27Voice* This,IXAudio2Voice *pDestinationVoice,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio27Voice_GetOutputFilterParameters(IXAudio27Voice* This,IXAudio2Voice *pDestinationVoice,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio27Voice_SetVolume(IXAudio27Voice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio27Voice_GetVolume(IXAudio27Voice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio27Voice_SetChannelVolumes(IXAudio27Voice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio27Voice_GetChannelVolumes(IXAudio27Voice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio27Voice_SetOutputMatrix(IXAudio27Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio27Voice_GetOutputMatrix(IXAudio27Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio27Voice_DestroyVoice(IXAudio27Voice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio27Voice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio2Voice interface
+ */
+#ifndef __IXAudio2Voice_INTERFACE_DEFINED__
+#define __IXAudio2Voice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio2Voice
+{
+
+    BEGIN_INTERFACE
+
+    virtual void STDMETHODCALLTYPE GetVoiceDetails(
+        XAUDIO2_VOICE_DETAILS *pVoiceDetails) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputVoices(
+        const XAUDIO2_VOICE_SENDS *pSendList) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEffectChain(
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnableEffect(
+        UINT32 EffectIndex,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DisableEffect(
+        UINT32 EffectIndex,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetEffectState(
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEffectParameters(
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEffectParameters(
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFilterParameters(
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetFilterParameters(
+        XAUDIO2_FILTER_PARAMETERS *pParameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputFilterParameters(
+        IXAudio2Voice *pDestinationVoice,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetOutputFilterParameters(
+        IXAudio2Voice *pDestinationVoice,
+        XAUDIO2_FILTER_PARAMETERS *pParameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVolume(
+        float Volume,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetVolume(
+        float *pVolume) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetChannelVolumes(
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetChannelVolumes(
+        UINT32 Channels,
+        float *pVolumes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputMatrix(
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetOutputMatrix(
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix) = 0;
+
+    virtual void STDMETHODCALLTYPE DestroyVoice(
+        ) = 0;
+
+    END_INTERFACE
+
+};
+#else
+typedef struct IXAudio2VoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio2Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio2Voice *This,
+        XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio2Voice *This,
+        const XAUDIO2_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio2Voice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio2Voice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio2Voice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio2Voice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio2Voice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio2Voice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio2Voice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio2Voice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputFilterParameters)(
+        IXAudio2Voice *This,
+        IXAudio2Voice *pDestinationVoice,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputFilterParameters)(
+        IXAudio2Voice *This,
+        IXAudio2Voice *pDestinationVoice,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio2Voice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio2Voice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio2Voice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio2Voice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio2Voice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio2Voice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio2Voice *This);
+
+    END_INTERFACE
+} IXAudio2VoiceVtbl;
+
+interface IXAudio2Voice {
+    CONST_VTBL IXAudio2VoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio2Voice methods ***/
+#define IXAudio2Voice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio2Voice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio2Voice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio2Voice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2Voice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2Voice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio2Voice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio2Voice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio2Voice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio2Voice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio2Voice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) (This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)
+#define IXAudio2Voice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) (This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)
+#define IXAudio2Voice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio2Voice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio2Voice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio2Voice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio2Voice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio2Voice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio2Voice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio2Voice methods ***/
+static FORCEINLINE void IXAudio2Voice_GetVoiceDetails(IXAudio2Voice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetOutputVoices(IXAudio2Voice* This,const XAUDIO2_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetEffectChain(IXAudio2Voice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_EnableEffect(IXAudio2Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_DisableEffect(IXAudio2Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio2Voice_GetEffectState(IXAudio2Voice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetEffectParameters(IXAudio2Voice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_GetEffectParameters(IXAudio2Voice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetFilterParameters(IXAudio2Voice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2Voice_GetFilterParameters(IXAudio2Voice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetOutputFilterParameters(IXAudio2Voice* This,IXAudio2Voice *pDestinationVoice,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2Voice_GetOutputFilterParameters(IXAudio2Voice* This,IXAudio2Voice *pDestinationVoice,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetVolume(IXAudio2Voice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio2Voice_GetVolume(IXAudio2Voice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetChannelVolumes(IXAudio2Voice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio2Voice_GetChannelVolumes(IXAudio2Voice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetOutputMatrix(IXAudio2Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio2Voice_GetOutputMatrix(IXAudio2Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio2Voice_DestroyVoice(IXAudio2Voice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio2Voice_INTERFACE_DEFINED__ */
+
+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;
+/*****************************************************************************
+ * IXAudio20SourceVoice interface
+ */
+#ifndef __IXAudio20SourceVoice_INTERFACE_DEFINED__
+#define __IXAudio20SourceVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio20SourceVoice : public IXAudio20Voice
+{
+    virtual HRESULT STDMETHODCALLTYPE Start(
+        UINT32 Flags = 0,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stop(
+        UINT32 Flags = 0,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SubmitSourceBuffer(
+        const XAUDIO2_BUFFER *pBuffer,
+        const XAUDIO2_BUFFER_WMA *pBufferWMA = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FlushSourceBuffers(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Discontinuity(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ExitLoop(
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetState(
+        XAUDIO2_VOICE_STATE *pVoiceState) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFrequencyRatio(
+        float Ratio,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetFrequencyRatio(
+        float *pRatio) = 0;
+
+};
+#else
+typedef struct IXAudio20SourceVoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio20Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio20SourceVoice *This,
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio20SourceVoice *This,
+        const XAUDIO23_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio20SourceVoice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio20SourceVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio20SourceVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio20SourceVoice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio20SourceVoice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio20SourceVoice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio20SourceVoice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio20SourceVoice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio20SourceVoice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio20SourceVoice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio20SourceVoice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio20SourceVoice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio20SourceVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio20SourceVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio20SourceVoice *This);
+
+    /*** IXAudio20SourceVoice methods ***/
+    HRESULT (STDMETHODCALLTYPE *Start)(
+        IXAudio20SourceVoice *This,
+        UINT32 Flags,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IXAudio20SourceVoice *This,
+        UINT32 Flags,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *SubmitSourceBuffer)(
+        IXAudio20SourceVoice *This,
+        const XAUDIO2_BUFFER *pBuffer,
+        const XAUDIO2_BUFFER_WMA *pBufferWMA);
+
+    HRESULT (STDMETHODCALLTYPE *FlushSourceBuffers)(
+        IXAudio20SourceVoice *This);
+
+    HRESULT (STDMETHODCALLTYPE *Discontinuity)(
+        IXAudio20SourceVoice *This);
+
+    HRESULT (STDMETHODCALLTYPE *ExitLoop)(
+        IXAudio20SourceVoice *This,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetState)(
+        IXAudio20SourceVoice *This,
+        XAUDIO2_VOICE_STATE *pVoiceState);
+
+    HRESULT (STDMETHODCALLTYPE *SetFrequencyRatio)(
+        IXAudio20SourceVoice *This,
+        float Ratio,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFrequencyRatio)(
+        IXAudio20SourceVoice *This,
+        float *pRatio);
+
+    END_INTERFACE
+} IXAudio20SourceVoiceVtbl;
+
+interface IXAudio20SourceVoice {
+    CONST_VTBL IXAudio20SourceVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio20Voice methods ***/
+#define IXAudio20SourceVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio20SourceVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio20SourceVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio20SourceVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20SourceVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20SourceVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio20SourceVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio20SourceVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio20SourceVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio20SourceVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio20SourceVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio20SourceVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio20SourceVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio20SourceVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio20SourceVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio20SourceVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio20SourceVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+/*** IXAudio20SourceVoice methods ***/
+#define IXAudio20SourceVoice_Start(This,Flags,OperationSet) (This)->lpVtbl->Start(This,Flags,OperationSet)
+#define IXAudio20SourceVoice_Stop(This,Flags,OperationSet) (This)->lpVtbl->Stop(This,Flags,OperationSet)
+#define IXAudio20SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) (This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA)
+#define IXAudio20SourceVoice_FlushSourceBuffers(This) (This)->lpVtbl->FlushSourceBuffers(This)
+#define IXAudio20SourceVoice_Discontinuity(This) (This)->lpVtbl->Discontinuity(This)
+#define IXAudio20SourceVoice_ExitLoop(This,OperationSet) (This)->lpVtbl->ExitLoop(This,OperationSet)
+#define IXAudio20SourceVoice_GetState(This,pVoiceState) (This)->lpVtbl->GetState(This,pVoiceState)
+#define IXAudio20SourceVoice_SetFrequencyRatio(This,Ratio,OperationSet) (This)->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet)
+#define IXAudio20SourceVoice_GetFrequencyRatio(This,pRatio) (This)->lpVtbl->GetFrequencyRatio(This,pRatio)
+#else
+/*** IXAudio20Voice methods ***/
+static FORCEINLINE void IXAudio20SourceVoice_GetVoiceDetails(IXAudio20SourceVoice* This,XAUDIO27_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetOutputVoices(IXAudio20SourceVoice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetEffectChain(IXAudio20SourceVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_EnableEffect(IXAudio20SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_DisableEffect(IXAudio20SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio20SourceVoice_GetEffectState(IXAudio20SourceVoice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetEffectParameters(IXAudio20SourceVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_GetEffectParameters(IXAudio20SourceVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetFilterParameters(IXAudio20SourceVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio20SourceVoice_GetFilterParameters(IXAudio20SourceVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetVolume(IXAudio20SourceVoice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio20SourceVoice_GetVolume(IXAudio20SourceVoice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetChannelVolumes(IXAudio20SourceVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio20SourceVoice_GetChannelVolumes(IXAudio20SourceVoice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetOutputMatrix(IXAudio20SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_GetOutputMatrix(IXAudio20SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    return This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio20SourceVoice_DestroyVoice(IXAudio20SourceVoice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+/*** IXAudio20SourceVoice methods ***/
+static FORCEINLINE HRESULT IXAudio20SourceVoice_Start(IXAudio20SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+    return This->lpVtbl->Start(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_Stop(IXAudio20SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+    return This->lpVtbl->Stop(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SubmitSourceBuffer(IXAudio20SourceVoice* This,const XAUDIO2_BUFFER *pBuffer,const XAUDIO2_BUFFER_WMA *pBufferWMA) {
+    return This->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_FlushSourceBuffers(IXAudio20SourceVoice* This) {
+    return This->lpVtbl->FlushSourceBuffers(This);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_Discontinuity(IXAudio20SourceVoice* This) {
+    return This->lpVtbl->Discontinuity(This);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_ExitLoop(IXAudio20SourceVoice* This,UINT32 OperationSet) {
+    return This->lpVtbl->ExitLoop(This,OperationSet);
+}
+static FORCEINLINE void IXAudio20SourceVoice_GetState(IXAudio20SourceVoice* This,XAUDIO2_VOICE_STATE *pVoiceState) {
+    This->lpVtbl->GetState(This,pVoiceState);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetFrequencyRatio(IXAudio20SourceVoice* This,float Ratio,UINT32 OperationSet) {
+    return This->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet);
+}
+static FORCEINLINE void IXAudio20SourceVoice_GetFrequencyRatio(IXAudio20SourceVoice* This,float *pRatio) {
+    This->lpVtbl->GetFrequencyRatio(This,pRatio);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio20SourceVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio23SourceVoice interface
+ */
+#ifndef __IXAudio23SourceVoice_INTERFACE_DEFINED__
+#define __IXAudio23SourceVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio23SourceVoice : public IXAudio23Voice
+{
+    virtual HRESULT STDMETHODCALLTYPE Start(
+        UINT32 Flags = 0,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stop(
+        UINT32 Flags = 0,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SubmitSourceBuffer(
+        const XAUDIO2_BUFFER *pBuffer,
+        const XAUDIO2_BUFFER_WMA *pBufferWMA = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FlushSourceBuffers(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Discontinuity(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ExitLoop(
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetState(
+        XAUDIO2_VOICE_STATE *pVoiceState) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFrequencyRatio(
+        float Ratio,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetFrequencyRatio(
+        float *pRatio) = 0;
+
+};
+#else
+typedef struct IXAudio23SourceVoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio23Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio23SourceVoice *This,
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio23SourceVoice *This,
+        const XAUDIO23_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio23SourceVoice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio23SourceVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio23SourceVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio23SourceVoice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio23SourceVoice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio23SourceVoice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio23SourceVoice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio23SourceVoice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio23SourceVoice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio23SourceVoice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio23SourceVoice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio23SourceVoice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio23SourceVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio23SourceVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio23SourceVoice *This);
+
+    /*** IXAudio23SourceVoice methods ***/
+    HRESULT (STDMETHODCALLTYPE *Start)(
+        IXAudio23SourceVoice *This,
+        UINT32 Flags,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IXAudio23SourceVoice *This,
+        UINT32 Flags,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *SubmitSourceBuffer)(
+        IXAudio23SourceVoice *This,
+        const XAUDIO2_BUFFER *pBuffer,
+        const XAUDIO2_BUFFER_WMA *pBufferWMA);
+
+    HRESULT (STDMETHODCALLTYPE *FlushSourceBuffers)(
+        IXAudio23SourceVoice *This);
+
+    HRESULT (STDMETHODCALLTYPE *Discontinuity)(
+        IXAudio23SourceVoice *This);
+
+    HRESULT (STDMETHODCALLTYPE *ExitLoop)(
+        IXAudio23SourceVoice *This,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetState)(
+        IXAudio23SourceVoice *This,
+        XAUDIO2_VOICE_STATE *pVoiceState);
+
+    HRESULT (STDMETHODCALLTYPE *SetFrequencyRatio)(
+        IXAudio23SourceVoice *This,
+        float Ratio,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFrequencyRatio)(
+        IXAudio23SourceVoice *This,
+        float *pRatio);
+
+    END_INTERFACE
+} IXAudio23SourceVoiceVtbl;
+
+interface IXAudio23SourceVoice {
+    CONST_VTBL IXAudio23SourceVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio23Voice methods ***/
+#define IXAudio23SourceVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio23SourceVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio23SourceVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio23SourceVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23SourceVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23SourceVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio23SourceVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio23SourceVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio23SourceVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio23SourceVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio23SourceVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio23SourceVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio23SourceVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio23SourceVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio23SourceVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio23SourceVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio23SourceVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+/*** IXAudio23SourceVoice methods ***/
+#define IXAudio23SourceVoice_Start(This,Flags,OperationSet) (This)->lpVtbl->Start(This,Flags,OperationSet)
+#define IXAudio23SourceVoice_Stop(This,Flags,OperationSet) (This)->lpVtbl->Stop(This,Flags,OperationSet)
+#define IXAudio23SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) (This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA)
+#define IXAudio23SourceVoice_FlushSourceBuffers(This) (This)->lpVtbl->FlushSourceBuffers(This)
+#define IXAudio23SourceVoice_Discontinuity(This) (This)->lpVtbl->Discontinuity(This)
+#define IXAudio23SourceVoice_ExitLoop(This,OperationSet) (This)->lpVtbl->ExitLoop(This,OperationSet)
+#define IXAudio23SourceVoice_GetState(This,pVoiceState) (This)->lpVtbl->GetState(This,pVoiceState)
+#define IXAudio23SourceVoice_SetFrequencyRatio(This,Ratio,OperationSet) (This)->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet)
+#define IXAudio23SourceVoice_GetFrequencyRatio(This,pRatio) (This)->lpVtbl->GetFrequencyRatio(This,pRatio)
+#else
+/*** IXAudio23Voice methods ***/
+static FORCEINLINE void IXAudio23SourceVoice_GetVoiceDetails(IXAudio23SourceVoice* This,XAUDIO27_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetOutputVoices(IXAudio23SourceVoice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetEffectChain(IXAudio23SourceVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_EnableEffect(IXAudio23SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_DisableEffect(IXAudio23SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetEffectState(IXAudio23SourceVoice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetEffectParameters(IXAudio23SourceVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_GetEffectParameters(IXAudio23SourceVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetFilterParameters(IXAudio23SourceVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetFilterParameters(IXAudio23SourceVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetVolume(IXAudio23SourceVoice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetVolume(IXAudio23SourceVoice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetChannelVolumes(IXAudio23SourceVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetChannelVolumes(IXAudio23SourceVoice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetOutputMatrix(IXAudio23SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetOutputMatrix(IXAudio23SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio23SourceVoice_DestroyVoice(IXAudio23SourceVoice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+/*** IXAudio23SourceVoice methods ***/
+static FORCEINLINE HRESULT IXAudio23SourceVoice_Start(IXAudio23SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+    return This->lpVtbl->Start(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_Stop(IXAudio23SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+    return This->lpVtbl->Stop(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SubmitSourceBuffer(IXAudio23SourceVoice* This,const XAUDIO2_BUFFER *pBuffer,const XAUDIO2_BUFFER_WMA *pBufferWMA) {
+    return This->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_FlushSourceBuffers(IXAudio23SourceVoice* This) {
+    return This->lpVtbl->FlushSourceBuffers(This);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_Discontinuity(IXAudio23SourceVoice* This) {
+    return This->lpVtbl->Discontinuity(This);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_ExitLoop(IXAudio23SourceVoice* This,UINT32 OperationSet) {
+    return This->lpVtbl->ExitLoop(This,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetState(IXAudio23SourceVoice* This,XAUDIO2_VOICE_STATE *pVoiceState) {
+    This->lpVtbl->GetState(This,pVoiceState);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetFrequencyRatio(IXAudio23SourceVoice* This,float Ratio,UINT32 OperationSet) {
+    return This->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetFrequencyRatio(IXAudio23SourceVoice* This,float *pRatio) {
+    This->lpVtbl->GetFrequencyRatio(This,pRatio);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio23SourceVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio27SourceVoice interface
+ */
+#ifndef __IXAudio27SourceVoice_INTERFACE_DEFINED__
+#define __IXAudio27SourceVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio27SourceVoice : public IXAudio27Voice
+{
+    virtual HRESULT STDMETHODCALLTYPE Start(
+        UINT32 Flags = 0,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stop(
+        UINT32 Flags = 0,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SubmitSourceBuffer(
+        const XAUDIO2_BUFFER *pBuffer,
+        const XAUDIO2_BUFFER_WMA *pBufferWMA = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FlushSourceBuffers(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Discontinuity(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ExitLoop(
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetState(
+        XAUDIO2_VOICE_STATE *pVoiceState) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFrequencyRatio(
+        float Ratio,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetFrequencyRatio(
+        float *pRatio) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSourceSampleRate(
+        UINT32 NewSourceSampleRate) = 0;
+
+};
+#else
+typedef struct IXAudio27SourceVoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio27Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio27SourceVoice *This,
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio27SourceVoice *This,
+        const XAUDIO2_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio27SourceVoice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio27SourceVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio27SourceVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio27SourceVoice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio27SourceVoice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio27SourceVoice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio27SourceVoice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio27SourceVoice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputFilterParameters)(
+        IXAudio27SourceVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputFilterParameters)(
+        IXAudio27SourceVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio27SourceVoice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio27SourceVoice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio27SourceVoice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio27SourceVoice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio27SourceVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio27SourceVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio27SourceVoice *This);
+
+    /*** IXAudio27SourceVoice methods ***/
+    HRESULT (STDMETHODCALLTYPE *Start)(
+        IXAudio27SourceVoice *This,
+        UINT32 Flags,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IXAudio27SourceVoice *This,
+        UINT32 Flags,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *SubmitSourceBuffer)(
+        IXAudio27SourceVoice *This,
+        const XAUDIO2_BUFFER *pBuffer,
+        const XAUDIO2_BUFFER_WMA *pBufferWMA);
+
+    HRESULT (STDMETHODCALLTYPE *FlushSourceBuffers)(
+        IXAudio27SourceVoice *This);
+
+    HRESULT (STDMETHODCALLTYPE *Discontinuity)(
+        IXAudio27SourceVoice *This);
+
+    HRESULT (STDMETHODCALLTYPE *ExitLoop)(
+        IXAudio27SourceVoice *This,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetState)(
+        IXAudio27SourceVoice *This,
+        XAUDIO2_VOICE_STATE *pVoiceState);
+
+    HRESULT (STDMETHODCALLTYPE *SetFrequencyRatio)(
+        IXAudio27SourceVoice *This,
+        float Ratio,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFrequencyRatio)(
+        IXAudio27SourceVoice *This,
+        float *pRatio);
+
+    HRESULT (STDMETHODCALLTYPE *SetSourceSampleRate)(
+        IXAudio27SourceVoice *This,
+        UINT32 NewSourceSampleRate);
+
+    END_INTERFACE
+} IXAudio27SourceVoiceVtbl;
+
+interface IXAudio27SourceVoice {
+    CONST_VTBL IXAudio27SourceVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio27Voice methods ***/
+#define IXAudio27SourceVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio27SourceVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio27SourceVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio27SourceVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio27SourceVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio27SourceVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio27SourceVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio27SourceVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio27SourceVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio27SourceVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio27SourceVoice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) (This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)
+#define IXAudio27SourceVoice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) (This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)
+#define IXAudio27SourceVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio27SourceVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio27SourceVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio27SourceVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio27SourceVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio27SourceVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio27SourceVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+/*** IXAudio27SourceVoice methods ***/
+#define IXAudio27SourceVoice_Start(This,Flags,OperationSet) (This)->lpVtbl->Start(This,Flags,OperationSet)
+#define IXAudio27SourceVoice_Stop(This,Flags,OperationSet) (This)->lpVtbl->Stop(This,Flags,OperationSet)
+#define IXAudio27SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) (This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA)
+#define IXAudio27SourceVoice_FlushSourceBuffers(This) (This)->lpVtbl->FlushSourceBuffers(This)
+#define IXAudio27SourceVoice_Discontinuity(This) (This)->lpVtbl->Discontinuity(This)
+#define IXAudio27SourceVoice_ExitLoop(This,OperationSet) (This)->lpVtbl->ExitLoop(This,OperationSet)
+#define IXAudio27SourceVoice_GetState(This,pVoiceState) (This)->lpVtbl->GetState(This,pVoiceState)
+#define IXAudio27SourceVoice_SetFrequencyRatio(This,Ratio,OperationSet) (This)->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet)
+#define IXAudio27SourceVoice_GetFrequencyRatio(This,pRatio) (This)->lpVtbl->GetFrequencyRatio(This,pRatio)
+#define IXAudio27SourceVoice_SetSourceSampleRate(This,NewSourceSampleRate) (This)->lpVtbl->SetSourceSampleRate(This,NewSourceSampleRate)
+#else
+/*** IXAudio27Voice methods ***/
+static FORCEINLINE void IXAudio27SourceVoice_GetVoiceDetails(IXAudio27SourceVoice* This,XAUDIO27_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetOutputVoices(IXAudio27SourceVoice* This,const XAUDIO2_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetEffectChain(IXAudio27SourceVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_EnableEffect(IXAudio27SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_DisableEffect(IXAudio27SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetEffectState(IXAudio27SourceVoice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetEffectParameters(IXAudio27SourceVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_GetEffectParameters(IXAudio27SourceVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetFilterParameters(IXAudio27SourceVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetFilterParameters(IXAudio27SourceVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetOutputFilterParameters(IXAudio27SourceVoice* This,IXAudio2Voice *pDestinationVoice,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetOutputFilterParameters(IXAudio27SourceVoice* This,IXAudio2Voice *pDestinationVoice,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetVolume(IXAudio27SourceVoice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetVolume(IXAudio27SourceVoice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetChannelVolumes(IXAudio27SourceVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetChannelVolumes(IXAudio27SourceVoice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetOutputMatrix(IXAudio27SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetOutputMatrix(IXAudio27SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio27SourceVoice_DestroyVoice(IXAudio27SourceVoice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+/*** IXAudio27SourceVoice methods ***/
+static FORCEINLINE HRESULT IXAudio27SourceVoice_Start(IXAudio27SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+    return This->lpVtbl->Start(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_Stop(IXAudio27SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+    return This->lpVtbl->Stop(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SubmitSourceBuffer(IXAudio27SourceVoice* This,const XAUDIO2_BUFFER *pBuffer,const XAUDIO2_BUFFER_WMA *pBufferWMA) {
+    return This->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_FlushSourceBuffers(IXAudio27SourceVoice* This) {
+    return This->lpVtbl->FlushSourceBuffers(This);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_Discontinuity(IXAudio27SourceVoice* This) {
+    return This->lpVtbl->Discontinuity(This);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_ExitLoop(IXAudio27SourceVoice* This,UINT32 OperationSet) {
+    return This->lpVtbl->ExitLoop(This,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetState(IXAudio27SourceVoice* This,XAUDIO2_VOICE_STATE *pVoiceState) {
+    This->lpVtbl->GetState(This,pVoiceState);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetFrequencyRatio(IXAudio27SourceVoice* This,float Ratio,UINT32 OperationSet) {
+    return This->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetFrequencyRatio(IXAudio27SourceVoice* This,float *pRatio) {
+    This->lpVtbl->GetFrequencyRatio(This,pRatio);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetSourceSampleRate(IXAudio27SourceVoice* This,UINT32 NewSourceSampleRate) {
+    return This->lpVtbl->SetSourceSampleRate(This,NewSourceSampleRate);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio27SourceVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio2SourceVoice interface
+ */
+#ifndef __IXAudio2SourceVoice_INTERFACE_DEFINED__
+#define __IXAudio2SourceVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio2SourceVoice : public IXAudio2Voice
+{
+    virtual HRESULT STDMETHODCALLTYPE Start(
+        UINT32 Flags = 0,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stop(
+        UINT32 Flags = 0,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SubmitSourceBuffer(
+        const XAUDIO2_BUFFER *pBuffer,
+        const XAUDIO2_BUFFER_WMA *pBufferWMA = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FlushSourceBuffers(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Discontinuity(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ExitLoop(
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetState(
+        XAUDIO2_VOICE_STATE *pVoiceState,
+        UINT32 Flags = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFrequencyRatio(
+        float Ratio,
+        UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+    virtual void STDMETHODCALLTYPE GetFrequencyRatio(
+        float *pRatio) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSourceSampleRate(
+        UINT32 NewSourceSampleRate) = 0;
+
+};
+#else
+typedef struct IXAudio2SourceVoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio2Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio2SourceVoice *This,
+        XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio2SourceVoice *This,
+        const XAUDIO2_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio2SourceVoice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio2SourceVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio2SourceVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio2SourceVoice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio2SourceVoice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio2SourceVoice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio2SourceVoice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio2SourceVoice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputFilterParameters)(
+        IXAudio2SourceVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputFilterParameters)(
+        IXAudio2SourceVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio2SourceVoice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio2SourceVoice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio2SourceVoice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio2SourceVoice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio2SourceVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio2SourceVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio2SourceVoice *This);
+
+    /*** IXAudio2SourceVoice methods ***/
+    HRESULT (STDMETHODCALLTYPE *Start)(
+        IXAudio2SourceVoice *This,
+        UINT32 Flags,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IXAudio2SourceVoice *This,
+        UINT32 Flags,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *SubmitSourceBuffer)(
+        IXAudio2SourceVoice *This,
+        const XAUDIO2_BUFFER *pBuffer,
+        const XAUDIO2_BUFFER_WMA *pBufferWMA);
+
+    HRESULT (STDMETHODCALLTYPE *FlushSourceBuffers)(
+        IXAudio2SourceVoice *This);
+
+    HRESULT (STDMETHODCALLTYPE *Discontinuity)(
+        IXAudio2SourceVoice *This);
+
+    HRESULT (STDMETHODCALLTYPE *ExitLoop)(
+        IXAudio2SourceVoice *This,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetState)(
+        IXAudio2SourceVoice *This,
+        XAUDIO2_VOICE_STATE *pVoiceState,
+        UINT32 Flags);
+
+    HRESULT (STDMETHODCALLTYPE *SetFrequencyRatio)(
+        IXAudio2SourceVoice *This,
+        float Ratio,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFrequencyRatio)(
+        IXAudio2SourceVoice *This,
+        float *pRatio);
+
+    HRESULT (STDMETHODCALLTYPE *SetSourceSampleRate)(
+        IXAudio2SourceVoice *This,
+        UINT32 NewSourceSampleRate);
+
+    END_INTERFACE
+} IXAudio2SourceVoiceVtbl;
+
+interface IXAudio2SourceVoice {
+    CONST_VTBL IXAudio2SourceVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio2Voice methods ***/
+#define IXAudio2SourceVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio2SourceVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio2SourceVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio2SourceVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2SourceVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2SourceVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio2SourceVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio2SourceVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio2SourceVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio2SourceVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio2SourceVoice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) (This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)
+#define IXAudio2SourceVoice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) (This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)
+#define IXAudio2SourceVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio2SourceVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio2SourceVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio2SourceVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio2SourceVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio2SourceVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio2SourceVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+/*** IXAudio2SourceVoice methods ***/
+#define IXAudio2SourceVoice_Start(This,Flags,OperationSet) (This)->lpVtbl->Start(This,Flags,OperationSet)
+#define IXAudio2SourceVoice_Stop(This,Flags,OperationSet) (This)->lpVtbl->Stop(This,Flags,OperationSet)
+#define IXAudio2SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) (This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA)
+#define IXAudio2SourceVoice_FlushSourceBuffers(This) (This)->lpVtbl->FlushSourceBuffers(This)
+#define IXAudio2SourceVoice_Discontinuity(This) (This)->lpVtbl->Discontinuity(This)
+#define IXAudio2SourceVoice_ExitLoop(This,OperationSet) (This)->lpVtbl->ExitLoop(This,OperationSet)
+#define IXAudio2SourceVoice_GetState(This,pVoiceState,Flags) (This)->lpVtbl->GetState(This,pVoiceState,Flags)
+#define IXAudio2SourceVoice_SetFrequencyRatio(This,Ratio,OperationSet) (This)->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet)
+#define IXAudio2SourceVoice_GetFrequencyRatio(This,pRatio) (This)->lpVtbl->GetFrequencyRatio(This,pRatio)
+#define IXAudio2SourceVoice_SetSourceSampleRate(This,NewSourceSampleRate) (This)->lpVtbl->SetSourceSampleRate(This,NewSourceSampleRate)
+#else
+/*** IXAudio2Voice methods ***/
+static FORCEINLINE void IXAudio2SourceVoice_GetVoiceDetails(IXAudio2SourceVoice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetOutputVoices(IXAudio2SourceVoice* This,const XAUDIO2_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetEffectChain(IXAudio2SourceVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_EnableEffect(IXAudio2SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_DisableEffect(IXAudio2SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetEffectState(IXAudio2SourceVoice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetEffectParameters(IXAudio2SourceVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_GetEffectParameters(IXAudio2SourceVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetFilterParameters(IXAudio2SourceVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetFilterParameters(IXAudio2SourceVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetOutputFilterParameters(IXAudio2SourceVoice* This,IXAudio2Voice *pDestinationVoice,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetOutputFilterParameters(IXAudio2SourceVoice* This,IXAudio2Voice *pDestinationVoice,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetVolume(IXAudio2SourceVoice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetVolume(IXAudio2SourceVoice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetChannelVolumes(IXAudio2SourceVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetChannelVolumes(IXAudio2SourceVoice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetOutputMatrix(IXAudio2SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetOutputMatrix(IXAudio2SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio2SourceVoice_DestroyVoice(IXAudio2SourceVoice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+/*** IXAudio2SourceVoice methods ***/
+static FORCEINLINE HRESULT IXAudio2SourceVoice_Start(IXAudio2SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+    return This->lpVtbl->Start(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_Stop(IXAudio2SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+    return This->lpVtbl->Stop(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SubmitSourceBuffer(IXAudio2SourceVoice* This,const XAUDIO2_BUFFER *pBuffer,const XAUDIO2_BUFFER_WMA *pBufferWMA) {
+    return This->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_FlushSourceBuffers(IXAudio2SourceVoice* This) {
+    return This->lpVtbl->FlushSourceBuffers(This);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_Discontinuity(IXAudio2SourceVoice* This) {
+    return This->lpVtbl->Discontinuity(This);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_ExitLoop(IXAudio2SourceVoice* This,UINT32 OperationSet) {
+    return This->lpVtbl->ExitLoop(This,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetState(IXAudio2SourceVoice* This,XAUDIO2_VOICE_STATE *pVoiceState,UINT32 Flags) {
+    This->lpVtbl->GetState(This,pVoiceState,Flags);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetFrequencyRatio(IXAudio2SourceVoice* This,float Ratio,UINT32 OperationSet) {
+    return This->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetFrequencyRatio(IXAudio2SourceVoice* This,float *pRatio) {
+    This->lpVtbl->GetFrequencyRatio(This,pRatio);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetSourceSampleRate(IXAudio2SourceVoice* This,UINT32 NewSourceSampleRate) {
+    return This->lpVtbl->SetSourceSampleRate(This,NewSourceSampleRate);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio2SourceVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio20SubmixVoice interface
+ */
+#ifndef __IXAudio20SubmixVoice_INTERFACE_DEFINED__
+#define __IXAudio20SubmixVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio20SubmixVoice : public IXAudio20Voice
+{
+};
+#else
+typedef struct IXAudio20SubmixVoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio20Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio20SubmixVoice *This,
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio20SubmixVoice *This,
+        const XAUDIO23_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio20SubmixVoice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio20SubmixVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio20SubmixVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio20SubmixVoice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio20SubmixVoice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio20SubmixVoice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio20SubmixVoice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio20SubmixVoice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio20SubmixVoice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio20SubmixVoice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio20SubmixVoice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio20SubmixVoice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio20SubmixVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio20SubmixVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio20SubmixVoice *This);
+
+    END_INTERFACE
+} IXAudio20SubmixVoiceVtbl;
+
+interface IXAudio20SubmixVoice {
+    CONST_VTBL IXAudio20SubmixVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio20Voice methods ***/
+#define IXAudio20SubmixVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio20SubmixVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio20SubmixVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio20SubmixVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20SubmixVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20SubmixVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio20SubmixVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio20SubmixVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio20SubmixVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio20SubmixVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio20SubmixVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio20SubmixVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio20SubmixVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio20SubmixVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio20SubmixVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio20SubmixVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio20SubmixVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio20Voice methods ***/
+static FORCEINLINE void IXAudio20SubmixVoice_GetVoiceDetails(IXAudio20SubmixVoice* This,XAUDIO27_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetOutputVoices(IXAudio20SubmixVoice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetEffectChain(IXAudio20SubmixVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_EnableEffect(IXAudio20SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_DisableEffect(IXAudio20SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio20SubmixVoice_GetEffectState(IXAudio20SubmixVoice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetEffectParameters(IXAudio20SubmixVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_GetEffectParameters(IXAudio20SubmixVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetFilterParameters(IXAudio20SubmixVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio20SubmixVoice_GetFilterParameters(IXAudio20SubmixVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetVolume(IXAudio20SubmixVoice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio20SubmixVoice_GetVolume(IXAudio20SubmixVoice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetChannelVolumes(IXAudio20SubmixVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio20SubmixVoice_GetChannelVolumes(IXAudio20SubmixVoice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetOutputMatrix(IXAudio20SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_GetOutputMatrix(IXAudio20SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    return This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio20SubmixVoice_DestroyVoice(IXAudio20SubmixVoice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio20SubmixVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio23SubmixVoice interface
+ */
+#ifndef __IXAudio23SubmixVoice_INTERFACE_DEFINED__
+#define __IXAudio23SubmixVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio23SubmixVoice : public IXAudio23Voice
+{
+};
+#else
+typedef struct IXAudio23SubmixVoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio23Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio23SubmixVoice *This,
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio23SubmixVoice *This,
+        const XAUDIO23_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio23SubmixVoice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio23SubmixVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio23SubmixVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio23SubmixVoice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio23SubmixVoice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio23SubmixVoice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio23SubmixVoice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio23SubmixVoice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio23SubmixVoice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio23SubmixVoice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio23SubmixVoice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio23SubmixVoice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio23SubmixVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio23SubmixVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio23SubmixVoice *This);
+
+    END_INTERFACE
+} IXAudio23SubmixVoiceVtbl;
+
+interface IXAudio23SubmixVoice {
+    CONST_VTBL IXAudio23SubmixVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio23Voice methods ***/
+#define IXAudio23SubmixVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio23SubmixVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio23SubmixVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio23SubmixVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23SubmixVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23SubmixVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio23SubmixVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio23SubmixVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio23SubmixVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio23SubmixVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio23SubmixVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio23SubmixVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio23SubmixVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio23SubmixVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio23SubmixVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio23SubmixVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio23SubmixVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio23Voice methods ***/
+static FORCEINLINE void IXAudio23SubmixVoice_GetVoiceDetails(IXAudio23SubmixVoice* This,XAUDIO27_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetOutputVoices(IXAudio23SubmixVoice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetEffectChain(IXAudio23SubmixVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_EnableEffect(IXAudio23SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_DisableEffect(IXAudio23SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio23SubmixVoice_GetEffectState(IXAudio23SubmixVoice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetEffectParameters(IXAudio23SubmixVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_GetEffectParameters(IXAudio23SubmixVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetFilterParameters(IXAudio23SubmixVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio23SubmixVoice_GetFilterParameters(IXAudio23SubmixVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetVolume(IXAudio23SubmixVoice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio23SubmixVoice_GetVolume(IXAudio23SubmixVoice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetChannelVolumes(IXAudio23SubmixVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio23SubmixVoice_GetChannelVolumes(IXAudio23SubmixVoice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetOutputMatrix(IXAudio23SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio23SubmixVoice_GetOutputMatrix(IXAudio23SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio23SubmixVoice_DestroyVoice(IXAudio23SubmixVoice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio23SubmixVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio27SubmixVoice interface
+ */
+#ifndef __IXAudio27SubmixVoice_INTERFACE_DEFINED__
+#define __IXAudio27SubmixVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio27SubmixVoice : public IXAudio27Voice
+{
+};
+#else
+typedef struct IXAudio27SubmixVoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio27Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio27SubmixVoice *This,
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio27SubmixVoice *This,
+        const XAUDIO2_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio27SubmixVoice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio27SubmixVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio27SubmixVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio27SubmixVoice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio27SubmixVoice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio27SubmixVoice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio27SubmixVoice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio27SubmixVoice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputFilterParameters)(
+        IXAudio27SubmixVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputFilterParameters)(
+        IXAudio27SubmixVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio27SubmixVoice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio27SubmixVoice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio27SubmixVoice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio27SubmixVoice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio27SubmixVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio27SubmixVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio27SubmixVoice *This);
+
+    END_INTERFACE
+} IXAudio27SubmixVoiceVtbl;
+
+interface IXAudio27SubmixVoice {
+    CONST_VTBL IXAudio27SubmixVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio27Voice methods ***/
+#define IXAudio27SubmixVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio27SubmixVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio27SubmixVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio27SubmixVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio27SubmixVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio27SubmixVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio27SubmixVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio27SubmixVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio27SubmixVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio27SubmixVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio27SubmixVoice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) (This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)
+#define IXAudio27SubmixVoice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) (This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)
+#define IXAudio27SubmixVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio27SubmixVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio27SubmixVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio27SubmixVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio27SubmixVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio27SubmixVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio27SubmixVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio27Voice methods ***/
+static FORCEINLINE void IXAudio27SubmixVoice_GetVoiceDetails(IXAudio27SubmixVoice* This,XAUDIO27_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio27SubmixVoice_SetOutputVoices(IXAudio27SubmixVoice* This,const XAUDIO2_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio27SubmixVoice_SetEffectChain(IXAudio27SubmixVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio27SubmixVoice_EnableEffect(IXAudio27SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27SubmixVoice_DisableEffect(IXAudio27SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio27SubmixVoice_GetEffectState(IXAudio27SubmixVoice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio27SubmixVoice_SetEffectParameters(IXAudio27SubmixVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27SubmixVoice_GetEffectParameters(IXAudio27SubmixVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio27SubmixVoice_SetFilterParameters(IXAudio27SubmixVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio27SubmixVoice_GetFilterParameters(IXAudio27SubmixVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio27SubmixVoice_SetOutputFilterParameters(IXAudio27SubmixVoice* This,IXAudio2Voice *pDestinationVoice,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio27SubmixVoice_GetOutputFilterParameters(IXAudio27SubmixVoice* This,IXAudio2Voice *pDestinationVoice,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio27SubmixVoice_SetVolume(IXAudio27SubmixVoice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio27SubmixVoice_GetVolume(IXAudio27SubmixVoice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio27SubmixVoice_SetChannelVolumes(IXAudio27SubmixVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio27SubmixVoice_GetChannelVolumes(IXAudio27SubmixVoice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio27SubmixVoice_SetOutputMatrix(IXAudio27SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio27SubmixVoice_GetOutputMatrix(IXAudio27SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio27SubmixVoice_DestroyVoice(IXAudio27SubmixVoice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio27SubmixVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio2SubmixVoice interface
+ */
+#ifndef __IXAudio2SubmixVoice_INTERFACE_DEFINED__
+#define __IXAudio2SubmixVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio2SubmixVoice : public IXAudio2Voice
+{
+};
+#else
+typedef struct IXAudio2SubmixVoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio2Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio2SubmixVoice *This,
+        XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio2SubmixVoice *This,
+        const XAUDIO2_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio2SubmixVoice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio2SubmixVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio2SubmixVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio2SubmixVoice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio2SubmixVoice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio2SubmixVoice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio2SubmixVoice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio2SubmixVoice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputFilterParameters)(
+        IXAudio2SubmixVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputFilterParameters)(
+        IXAudio2SubmixVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio2SubmixVoice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio2SubmixVoice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio2SubmixVoice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio2SubmixVoice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio2SubmixVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio2SubmixVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio2SubmixVoice *This);
+
+    END_INTERFACE
+} IXAudio2SubmixVoiceVtbl;
+
+interface IXAudio2SubmixVoice {
+    CONST_VTBL IXAudio2SubmixVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio2Voice methods ***/
+#define IXAudio2SubmixVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio2SubmixVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio2SubmixVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio2SubmixVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2SubmixVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2SubmixVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio2SubmixVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio2SubmixVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio2SubmixVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio2SubmixVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio2SubmixVoice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) (This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)
+#define IXAudio2SubmixVoice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) (This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)
+#define IXAudio2SubmixVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio2SubmixVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio2SubmixVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio2SubmixVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio2SubmixVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio2SubmixVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio2SubmixVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio2Voice methods ***/
+static FORCEINLINE void IXAudio2SubmixVoice_GetVoiceDetails(IXAudio2SubmixVoice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetOutputVoices(IXAudio2SubmixVoice* This,const XAUDIO2_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetEffectChain(IXAudio2SubmixVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_EnableEffect(IXAudio2SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_DisableEffect(IXAudio2SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_GetEffectState(IXAudio2SubmixVoice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetEffectParameters(IXAudio2SubmixVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_GetEffectParameters(IXAudio2SubmixVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetFilterParameters(IXAudio2SubmixVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_GetFilterParameters(IXAudio2SubmixVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetOutputFilterParameters(IXAudio2SubmixVoice* This,IXAudio2Voice *pDestinationVoice,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_GetOutputFilterParameters(IXAudio2SubmixVoice* This,IXAudio2Voice *pDestinationVoice,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetVolume(IXAudio2SubmixVoice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_GetVolume(IXAudio2SubmixVoice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetChannelVolumes(IXAudio2SubmixVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_GetChannelVolumes(IXAudio2SubmixVoice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetOutputMatrix(IXAudio2SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_GetOutputMatrix(IXAudio2SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_DestroyVoice(IXAudio2SubmixVoice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio2SubmixVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio20MasteringVoice interface
+ */
+#ifndef __IXAudio20MasteringVoice_INTERFACE_DEFINED__
+#define __IXAudio20MasteringVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio20MasteringVoice : public IXAudio20Voice
+{
+};
+#else
+typedef struct IXAudio20MasteringVoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio20Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio20MasteringVoice *This,
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio20MasteringVoice *This,
+        const XAUDIO23_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio20MasteringVoice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio20MasteringVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio20MasteringVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio20MasteringVoice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio20MasteringVoice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio20MasteringVoice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio20MasteringVoice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio20MasteringVoice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio20MasteringVoice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio20MasteringVoice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio20MasteringVoice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio20MasteringVoice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio20MasteringVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio20MasteringVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio20MasteringVoice *This);
+
+    END_INTERFACE
+} IXAudio20MasteringVoiceVtbl;
+
+interface IXAudio20MasteringVoice {
+    CONST_VTBL IXAudio20MasteringVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio20Voice methods ***/
+#define IXAudio20MasteringVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio20MasteringVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio20MasteringVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio20MasteringVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20MasteringVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20MasteringVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio20MasteringVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio20MasteringVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio20MasteringVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio20MasteringVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio20MasteringVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio20MasteringVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio20MasteringVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio20MasteringVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio20MasteringVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio20MasteringVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio20MasteringVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio20Voice methods ***/
+static FORCEINLINE void IXAudio20MasteringVoice_GetVoiceDetails(IXAudio20MasteringVoice* This,XAUDIO27_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetOutputVoices(IXAudio20MasteringVoice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetEffectChain(IXAudio20MasteringVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_EnableEffect(IXAudio20MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_DisableEffect(IXAudio20MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio20MasteringVoice_GetEffectState(IXAudio20MasteringVoice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetEffectParameters(IXAudio20MasteringVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_GetEffectParameters(IXAudio20MasteringVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetFilterParameters(IXAudio20MasteringVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio20MasteringVoice_GetFilterParameters(IXAudio20MasteringVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetVolume(IXAudio20MasteringVoice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio20MasteringVoice_GetVolume(IXAudio20MasteringVoice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetChannelVolumes(IXAudio20MasteringVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio20MasteringVoice_GetChannelVolumes(IXAudio20MasteringVoice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetOutputMatrix(IXAudio20MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_GetOutputMatrix(IXAudio20MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    return This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio20MasteringVoice_DestroyVoice(IXAudio20MasteringVoice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio20MasteringVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio23MasteringVoice interface
+ */
+#ifndef __IXAudio23MasteringVoice_INTERFACE_DEFINED__
+#define __IXAudio23MasteringVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio23MasteringVoice : public IXAudio23Voice
+{
+};
+#else
+typedef struct IXAudio23MasteringVoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio23Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio23MasteringVoice *This,
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio23MasteringVoice *This,
+        const XAUDIO23_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio23MasteringVoice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio23MasteringVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio23MasteringVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio23MasteringVoice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio23MasteringVoice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio23MasteringVoice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio23MasteringVoice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio23MasteringVoice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio23MasteringVoice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio23MasteringVoice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio23MasteringVoice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio23MasteringVoice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio23MasteringVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio23MasteringVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio23MasteringVoice *This);
+
+    END_INTERFACE
+} IXAudio23MasteringVoiceVtbl;
+
+interface IXAudio23MasteringVoice {
+    CONST_VTBL IXAudio23MasteringVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio23Voice methods ***/
+#define IXAudio23MasteringVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio23MasteringVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio23MasteringVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio23MasteringVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23MasteringVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23MasteringVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio23MasteringVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio23MasteringVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio23MasteringVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio23MasteringVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio23MasteringVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio23MasteringVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio23MasteringVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio23MasteringVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio23MasteringVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio23MasteringVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio23MasteringVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio23Voice methods ***/
+static FORCEINLINE void IXAudio23MasteringVoice_GetVoiceDetails(IXAudio23MasteringVoice* This,XAUDIO27_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetOutputVoices(IXAudio23MasteringVoice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetEffectChain(IXAudio23MasteringVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_EnableEffect(IXAudio23MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_DisableEffect(IXAudio23MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio23MasteringVoice_GetEffectState(IXAudio23MasteringVoice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetEffectParameters(IXAudio23MasteringVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_GetEffectParameters(IXAudio23MasteringVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetFilterParameters(IXAudio23MasteringVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio23MasteringVoice_GetFilterParameters(IXAudio23MasteringVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetVolume(IXAudio23MasteringVoice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio23MasteringVoice_GetVolume(IXAudio23MasteringVoice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetChannelVolumes(IXAudio23MasteringVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio23MasteringVoice_GetChannelVolumes(IXAudio23MasteringVoice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetOutputMatrix(IXAudio23MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio23MasteringVoice_GetOutputMatrix(IXAudio23MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio23MasteringVoice_DestroyVoice(IXAudio23MasteringVoice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio23MasteringVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio27MasteringVoice interface
+ */
+#ifndef __IXAudio27MasteringVoice_INTERFACE_DEFINED__
+#define __IXAudio27MasteringVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio27MasteringVoice : public IXAudio27Voice
+{
+};
+#else
+typedef struct IXAudio27MasteringVoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio27Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio27MasteringVoice *This,
+        XAUDIO27_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio27MasteringVoice *This,
+        const XAUDIO2_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio27MasteringVoice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio27MasteringVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio27MasteringVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio27MasteringVoice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio27MasteringVoice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio27MasteringVoice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio27MasteringVoice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio27MasteringVoice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputFilterParameters)(
+        IXAudio27MasteringVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputFilterParameters)(
+        IXAudio27MasteringVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio27MasteringVoice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio27MasteringVoice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio27MasteringVoice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio27MasteringVoice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio27MasteringVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio27MasteringVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio27MasteringVoice *This);
+
+    END_INTERFACE
+} IXAudio27MasteringVoiceVtbl;
+
+interface IXAudio27MasteringVoice {
+    CONST_VTBL IXAudio27MasteringVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio27Voice methods ***/
+#define IXAudio27MasteringVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio27MasteringVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio27MasteringVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio27MasteringVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio27MasteringVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio27MasteringVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio27MasteringVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio27MasteringVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio27MasteringVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio27MasteringVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio27MasteringVoice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) (This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)
+#define IXAudio27MasteringVoice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) (This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)
+#define IXAudio27MasteringVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio27MasteringVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio27MasteringVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio27MasteringVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio27MasteringVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio27MasteringVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio27MasteringVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio27Voice methods ***/
+static FORCEINLINE void IXAudio27MasteringVoice_GetVoiceDetails(IXAudio27MasteringVoice* This,XAUDIO27_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio27MasteringVoice_SetOutputVoices(IXAudio27MasteringVoice* This,const XAUDIO2_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio27MasteringVoice_SetEffectChain(IXAudio27MasteringVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio27MasteringVoice_EnableEffect(IXAudio27MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27MasteringVoice_DisableEffect(IXAudio27MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio27MasteringVoice_GetEffectState(IXAudio27MasteringVoice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio27MasteringVoice_SetEffectParameters(IXAudio27MasteringVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27MasteringVoice_GetEffectParameters(IXAudio27MasteringVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio27MasteringVoice_SetFilterParameters(IXAudio27MasteringVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio27MasteringVoice_GetFilterParameters(IXAudio27MasteringVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio27MasteringVoice_SetOutputFilterParameters(IXAudio27MasteringVoice* This,IXAudio2Voice *pDestinationVoice,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio27MasteringVoice_GetOutputFilterParameters(IXAudio27MasteringVoice* This,IXAudio2Voice *pDestinationVoice,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio27MasteringVoice_SetVolume(IXAudio27MasteringVoice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio27MasteringVoice_GetVolume(IXAudio27MasteringVoice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio27MasteringVoice_SetChannelVolumes(IXAudio27MasteringVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio27MasteringVoice_GetChannelVolumes(IXAudio27MasteringVoice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio27MasteringVoice_SetOutputMatrix(IXAudio27MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio27MasteringVoice_GetOutputMatrix(IXAudio27MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio27MasteringVoice_DestroyVoice(IXAudio27MasteringVoice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio27MasteringVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio2MasteringVoice interface
+ */
+#ifndef __IXAudio2MasteringVoice_INTERFACE_DEFINED__
+#define __IXAudio2MasteringVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio2MasteringVoice : public IXAudio2Voice
+{
+    virtual void STDMETHODCALLTYPE GetChannelMask(
+        DWORD *pChannelMask) = 0;
+
+};
+#else
+typedef struct IXAudio2MasteringVoiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio2Voice methods ***/
+    void (STDMETHODCALLTYPE *GetVoiceDetails)(
+        IXAudio2MasteringVoice *This,
+        XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+        IXAudio2MasteringVoice *This,
+        const XAUDIO2_VOICE_SENDS *pSendList);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+        IXAudio2MasteringVoice *This,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+        IXAudio2MasteringVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+        IXAudio2MasteringVoice *This,
+        UINT32 EffectIndex,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetEffectState)(
+        IXAudio2MasteringVoice *This,
+        UINT32 EffectIndex,
+        WINBOOL *pEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+        IXAudio2MasteringVoice *This,
+        UINT32 EffectIndex,
+        const void *pParameters,
+        UINT32 ParametersByteSize,
+        UINT32 OperationSet);
+
+    HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+        IXAudio2MasteringVoice *This,
+        UINT32 EffectIndex,
+        void *pParameters,
+        UINT32 ParametersByteSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+        IXAudio2MasteringVoice *This,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetFilterParameters)(
+        IXAudio2MasteringVoice *This,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputFilterParameters)(
+        IXAudio2MasteringVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        const XAUDIO2_FILTER_PARAMETERS *pParameters,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputFilterParameters)(
+        IXAudio2MasteringVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        IXAudio2MasteringVoice *This,
+        float Volume,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetVolume)(
+        IXAudio2MasteringVoice *This,
+        float *pVolume);
+
+    HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+        IXAudio2MasteringVoice *This,
+        UINT32 Channels,
+        const float *pVolumes,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetChannelVolumes)(
+        IXAudio2MasteringVoice *This,
+        UINT32 Channels,
+        float *pVolumes);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+        IXAudio2MasteringVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        const float *pLevelMatrix,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetOutputMatrix)(
+        IXAudio2MasteringVoice *This,
+        IXAudio2Voice *pDestinationVoice,
+        UINT32 SourceChannels,
+        UINT32 DestinationChannels,
+        float *pLevelMatrix);
+
+    void (STDMETHODCALLTYPE *DestroyVoice)(
+        IXAudio2MasteringVoice *This);
+
+    /*** IXAudio2MasteringVoice methods ***/
+    void (STDMETHODCALLTYPE *GetChannelMask)(
+        IXAudio2MasteringVoice *This,
+        DWORD *pChannelMask);
+
+    END_INTERFACE
+} IXAudio2MasteringVoiceVtbl;
+
+interface IXAudio2MasteringVoice {
+    CONST_VTBL IXAudio2MasteringVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio2Voice methods ***/
+#define IXAudio2MasteringVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio2MasteringVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio2MasteringVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio2MasteringVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2MasteringVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2MasteringVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio2MasteringVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio2MasteringVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio2MasteringVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio2MasteringVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio2MasteringVoice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) (This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)
+#define IXAudio2MasteringVoice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) (This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)
+#define IXAudio2MasteringVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio2MasteringVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio2MasteringVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio2MasteringVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio2MasteringVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio2MasteringVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio2MasteringVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+/*** IXAudio2MasteringVoice methods ***/
+#define IXAudio2MasteringVoice_GetChannelMask(This,pChannelMask) (This)->lpVtbl->GetChannelMask(This,pChannelMask)
+#else
+/*** IXAudio2Voice methods ***/
+static FORCEINLINE void IXAudio2MasteringVoice_GetVoiceDetails(IXAudio2MasteringVoice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+    This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetOutputVoices(IXAudio2MasteringVoice* This,const XAUDIO2_VOICE_SENDS *pSendList) {
+    return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetEffectChain(IXAudio2MasteringVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_EnableEffect(IXAudio2MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_DisableEffect(IXAudio2MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+    return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_GetEffectState(IXAudio2MasteringVoice* This,UINT32 EffectIndex,WINBOOL *pEnabled) {
+    This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetEffectParameters(IXAudio2MasteringVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+    return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_GetEffectParameters(IXAudio2MasteringVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+    return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetFilterParameters(IXAudio2MasteringVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_GetFilterParameters(IXAudio2MasteringVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetOutputFilterParameters(IXAudio2MasteringVoice* This,IXAudio2Voice *pDestinationVoice,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_GetOutputFilterParameters(IXAudio2MasteringVoice* This,IXAudio2Voice *pDestinationVoice,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+    This->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetVolume(IXAudio2MasteringVoice* This,float Volume,UINT32 OperationSet) {
+    return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_GetVolume(IXAudio2MasteringVoice* This,float *pVolume) {
+    This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetChannelVolumes(IXAudio2MasteringVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+    return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_GetChannelVolumes(IXAudio2MasteringVoice* This,UINT32 Channels,float *pVolumes) {
+    This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetOutputMatrix(IXAudio2MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+    return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_GetOutputMatrix(IXAudio2MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+    This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_DestroyVoice(IXAudio2MasteringVoice* This) {
+    This->lpVtbl->DestroyVoice(This);
+}
+/*** IXAudio2MasteringVoice methods ***/
+static FORCEINLINE void IXAudio2MasteringVoice_GetChannelMask(IXAudio2MasteringVoice* This,DWORD *pChannelMask) {
+    This->lpVtbl->GetChannelMask(This,pChannelMask);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio2MasteringVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio20VoiceCallback interface
+ */
+#ifndef __IXAudio20VoiceCallback_INTERFACE_DEFINED__
+#define __IXAudio20VoiceCallback_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio20VoiceCallback
+{
+
+    BEGIN_INTERFACE
+
+    virtual void STDMETHODCALLTYPE OnVoiceProcessingPassStart(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE OnVoiceProcessingPassEnd(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE OnStreamEnd(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE OnBufferStart(
+        void *pBufferContext) = 0;
+
+    virtual void STDMETHODCALLTYPE OnBufferEnd(
+        void *pBufferContext) = 0;
+
+    virtual void STDMETHODCALLTYPE OnLoopEnd(
+        void *pBufferContext) = 0;
+
+    virtual void STDMETHODCALLTYPE OnVoiceError(
+        void *pBuffercontext,
+        HRESULT Error) = 0;
+
+    END_INTERFACE
+
+};
+#else
+typedef struct IXAudio20VoiceCallbackVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio20VoiceCallback methods ***/
+    void (STDMETHODCALLTYPE *OnVoiceProcessingPassStart)(
+        IXAudio20VoiceCallback *This);
+
+    void (STDMETHODCALLTYPE *OnVoiceProcessingPassEnd)(
+        IXAudio20VoiceCallback *This);
+
+    void (STDMETHODCALLTYPE *OnStreamEnd)(
+        IXAudio20VoiceCallback *This);
+
+    void (STDMETHODCALLTYPE *OnBufferStart)(
+        IXAudio20VoiceCallback *This,
+        void *pBufferContext);
+
+    void (STDMETHODCALLTYPE *OnBufferEnd)(
+        IXAudio20VoiceCallback *This,
+        void *pBufferContext);
+
+    void (STDMETHODCALLTYPE *OnLoopEnd)(
+        IXAudio20VoiceCallback *This,
+        void *pBufferContext);
+
+    void (STDMETHODCALLTYPE *OnVoiceError)(
+        IXAudio20VoiceCallback *This,
+        void *pBuffercontext,
+        HRESULT Error);
+
+    END_INTERFACE
+} IXAudio20VoiceCallbackVtbl;
+
+interface IXAudio20VoiceCallback {
+    CONST_VTBL IXAudio20VoiceCallbackVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio20VoiceCallback methods ***/
+#define IXAudio20VoiceCallback_OnVoiceProcessingPassStart(This) (This)->lpVtbl->OnVoiceProcessingPassStart(This)
+#define IXAudio20VoiceCallback_OnVoiceProcessingPassEnd(This) (This)->lpVtbl->OnVoiceProcessingPassEnd(This)
+#define IXAudio20VoiceCallback_OnStreamEnd(This) (This)->lpVtbl->OnStreamEnd(This)
+#define IXAudio20VoiceCallback_OnBufferStart(This,pBufferContext) (This)->lpVtbl->OnBufferStart(This,pBufferContext)
+#define IXAudio20VoiceCallback_OnBufferEnd(This,pBufferContext) (This)->lpVtbl->OnBufferEnd(This,pBufferContext)
+#define IXAudio20VoiceCallback_OnLoopEnd(This,pBufferContext) (This)->lpVtbl->OnLoopEnd(This,pBufferContext)
+#define IXAudio20VoiceCallback_OnVoiceError(This,pBuffercontext,Error) (This)->lpVtbl->OnVoiceError(This,pBuffercontext,Error)
+#else
+/*** IXAudio20VoiceCallback methods ***/
+static FORCEINLINE void IXAudio20VoiceCallback_OnVoiceProcessingPassStart(IXAudio20VoiceCallback* This) {
+    This->lpVtbl->OnVoiceProcessingPassStart(This);
+}
+static FORCEINLINE void IXAudio20VoiceCallback_OnVoiceProcessingPassEnd(IXAudio20VoiceCallback* This) {
+    This->lpVtbl->OnVoiceProcessingPassEnd(This);
+}
+static FORCEINLINE void IXAudio20VoiceCallback_OnStreamEnd(IXAudio20VoiceCallback* This) {
+    This->lpVtbl->OnStreamEnd(This);
+}
+static FORCEINLINE void IXAudio20VoiceCallback_OnBufferStart(IXAudio20VoiceCallback* This,void *pBufferContext) {
+    This->lpVtbl->OnBufferStart(This,pBufferContext);
+}
+static FORCEINLINE void IXAudio20VoiceCallback_OnBufferEnd(IXAudio20VoiceCallback* This,void *pBufferContext) {
+    This->lpVtbl->OnBufferEnd(This,pBufferContext);
+}
+static FORCEINLINE void IXAudio20VoiceCallback_OnLoopEnd(IXAudio20VoiceCallback* This,void *pBufferContext) {
+    This->lpVtbl->OnLoopEnd(This,pBufferContext);
+}
+static FORCEINLINE void IXAudio20VoiceCallback_OnVoiceError(IXAudio20VoiceCallback* This,void *pBuffercontext,HRESULT Error) {
+    This->lpVtbl->OnVoiceError(This,pBuffercontext,Error);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio20VoiceCallback_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio2VoiceCallback interface
+ */
+#ifndef __IXAudio2VoiceCallback_INTERFACE_DEFINED__
+#define __IXAudio2VoiceCallback_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio2VoiceCallback
+{
+
+    BEGIN_INTERFACE
+
+    virtual void STDMETHODCALLTYPE OnVoiceProcessingPassStart(
+        UINT32 BytesRequired) = 0;
+
+    virtual void STDMETHODCALLTYPE OnVoiceProcessingPassEnd(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE OnStreamEnd(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE OnBufferStart(
+        void *pBufferContext) = 0;
+
+    virtual void STDMETHODCALLTYPE OnBufferEnd(
+        void *pBufferContext) = 0;
+
+    virtual void STDMETHODCALLTYPE OnLoopEnd(
+        void *pBufferContext) = 0;
+
+    virtual void STDMETHODCALLTYPE OnVoiceError(
+        void *pBuffercontext,
+        HRESULT Error) = 0;
+
+    END_INTERFACE
+
+};
+#else
+typedef struct IXAudio2VoiceCallbackVtbl {
+    BEGIN_INTERFACE
+
+    /*** IXAudio2VoiceCallback methods ***/
+    void (STDMETHODCALLTYPE *OnVoiceProcessingPassStart)(
+        IXAudio2VoiceCallback *This,
+        UINT32 BytesRequired);
+
+    void (STDMETHODCALLTYPE *OnVoiceProcessingPassEnd)(
+        IXAudio2VoiceCallback *This);
+
+    void (STDMETHODCALLTYPE *OnStreamEnd)(
+        IXAudio2VoiceCallback *This);
+
+    void (STDMETHODCALLTYPE *OnBufferStart)(
+        IXAudio2VoiceCallback *This,
+        void *pBufferContext);
+
+    void (STDMETHODCALLTYPE *OnBufferEnd)(
+        IXAudio2VoiceCallback *This,
+        void *pBufferContext);
+
+    void (STDMETHODCALLTYPE *OnLoopEnd)(
+        IXAudio2VoiceCallback *This,
+        void *pBufferContext);
+
+    void (STDMETHODCALLTYPE *OnVoiceError)(
+        IXAudio2VoiceCallback *This,
+        void *pBuffercontext,
+        HRESULT Error);
+
+    END_INTERFACE
+} IXAudio2VoiceCallbackVtbl;
+
+interface IXAudio2VoiceCallback {
+    CONST_VTBL IXAudio2VoiceCallbackVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio2VoiceCallback methods ***/
+#define IXAudio2VoiceCallback_OnVoiceProcessingPassStart(This,BytesRequired) (This)->lpVtbl->OnVoiceProcessingPassStart(This,BytesRequired)
+#define IXAudio2VoiceCallback_OnVoiceProcessingPassEnd(This) (This)->lpVtbl->OnVoiceProcessingPassEnd(This)
+#define IXAudio2VoiceCallback_OnStreamEnd(This) (This)->lpVtbl->OnStreamEnd(This)
+#define IXAudio2VoiceCallback_OnBufferStart(This,pBufferContext) (This)->lpVtbl->OnBufferStart(This,pBufferContext)
+#define IXAudio2VoiceCallback_OnBufferEnd(This,pBufferContext) (This)->lpVtbl->OnBufferEnd(This,pBufferContext)
+#define IXAudio2VoiceCallback_OnLoopEnd(This,pBufferContext) (This)->lpVtbl->OnLoopEnd(This,pBufferContext)
+#define IXAudio2VoiceCallback_OnVoiceError(This,pBuffercontext,Error) (This)->lpVtbl->OnVoiceError(This,pBuffercontext,Error)
+#else
+/*** IXAudio2VoiceCallback methods ***/
+static FORCEINLINE void IXAudio2VoiceCallback_OnVoiceProcessingPassStart(IXAudio2VoiceCallback* This,UINT32 BytesRequired) {
+    This->lpVtbl->OnVoiceProcessingPassStart(This,BytesRequired);
+}
+static FORCEINLINE void IXAudio2VoiceCallback_OnVoiceProcessingPassEnd(IXAudio2VoiceCallback* This) {
+    This->lpVtbl->OnVoiceProcessingPassEnd(This);
+}
+static FORCEINLINE void IXAudio2VoiceCallback_OnStreamEnd(IXAudio2VoiceCallback* This) {
+    This->lpVtbl->OnStreamEnd(This);
+}
+static FORCEINLINE void IXAudio2VoiceCallback_OnBufferStart(IXAudio2VoiceCallback* This,void *pBufferContext) {
+    This->lpVtbl->OnBufferStart(This,pBufferContext);
+}
+static FORCEINLINE void IXAudio2VoiceCallback_OnBufferEnd(IXAudio2VoiceCallback* This,void *pBufferContext) {
+    This->lpVtbl->OnBufferEnd(This,pBufferContext);
+}
+static FORCEINLINE void IXAudio2VoiceCallback_OnLoopEnd(IXAudio2VoiceCallback* This,void *pBufferContext) {
+    This->lpVtbl->OnLoopEnd(This,pBufferContext);
+}
+static FORCEINLINE void IXAudio2VoiceCallback_OnVoiceError(IXAudio2VoiceCallback* This,void *pBuffercontext,HRESULT Error) {
+    This->lpVtbl->OnVoiceError(This,pBuffercontext,Error);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio2VoiceCallback_INTERFACE_DEFINED__ */
+
+typedef struct XAUDIO2_DEBUG_CONFIGURATION {
+    UINT32 TraceMask;
+    UINT32 BreakMask;
+    WINBOOL LogThreadID;
+    WINBOOL LogFileline;
+    WINBOOL LogFunctionName;
+    WINBOOL LogTiming;
+} XAUDIO2_DEBUG_CONFIGURATION;
+/*****************************************************************************
+ * IXAudio20 interface
+ */
+#ifndef __IXAudio20_INTERFACE_DEFINED__
+#define __IXAudio20_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXAudio20, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb")
+IXAudio20 : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceCount(
+        UINT32 *pCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceDetails(
+        UINT32 Index,
+        XAUDIO2_DEVICE_DETAILS *pDeviceDetails) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Initialize(
+        UINT32 Flags = 0,
+        XAUDIO2_PROCESSOR XAudio2Processor = XAUDIO2_DEFAULT_PROCESSOR) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterForCallbacks(
+        IXAudio2EngineCallback *pCallback) = 0;
+
+    virtual void STDMETHODCALLTYPE UnregisterForCallbacks(
+        IXAudio2EngineCallback *pCallback) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSourceVoice(
+        IXAudio2SourceVoice **ppSourceVoice,
+        const WAVEFORMATEX *pSourceFormat,
+        UINT32 Flags = 0,
+        float MaxFrequencyRatio = XAUDIO2_DEFAULT_FREQ_RATIO,
+        IXAudio2VoiceCallback *pCallback = 0,
+        const XAUDIO23_VOICE_SENDS *pSendList = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSubmixVoice(
+        IXAudio2SubmixVoice **ppSubmixVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags = 0,
+        UINT32 ProcessingStage = 0,
+        const XAUDIO23_VOICE_SENDS *pSendList = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateMasteringVoice(
+        IXAudio2MasteringVoice **ppMasteringVoice,
+        UINT32 InputChannels = XAUDIO2_DEFAULT_CHANNELS,
+        UINT32 InputSampleRate = XAUDIO2_DEFAULT_SAMPLERATE,
+        UINT32 Flags = 0,
+        UINT32 DeviceIndex = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StartEngine(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE StopEngine(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CommitChanges(
+        UINT32 OperationSet) = 0;
+
+    virtual void STDMETHODCALLTYPE GetPerformanceData(
+        XAUDIO20_PERFORMANCE_DATA *pPerfData) = 0;
+
+    virtual void STDMETHODCALLTYPE SetDebugConfiguration(
+        const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+        void *pReserved = 0) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IXAudio20, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb)
+#endif
+#else
+typedef struct IXAudio20Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXAudio20 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXAudio20 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXAudio20 *This);
+
+    /*** IXAudio20 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDeviceCount)(
+        IXAudio20 *This,
+        UINT32 *pCount);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeviceDetails)(
+        IXAudio20 *This,
+        UINT32 Index,
+        XAUDIO2_DEVICE_DETAILS *pDeviceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *Initialize)(
+        IXAudio20 *This,
+        UINT32 Flags,
+        XAUDIO2_PROCESSOR XAudio2Processor);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterForCallbacks)(
+        IXAudio20 *This,
+        IXAudio2EngineCallback *pCallback);
+
+    void (STDMETHODCALLTYPE *UnregisterForCallbacks)(
+        IXAudio20 *This,
+        IXAudio2EngineCallback *pCallback);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSourceVoice)(
+        IXAudio20 *This,
+        IXAudio2SourceVoice **ppSourceVoice,
+        const WAVEFORMATEX *pSourceFormat,
+        UINT32 Flags,
+        float MaxFrequencyRatio,
+        IXAudio2VoiceCallback *pCallback,
+        const XAUDIO23_VOICE_SENDS *pSendList,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSubmixVoice)(
+        IXAudio20 *This,
+        IXAudio2SubmixVoice **ppSubmixVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags,
+        UINT32 ProcessingStage,
+        const XAUDIO23_VOICE_SENDS *pSendList,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *CreateMasteringVoice)(
+        IXAudio20 *This,
+        IXAudio2MasteringVoice **ppMasteringVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags,
+        UINT32 DeviceIndex,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *StartEngine)(
+        IXAudio20 *This);
+
+    void (STDMETHODCALLTYPE *StopEngine)(
+        IXAudio20 *This);
+
+    HRESULT (STDMETHODCALLTYPE *CommitChanges)(
+        IXAudio20 *This,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetPerformanceData)(
+        IXAudio20 *This,
+        XAUDIO20_PERFORMANCE_DATA *pPerfData);
+
+    void (STDMETHODCALLTYPE *SetDebugConfiguration)(
+        IXAudio20 *This,
+        const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+        void *pReserved);
+
+    END_INTERFACE
+} IXAudio20Vtbl;
+
+interface IXAudio20 {
+    CONST_VTBL IXAudio20Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IXAudio20_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXAudio20_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXAudio20_Release(This) (This)->lpVtbl->Release(This)
+/*** IXAudio20 methods ***/
+#define IXAudio20_GetDeviceCount(This,pCount) (This)->lpVtbl->GetDeviceCount(This,pCount)
+#define IXAudio20_GetDeviceDetails(This,Index,pDeviceDetails) (This)->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails)
+#define IXAudio20_Initialize(This,Flags,XAudio2Processor) (This)->lpVtbl->Initialize(This,Flags,XAudio2Processor)
+#define IXAudio20_RegisterForCallbacks(This,pCallback) (This)->lpVtbl->RegisterForCallbacks(This,pCallback)
+#define IXAudio20_UnregisterForCallbacks(This,pCallback) (This)->lpVtbl->UnregisterForCallbacks(This,pCallback)
+#define IXAudio20_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) (This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)
+#define IXAudio20_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) (This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain)
+#define IXAudio20_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain) (This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain)
+#define IXAudio20_StartEngine(This) (This)->lpVtbl->StartEngine(This)
+#define IXAudio20_StopEngine(This) (This)->lpVtbl->StopEngine(This)
+#define IXAudio20_CommitChanges(This,OperationSet) (This)->lpVtbl->CommitChanges(This,OperationSet)
+#define IXAudio20_GetPerformanceData(This,pPerfData) (This)->lpVtbl->GetPerformanceData(This,pPerfData)
+#define IXAudio20_SetDebugConfiguration(This,pDebugConfiguration,pReserved) (This)->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IXAudio20_QueryInterface(IXAudio20* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IXAudio20_AddRef(IXAudio20* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IXAudio20_Release(IXAudio20* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IXAudio20 methods ***/
+static FORCEINLINE HRESULT IXAudio20_GetDeviceCount(IXAudio20* This,UINT32 *pCount) {
+    return This->lpVtbl->GetDeviceCount(This,pCount);
+}
+static FORCEINLINE HRESULT IXAudio20_GetDeviceDetails(IXAudio20* This,UINT32 Index,XAUDIO2_DEVICE_DETAILS *pDeviceDetails) {
+    return This->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails);
+}
+static FORCEINLINE HRESULT IXAudio20_Initialize(IXAudio20* This,UINT32 Flags,XAUDIO2_PROCESSOR XAudio2Processor) {
+    return This->lpVtbl->Initialize(This,Flags,XAudio2Processor);
+}
+static FORCEINLINE HRESULT IXAudio20_RegisterForCallbacks(IXAudio20* This,IXAudio2EngineCallback *pCallback) {
+    return This->lpVtbl->RegisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE void IXAudio20_UnregisterForCallbacks(IXAudio20* This,IXAudio2EngineCallback *pCallback) {
+    This->lpVtbl->UnregisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE HRESULT IXAudio20_CreateSourceVoice(IXAudio20* This,IXAudio2SourceVoice **ppSourceVoice,const WAVEFORMATEX *pSourceFormat,UINT32 Flags,float MaxFrequencyRatio,IXAudio2VoiceCallback *pCallback,const XAUDIO23_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20_CreateSubmixVoice(IXAudio20* This,IXAudio2SubmixVoice **ppSubmixVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 ProcessingStage,const XAUDIO23_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20_CreateMasteringVoice(IXAudio20* This,IXAudio2MasteringVoice **ppMasteringVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 DeviceIndex,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20_StartEngine(IXAudio20* This) {
+    return This->lpVtbl->StartEngine(This);
+}
+static FORCEINLINE void IXAudio20_StopEngine(IXAudio20* This) {
+    This->lpVtbl->StopEngine(This);
+}
+static FORCEINLINE HRESULT IXAudio20_CommitChanges(IXAudio20* This,UINT32 OperationSet) {
+    return This->lpVtbl->CommitChanges(This,OperationSet);
+}
+static FORCEINLINE void IXAudio20_GetPerformanceData(IXAudio20* This,XAUDIO20_PERFORMANCE_DATA *pPerfData) {
+    This->lpVtbl->GetPerformanceData(This,pPerfData);
+}
+static FORCEINLINE void IXAudio20_SetDebugConfiguration(IXAudio20* This,const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,void *pReserved) {
+    This->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio20_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio22 interface
+ */
+#ifndef __IXAudio22_INTERFACE_DEFINED__
+#define __IXAudio22_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXAudio22, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb")
+IXAudio22 : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceCount(
+        UINT32 *pCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceDetails(
+        UINT32 Index,
+        XAUDIO2_DEVICE_DETAILS *pDeviceDetails) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Initialize(
+        UINT32 Flags = 0,
+        XAUDIO2_PROCESSOR XAudio2Processor = XAUDIO2_DEFAULT_PROCESSOR) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterForCallbacks(
+        IXAudio2EngineCallback *pCallback) = 0;
+
+    virtual void STDMETHODCALLTYPE UnregisterForCallbacks(
+        IXAudio2EngineCallback *pCallback) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSourceVoice(
+        IXAudio2SourceVoice **ppSourceVoice,
+        const WAVEFORMATEX *pSourceFormat,
+        UINT32 Flags = 0,
+        float MaxFrequencyRatio = XAUDIO2_DEFAULT_FREQ_RATIO,
+        IXAudio2VoiceCallback *pCallback = 0,
+        const XAUDIO23_VOICE_SENDS *pSendList = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSubmixVoice(
+        IXAudio2SubmixVoice **ppSubmixVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags = 0,
+        UINT32 ProcessingStage = 0,
+        const XAUDIO23_VOICE_SENDS *pSendList = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateMasteringVoice(
+        IXAudio2MasteringVoice **ppMasteringVoice,
+        UINT32 InputChannels = XAUDIO2_DEFAULT_CHANNELS,
+        UINT32 InputSampleRate = XAUDIO2_DEFAULT_SAMPLERATE,
+        UINT32 Flags = 0,
+        UINT32 DeviceIndex = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StartEngine(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE StopEngine(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CommitChanges(
+        UINT32 OperationSet) = 0;
+
+    virtual void STDMETHODCALLTYPE GetPerformanceData(
+        XAUDIO22_PERFORMANCE_DATA *pPerfData) = 0;
+
+    virtual void STDMETHODCALLTYPE SetDebugConfiguration(
+        const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+        void *pReserved = 0) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IXAudio22, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb)
+#endif
+#else
+typedef struct IXAudio22Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXAudio22 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXAudio22 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXAudio22 *This);
+
+    /*** IXAudio22 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDeviceCount)(
+        IXAudio22 *This,
+        UINT32 *pCount);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeviceDetails)(
+        IXAudio22 *This,
+        UINT32 Index,
+        XAUDIO2_DEVICE_DETAILS *pDeviceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *Initialize)(
+        IXAudio22 *This,
+        UINT32 Flags,
+        XAUDIO2_PROCESSOR XAudio2Processor);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterForCallbacks)(
+        IXAudio22 *This,
+        IXAudio2EngineCallback *pCallback);
+
+    void (STDMETHODCALLTYPE *UnregisterForCallbacks)(
+        IXAudio22 *This,
+        IXAudio2EngineCallback *pCallback);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSourceVoice)(
+        IXAudio22 *This,
+        IXAudio2SourceVoice **ppSourceVoice,
+        const WAVEFORMATEX *pSourceFormat,
+        UINT32 Flags,
+        float MaxFrequencyRatio,
+        IXAudio2VoiceCallback *pCallback,
+        const XAUDIO23_VOICE_SENDS *pSendList,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSubmixVoice)(
+        IXAudio22 *This,
+        IXAudio2SubmixVoice **ppSubmixVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags,
+        UINT32 ProcessingStage,
+        const XAUDIO23_VOICE_SENDS *pSendList,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *CreateMasteringVoice)(
+        IXAudio22 *This,
+        IXAudio2MasteringVoice **ppMasteringVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags,
+        UINT32 DeviceIndex,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *StartEngine)(
+        IXAudio22 *This);
+
+    void (STDMETHODCALLTYPE *StopEngine)(
+        IXAudio22 *This);
+
+    HRESULT (STDMETHODCALLTYPE *CommitChanges)(
+        IXAudio22 *This,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetPerformanceData)(
+        IXAudio22 *This,
+        XAUDIO22_PERFORMANCE_DATA *pPerfData);
+
+    void (STDMETHODCALLTYPE *SetDebugConfiguration)(
+        IXAudio22 *This,
+        const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+        void *pReserved);
+
+    END_INTERFACE
+} IXAudio22Vtbl;
+
+interface IXAudio22 {
+    CONST_VTBL IXAudio22Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IXAudio22_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXAudio22_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXAudio22_Release(This) (This)->lpVtbl->Release(This)
+/*** IXAudio22 methods ***/
+#define IXAudio22_GetDeviceCount(This,pCount) (This)->lpVtbl->GetDeviceCount(This,pCount)
+#define IXAudio22_GetDeviceDetails(This,Index,pDeviceDetails) (This)->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails)
+#define IXAudio22_Initialize(This,Flags,XAudio2Processor) (This)->lpVtbl->Initialize(This,Flags,XAudio2Processor)
+#define IXAudio22_RegisterForCallbacks(This,pCallback) (This)->lpVtbl->RegisterForCallbacks(This,pCallback)
+#define IXAudio22_UnregisterForCallbacks(This,pCallback) (This)->lpVtbl->UnregisterForCallbacks(This,pCallback)
+#define IXAudio22_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) (This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)
+#define IXAudio22_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) (This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain)
+#define IXAudio22_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain) (This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain)
+#define IXAudio22_StartEngine(This) (This)->lpVtbl->StartEngine(This)
+#define IXAudio22_StopEngine(This) (This)->lpVtbl->StopEngine(This)
+#define IXAudio22_CommitChanges(This,OperationSet) (This)->lpVtbl->CommitChanges(This,OperationSet)
+#define IXAudio22_GetPerformanceData(This,pPerfData) (This)->lpVtbl->GetPerformanceData(This,pPerfData)
+#define IXAudio22_SetDebugConfiguration(This,pDebugConfiguration,pReserved) (This)->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IXAudio22_QueryInterface(IXAudio22* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IXAudio22_AddRef(IXAudio22* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IXAudio22_Release(IXAudio22* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IXAudio22 methods ***/
+static FORCEINLINE HRESULT IXAudio22_GetDeviceCount(IXAudio22* This,UINT32 *pCount) {
+    return This->lpVtbl->GetDeviceCount(This,pCount);
+}
+static FORCEINLINE HRESULT IXAudio22_GetDeviceDetails(IXAudio22* This,UINT32 Index,XAUDIO2_DEVICE_DETAILS *pDeviceDetails) {
+    return This->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails);
+}
+static FORCEINLINE HRESULT IXAudio22_Initialize(IXAudio22* This,UINT32 Flags,XAUDIO2_PROCESSOR XAudio2Processor) {
+    return This->lpVtbl->Initialize(This,Flags,XAudio2Processor);
+}
+static FORCEINLINE HRESULT IXAudio22_RegisterForCallbacks(IXAudio22* This,IXAudio2EngineCallback *pCallback) {
+    return This->lpVtbl->RegisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE void IXAudio22_UnregisterForCallbacks(IXAudio22* This,IXAudio2EngineCallback *pCallback) {
+    This->lpVtbl->UnregisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE HRESULT IXAudio22_CreateSourceVoice(IXAudio22* This,IXAudio2SourceVoice **ppSourceVoice,const WAVEFORMATEX *pSourceFormat,UINT32 Flags,float MaxFrequencyRatio,IXAudio2VoiceCallback *pCallback,const XAUDIO23_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio22_CreateSubmixVoice(IXAudio22* This,IXAudio2SubmixVoice **ppSubmixVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 ProcessingStage,const XAUDIO23_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio22_CreateMasteringVoice(IXAudio22* This,IXAudio2MasteringVoice **ppMasteringVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 DeviceIndex,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio22_StartEngine(IXAudio22* This) {
+    return This->lpVtbl->StartEngine(This);
+}
+static FORCEINLINE void IXAudio22_StopEngine(IXAudio22* This) {
+    This->lpVtbl->StopEngine(This);
+}
+static FORCEINLINE HRESULT IXAudio22_CommitChanges(IXAudio22* This,UINT32 OperationSet) {
+    return This->lpVtbl->CommitChanges(This,OperationSet);
+}
+static FORCEINLINE void IXAudio22_GetPerformanceData(IXAudio22* This,XAUDIO22_PERFORMANCE_DATA *pPerfData) {
+    This->lpVtbl->GetPerformanceData(This,pPerfData);
+}
+static FORCEINLINE void IXAudio22_SetDebugConfiguration(IXAudio22* This,const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,void *pReserved) {
+    This->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio22_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio23 interface
+ */
+#ifndef __IXAudio23_INTERFACE_DEFINED__
+#define __IXAudio23_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXAudio23, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb")
+IXAudio23 : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceCount(
+        UINT32 *pCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceDetails(
+        UINT32 Index,
+        XAUDIO2_DEVICE_DETAILS *pDeviceDetails) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Initialize(
+        UINT32 Flags = 0,
+        XAUDIO2_PROCESSOR XAudio2Processor = XAUDIO2_DEFAULT_PROCESSOR) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterForCallbacks(
+        IXAudio2EngineCallback *pCallback) = 0;
+
+    virtual void STDMETHODCALLTYPE UnregisterForCallbacks(
+        IXAudio2EngineCallback *pCallback) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSourceVoice(
+        IXAudio2SourceVoice **ppSourceVoice,
+        const WAVEFORMATEX *pSourceFormat,
+        UINT32 Flags = 0,
+        float MaxFrequencyRatio = XAUDIO2_DEFAULT_FREQ_RATIO,
+        IXAudio2VoiceCallback *pCallback = 0,
+        const XAUDIO23_VOICE_SENDS *pSendList = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSubmixVoice(
+        IXAudio2SubmixVoice **ppSubmixVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags = 0,
+        UINT32 ProcessingStage = 0,
+        const XAUDIO23_VOICE_SENDS *pSendList = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateMasteringVoice(
+        IXAudio2MasteringVoice **ppMasteringVoice,
+        UINT32 InputChannels = XAUDIO2_DEFAULT_CHANNELS,
+        UINT32 InputSampleRate = XAUDIO2_DEFAULT_SAMPLERATE,
+        UINT32 Flags = 0,
+        UINT32 DeviceIndex = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StartEngine(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE StopEngine(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CommitChanges(
+        UINT32 OperationSet) = 0;
+
+    virtual void STDMETHODCALLTYPE GetPerformanceData(
+        XAUDIO2_PERFORMANCE_DATA *pPerfData) = 0;
+
+    virtual void STDMETHODCALLTYPE SetDebugConfiguration(
+        const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+        void *pReserved = 0) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IXAudio23, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb)
+#endif
+#else
+typedef struct IXAudio23Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXAudio23 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXAudio23 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXAudio23 *This);
+
+    /*** IXAudio23 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDeviceCount)(
+        IXAudio23 *This,
+        UINT32 *pCount);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeviceDetails)(
+        IXAudio23 *This,
+        UINT32 Index,
+        XAUDIO2_DEVICE_DETAILS *pDeviceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *Initialize)(
+        IXAudio23 *This,
+        UINT32 Flags,
+        XAUDIO2_PROCESSOR XAudio2Processor);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterForCallbacks)(
+        IXAudio23 *This,
+        IXAudio2EngineCallback *pCallback);
+
+    void (STDMETHODCALLTYPE *UnregisterForCallbacks)(
+        IXAudio23 *This,
+        IXAudio2EngineCallback *pCallback);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSourceVoice)(
+        IXAudio23 *This,
+        IXAudio2SourceVoice **ppSourceVoice,
+        const WAVEFORMATEX *pSourceFormat,
+        UINT32 Flags,
+        float MaxFrequencyRatio,
+        IXAudio2VoiceCallback *pCallback,
+        const XAUDIO23_VOICE_SENDS *pSendList,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSubmixVoice)(
+        IXAudio23 *This,
+        IXAudio2SubmixVoice **ppSubmixVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags,
+        UINT32 ProcessingStage,
+        const XAUDIO23_VOICE_SENDS *pSendList,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *CreateMasteringVoice)(
+        IXAudio23 *This,
+        IXAudio2MasteringVoice **ppMasteringVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags,
+        UINT32 DeviceIndex,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *StartEngine)(
+        IXAudio23 *This);
+
+    void (STDMETHODCALLTYPE *StopEngine)(
+        IXAudio23 *This);
+
+    HRESULT (STDMETHODCALLTYPE *CommitChanges)(
+        IXAudio23 *This,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetPerformanceData)(
+        IXAudio23 *This,
+        XAUDIO2_PERFORMANCE_DATA *pPerfData);
+
+    void (STDMETHODCALLTYPE *SetDebugConfiguration)(
+        IXAudio23 *This,
+        const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+        void *pReserved);
+
+    END_INTERFACE
+} IXAudio23Vtbl;
+
+interface IXAudio23 {
+    CONST_VTBL IXAudio23Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IXAudio23_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXAudio23_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXAudio23_Release(This) (This)->lpVtbl->Release(This)
+/*** IXAudio23 methods ***/
+#define IXAudio23_GetDeviceCount(This,pCount) (This)->lpVtbl->GetDeviceCount(This,pCount)
+#define IXAudio23_GetDeviceDetails(This,Index,pDeviceDetails) (This)->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails)
+#define IXAudio23_Initialize(This,Flags,XAudio2Processor) (This)->lpVtbl->Initialize(This,Flags,XAudio2Processor)
+#define IXAudio23_RegisterForCallbacks(This,pCallback) (This)->lpVtbl->RegisterForCallbacks(This,pCallback)
+#define IXAudio23_UnregisterForCallbacks(This,pCallback) (This)->lpVtbl->UnregisterForCallbacks(This,pCallback)
+#define IXAudio23_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) (This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)
+#define IXAudio23_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) (This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain)
+#define IXAudio23_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain) (This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain)
+#define IXAudio23_StartEngine(This) (This)->lpVtbl->StartEngine(This)
+#define IXAudio23_StopEngine(This) (This)->lpVtbl->StopEngine(This)
+#define IXAudio23_CommitChanges(This,OperationSet) (This)->lpVtbl->CommitChanges(This,OperationSet)
+#define IXAudio23_GetPerformanceData(This,pPerfData) (This)->lpVtbl->GetPerformanceData(This,pPerfData)
+#define IXAudio23_SetDebugConfiguration(This,pDebugConfiguration,pReserved) (This)->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IXAudio23_QueryInterface(IXAudio23* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IXAudio23_AddRef(IXAudio23* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IXAudio23_Release(IXAudio23* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IXAudio23 methods ***/
+static FORCEINLINE HRESULT IXAudio23_GetDeviceCount(IXAudio23* This,UINT32 *pCount) {
+    return This->lpVtbl->GetDeviceCount(This,pCount);
+}
+static FORCEINLINE HRESULT IXAudio23_GetDeviceDetails(IXAudio23* This,UINT32 Index,XAUDIO2_DEVICE_DETAILS *pDeviceDetails) {
+    return This->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails);
+}
+static FORCEINLINE HRESULT IXAudio23_Initialize(IXAudio23* This,UINT32 Flags,XAUDIO2_PROCESSOR XAudio2Processor) {
+    return This->lpVtbl->Initialize(This,Flags,XAudio2Processor);
+}
+static FORCEINLINE HRESULT IXAudio23_RegisterForCallbacks(IXAudio23* This,IXAudio2EngineCallback *pCallback) {
+    return This->lpVtbl->RegisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE void IXAudio23_UnregisterForCallbacks(IXAudio23* This,IXAudio2EngineCallback *pCallback) {
+    This->lpVtbl->UnregisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE HRESULT IXAudio23_CreateSourceVoice(IXAudio23* This,IXAudio2SourceVoice **ppSourceVoice,const WAVEFORMATEX *pSourceFormat,UINT32 Flags,float MaxFrequencyRatio,IXAudio2VoiceCallback *pCallback,const XAUDIO23_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio23_CreateSubmixVoice(IXAudio23* This,IXAudio2SubmixVoice **ppSubmixVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 ProcessingStage,const XAUDIO23_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio23_CreateMasteringVoice(IXAudio23* This,IXAudio2MasteringVoice **ppMasteringVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 DeviceIndex,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio23_StartEngine(IXAudio23* This) {
+    return This->lpVtbl->StartEngine(This);
+}
+static FORCEINLINE void IXAudio23_StopEngine(IXAudio23* This) {
+    This->lpVtbl->StopEngine(This);
+}
+static FORCEINLINE HRESULT IXAudio23_CommitChanges(IXAudio23* This,UINT32 OperationSet) {
+    return This->lpVtbl->CommitChanges(This,OperationSet);
+}
+static FORCEINLINE void IXAudio23_GetPerformanceData(IXAudio23* This,XAUDIO2_PERFORMANCE_DATA *pPerfData) {
+    This->lpVtbl->GetPerformanceData(This,pPerfData);
+}
+static FORCEINLINE void IXAudio23_SetDebugConfiguration(IXAudio23* This,const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,void *pReserved) {
+    This->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio23_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio27 interface
+ */
+#ifndef __IXAudio27_INTERFACE_DEFINED__
+#define __IXAudio27_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXAudio27, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb")
+IXAudio27 : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceCount(
+        UINT32 *pCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceDetails(
+        UINT32 Index,
+        XAUDIO2_DEVICE_DETAILS *pDeviceDetails) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Initialize(
+        UINT32 Flags = 0,
+        XAUDIO2_PROCESSOR XAudio2Processor = XAUDIO2_DEFAULT_PROCESSOR) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterForCallbacks(
+        IXAudio2EngineCallback *pCallback) = 0;
+
+    virtual void STDMETHODCALLTYPE UnregisterForCallbacks(
+        IXAudio2EngineCallback *pCallback) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSourceVoice(
+        IXAudio2SourceVoice **ppSourceVoice,
+        const WAVEFORMATEX *pSourceFormat,
+        UINT32 Flags = 0,
+        float MaxFrequencyRatio = XAUDIO2_DEFAULT_FREQ_RATIO,
+        IXAudio2VoiceCallback *pCallback = 0,
+        const XAUDIO2_VOICE_SENDS *pSendList = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSubmixVoice(
+        IXAudio2SubmixVoice **ppSubmixVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags = 0,
+        UINT32 ProcessingStage = 0,
+        const XAUDIO2_VOICE_SENDS *pSendList = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateMasteringVoice(
+        IXAudio2MasteringVoice **ppMasteringVoice,
+        UINT32 InputChannels = XAUDIO2_DEFAULT_CHANNELS,
+        UINT32 InputSampleRate = XAUDIO2_DEFAULT_SAMPLERATE,
+        UINT32 Flags = 0,
+        UINT32 DeviceIndex = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StartEngine(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE StopEngine(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CommitChanges(
+        UINT32 OperationSet) = 0;
+
+    virtual void STDMETHODCALLTYPE GetPerformanceData(
+        XAUDIO2_PERFORMANCE_DATA *pPerfData) = 0;
+
+    virtual void STDMETHODCALLTYPE SetDebugConfiguration(
+        const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+        void *pReserved = 0) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IXAudio27, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb)
+#endif
+#else
+typedef struct IXAudio27Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXAudio27 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXAudio27 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXAudio27 *This);
+
+    /*** IXAudio27 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDeviceCount)(
+        IXAudio27 *This,
+        UINT32 *pCount);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeviceDetails)(
+        IXAudio27 *This,
+        UINT32 Index,
+        XAUDIO2_DEVICE_DETAILS *pDeviceDetails);
+
+    HRESULT (STDMETHODCALLTYPE *Initialize)(
+        IXAudio27 *This,
+        UINT32 Flags,
+        XAUDIO2_PROCESSOR XAudio2Processor);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterForCallbacks)(
+        IXAudio27 *This,
+        IXAudio2EngineCallback *pCallback);
+
+    void (STDMETHODCALLTYPE *UnregisterForCallbacks)(
+        IXAudio27 *This,
+        IXAudio2EngineCallback *pCallback);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSourceVoice)(
+        IXAudio27 *This,
+        IXAudio2SourceVoice **ppSourceVoice,
+        const WAVEFORMATEX *pSourceFormat,
+        UINT32 Flags,
+        float MaxFrequencyRatio,
+        IXAudio2VoiceCallback *pCallback,
+        const XAUDIO2_VOICE_SENDS *pSendList,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSubmixVoice)(
+        IXAudio27 *This,
+        IXAudio2SubmixVoice **ppSubmixVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags,
+        UINT32 ProcessingStage,
+        const XAUDIO2_VOICE_SENDS *pSendList,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *CreateMasteringVoice)(
+        IXAudio27 *This,
+        IXAudio2MasteringVoice **ppMasteringVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags,
+        UINT32 DeviceIndex,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *StartEngine)(
+        IXAudio27 *This);
+
+    void (STDMETHODCALLTYPE *StopEngine)(
+        IXAudio27 *This);
+
+    HRESULT (STDMETHODCALLTYPE *CommitChanges)(
+        IXAudio27 *This,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetPerformanceData)(
+        IXAudio27 *This,
+        XAUDIO2_PERFORMANCE_DATA *pPerfData);
+
+    void (STDMETHODCALLTYPE *SetDebugConfiguration)(
+        IXAudio27 *This,
+        const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+        void *pReserved);
+
+    END_INTERFACE
+} IXAudio27Vtbl;
+
+interface IXAudio27 {
+    CONST_VTBL IXAudio27Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IXAudio27_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXAudio27_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXAudio27_Release(This) (This)->lpVtbl->Release(This)
+/*** IXAudio27 methods ***/
+#define IXAudio27_GetDeviceCount(This,pCount) (This)->lpVtbl->GetDeviceCount(This,pCount)
+#define IXAudio27_GetDeviceDetails(This,Index,pDeviceDetails) (This)->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails)
+#define IXAudio27_Initialize(This,Flags,XAudio2Processor) (This)->lpVtbl->Initialize(This,Flags,XAudio2Processor)
+#define IXAudio27_RegisterForCallbacks(This,pCallback) (This)->lpVtbl->RegisterForCallbacks(This,pCallback)
+#define IXAudio27_UnregisterForCallbacks(This,pCallback) (This)->lpVtbl->UnregisterForCallbacks(This,pCallback)
+#define IXAudio27_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) (This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)
+#define IXAudio27_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) (This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain)
+#define IXAudio27_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain) (This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain)
+#define IXAudio27_StartEngine(This) (This)->lpVtbl->StartEngine(This)
+#define IXAudio27_StopEngine(This) (This)->lpVtbl->StopEngine(This)
+#define IXAudio27_CommitChanges(This,OperationSet) (This)->lpVtbl->CommitChanges(This,OperationSet)
+#define IXAudio27_GetPerformanceData(This,pPerfData) (This)->lpVtbl->GetPerformanceData(This,pPerfData)
+#define IXAudio27_SetDebugConfiguration(This,pDebugConfiguration,pReserved) (This)->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IXAudio27_QueryInterface(IXAudio27* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IXAudio27_AddRef(IXAudio27* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IXAudio27_Release(IXAudio27* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IXAudio27 methods ***/
+static FORCEINLINE HRESULT IXAudio27_GetDeviceCount(IXAudio27* This,UINT32 *pCount) {
+    return This->lpVtbl->GetDeviceCount(This,pCount);
+}
+static FORCEINLINE HRESULT IXAudio27_GetDeviceDetails(IXAudio27* This,UINT32 Index,XAUDIO2_DEVICE_DETAILS *pDeviceDetails) {
+    return This->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails);
+}
+static FORCEINLINE HRESULT IXAudio27_Initialize(IXAudio27* This,UINT32 Flags,XAUDIO2_PROCESSOR XAudio2Processor) {
+    return This->lpVtbl->Initialize(This,Flags,XAudio2Processor);
+}
+static FORCEINLINE HRESULT IXAudio27_RegisterForCallbacks(IXAudio27* This,IXAudio2EngineCallback *pCallback) {
+    return This->lpVtbl->RegisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE void IXAudio27_UnregisterForCallbacks(IXAudio27* This,IXAudio2EngineCallback *pCallback) {
+    This->lpVtbl->UnregisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE HRESULT IXAudio27_CreateSourceVoice(IXAudio27* This,IXAudio2SourceVoice **ppSourceVoice,const WAVEFORMATEX *pSourceFormat,UINT32 Flags,float MaxFrequencyRatio,IXAudio2VoiceCallback *pCallback,const XAUDIO2_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio27_CreateSubmixVoice(IXAudio27* This,IXAudio2SubmixVoice **ppSubmixVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 ProcessingStage,const XAUDIO2_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio27_CreateMasteringVoice(IXAudio27* This,IXAudio2MasteringVoice **ppMasteringVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 DeviceIndex,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio27_StartEngine(IXAudio27* This) {
+    return This->lpVtbl->StartEngine(This);
+}
+static FORCEINLINE void IXAudio27_StopEngine(IXAudio27* This) {
+    This->lpVtbl->StopEngine(This);
+}
+static FORCEINLINE HRESULT IXAudio27_CommitChanges(IXAudio27* This,UINT32 OperationSet) {
+    return This->lpVtbl->CommitChanges(This,OperationSet);
+}
+static FORCEINLINE void IXAudio27_GetPerformanceData(IXAudio27* This,XAUDIO2_PERFORMANCE_DATA *pPerfData) {
+    This->lpVtbl->GetPerformanceData(This,pPerfData);
+}
+static FORCEINLINE void IXAudio27_SetDebugConfiguration(IXAudio27* This,const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,void *pReserved) {
+    This->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio27_INTERFACE_DEFINED__ */
+
+DEFINE_GUID(IID_IXAudio28, 0x60d8dac8, 0x5aa1, 0x4e8e, 0xb5, 0x97, 0x2f, 0x5e, 0x28, 0x83, 0xd4, 0x84);
+/*****************************************************************************
+ * IXAudio2 interface
+ */
+#ifndef __IXAudio2_INTERFACE_DEFINED__
+#define __IXAudio2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXAudio2, 0x2b02e3cf, 0x2e0b, 0x4ec3, 0xbe,0x45, 0x1b,0x2a,0x3f,0xe7,0x21,0x0d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2b02e3cf-2e0b-4ec3-be45-1b2a3fe7210d")
+IXAudio2 : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE RegisterForCallbacks(
+        IXAudio2EngineCallback *pCallback) = 0;
+
+    virtual void STDMETHODCALLTYPE UnregisterForCallbacks(
+        IXAudio2EngineCallback *pCallback) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSourceVoice(
+        IXAudio2SourceVoice **ppSourceVoice,
+        const WAVEFORMATEX *pSourceFormat,
+        UINT32 Flags = 0,
+        float MaxFrequencyRatio = XAUDIO2_DEFAULT_FREQ_RATIO,
+        IXAudio2VoiceCallback *pCallback = 0,
+        const XAUDIO2_VOICE_SENDS *pSendList = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSubmixVoice(
+        IXAudio2SubmixVoice **ppSubmixVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags = 0,
+        UINT32 ProcessingStage = 0,
+        const XAUDIO2_VOICE_SENDS *pSendList = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateMasteringVoice(
+        IXAudio2MasteringVoice **ppMasteringVoice,
+        UINT32 InputChannels = XAUDIO2_DEFAULT_CHANNELS,
+        UINT32 InputSampleRate = XAUDIO2_DEFAULT_SAMPLERATE,
+        UINT32 Flags = 0,
+        LPCWSTR DeviceId = 0,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0,
+        AUDIO_STREAM_CATEGORY StreamCategory = AudioCategory_GameEffects) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StartEngine(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE StopEngine(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CommitChanges(
+        UINT32 OperationSet) = 0;
+
+    virtual void STDMETHODCALLTYPE GetPerformanceData(
+        XAUDIO2_PERFORMANCE_DATA *pPerfData) = 0;
+
+    virtual void STDMETHODCALLTYPE SetDebugConfiguration(
+        const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+        void *pReserved = 0) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IXAudio2, 0x2b02e3cf, 0x2e0b, 0x4ec3, 0xbe,0x45, 0x1b,0x2a,0x3f,0xe7,0x21,0x0d)
+#endif
+#else
+typedef struct IXAudio2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXAudio2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXAudio2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXAudio2 *This);
+
+    /*** IXAudio2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *RegisterForCallbacks)(
+        IXAudio2 *This,
+        IXAudio2EngineCallback *pCallback);
+
+    void (STDMETHODCALLTYPE *UnregisterForCallbacks)(
+        IXAudio2 *This,
+        IXAudio2EngineCallback *pCallback);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSourceVoice)(
+        IXAudio2 *This,
+        IXAudio2SourceVoice **ppSourceVoice,
+        const WAVEFORMATEX *pSourceFormat,
+        UINT32 Flags,
+        float MaxFrequencyRatio,
+        IXAudio2VoiceCallback *pCallback,
+        const XAUDIO2_VOICE_SENDS *pSendList,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSubmixVoice)(
+        IXAudio2 *This,
+        IXAudio2SubmixVoice **ppSubmixVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags,
+        UINT32 ProcessingStage,
+        const XAUDIO2_VOICE_SENDS *pSendList,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+    HRESULT (STDMETHODCALLTYPE *CreateMasteringVoice)(
+        IXAudio2 *This,
+        IXAudio2MasteringVoice **ppMasteringVoice,
+        UINT32 InputChannels,
+        UINT32 InputSampleRate,
+        UINT32 Flags,
+        LPCWSTR DeviceId,
+        const XAUDIO2_EFFECT_CHAIN *pEffectChain,
+        AUDIO_STREAM_CATEGORY StreamCategory);
+
+    HRESULT (STDMETHODCALLTYPE *StartEngine)(
+        IXAudio2 *This);
+
+    void (STDMETHODCALLTYPE *StopEngine)(
+        IXAudio2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *CommitChanges)(
+        IXAudio2 *This,
+        UINT32 OperationSet);
+
+    void (STDMETHODCALLTYPE *GetPerformanceData)(
+        IXAudio2 *This,
+        XAUDIO2_PERFORMANCE_DATA *pPerfData);
+
+    void (STDMETHODCALLTYPE *SetDebugConfiguration)(
+        IXAudio2 *This,
+        const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+        void *pReserved);
+
+    END_INTERFACE
+} IXAudio2Vtbl;
+
+interface IXAudio2 {
+    CONST_VTBL IXAudio2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IXAudio2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXAudio2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXAudio2_Release(This) (This)->lpVtbl->Release(This)
+/*** IXAudio2 methods ***/
+#define IXAudio2_RegisterForCallbacks(This,pCallback) (This)->lpVtbl->RegisterForCallbacks(This,pCallback)
+#define IXAudio2_UnregisterForCallbacks(This,pCallback) (This)->lpVtbl->UnregisterForCallbacks(This,pCallback)
+#define IXAudio2_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) (This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)
+#define IXAudio2_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) (This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain)
+#define IXAudio2_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory) (This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory)
+#define IXAudio2_StartEngine(This) (This)->lpVtbl->StartEngine(This)
+#define IXAudio2_StopEngine(This) (This)->lpVtbl->StopEngine(This)
+#define IXAudio2_CommitChanges(This,OperationSet) (This)->lpVtbl->CommitChanges(This,OperationSet)
+#define IXAudio2_GetPerformanceData(This,pPerfData) (This)->lpVtbl->GetPerformanceData(This,pPerfData)
+#define IXAudio2_SetDebugConfiguration(This,pDebugConfiguration,pReserved) (This)->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IXAudio2_QueryInterface(IXAudio2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IXAudio2_AddRef(IXAudio2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IXAudio2_Release(IXAudio2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IXAudio2 methods ***/
+static FORCEINLINE HRESULT IXAudio2_RegisterForCallbacks(IXAudio2* This,IXAudio2EngineCallback *pCallback) {
+    return This->lpVtbl->RegisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE void IXAudio2_UnregisterForCallbacks(IXAudio2* This,IXAudio2EngineCallback *pCallback) {
+    This->lpVtbl->UnregisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE HRESULT IXAudio2_CreateSourceVoice(IXAudio2* This,IXAudio2SourceVoice **ppSourceVoice,const WAVEFORMATEX *pSourceFormat,UINT32 Flags,float MaxFrequencyRatio,IXAudio2VoiceCallback *pCallback,const XAUDIO2_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio2_CreateSubmixVoice(IXAudio2* This,IXAudio2SubmixVoice **ppSubmixVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 ProcessingStage,const XAUDIO2_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+    return This->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio2_CreateMasteringVoice(IXAudio2* This,IXAudio2MasteringVoice **ppMasteringVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,LPCWSTR DeviceId,const XAUDIO2_EFFECT_CHAIN *pEffectChain,AUDIO_STREAM_CATEGORY StreamCategory) {
+    return This->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory);
+}
+static FORCEINLINE HRESULT IXAudio2_StartEngine(IXAudio2* This) {
+    return This->lpVtbl->StartEngine(This);
+}
+static FORCEINLINE void IXAudio2_StopEngine(IXAudio2* This) {
+    This->lpVtbl->StopEngine(This);
+}
+static FORCEINLINE HRESULT IXAudio2_CommitChanges(IXAudio2* This,UINT32 OperationSet) {
+    return This->lpVtbl->CommitChanges(This,OperationSet);
+}
+static FORCEINLINE void IXAudio2_GetPerformanceData(IXAudio2* This,XAUDIO2_PERFORMANCE_DATA *pPerfData) {
+    This->lpVtbl->GetPerformanceData(This,pPerfData);
+}
+static FORCEINLINE void IXAudio2_SetDebugConfiguration(IXAudio2* This,const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,void *pReserved) {
+    This->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IXAudio2_INTERFACE_DEFINED__ */
+
+#define XAUDIO2_DEBUG_ENGINE (1)
+
+#define XAUDIO2_VOICE_NOPITCH (2)
+
+#define XAUDIO2_VOICE_NOSRC (4)
+
+#define XAUDIO2_VOICE_USEFILTER (8)
+
+#define XAUDIO2_VOICE_MUSIC (16)
+
+#define XAUDIO2_PLAY_TAILS (32)
+
+#define XAUDIO2_END_OF_STREAM (64)
+
+#define XAUDIO2_SEND_USEFILTER (128)
+
+#define XAUDIO2_VOICE_NOSAMPLESPLAYED (256)
+
+#define XAUDIO2_DEFAULT_FILTER_TYPE (LowPassFilter)
+
+#define XAUDIO2_DEFAULT_FILTER_FREQUENCY (XAUDIO2_MAX_FILTER_FREQUENCY)
+
+#define XAUDIO2_DEFAULT_FILTER_ONEOVERQ (1.00000000000000)
+
+#define XAUDIO2_QUANTUM_NUMERATOR (1)
+
+#define XAUDIO2_QUANTUM_DENOMINATOR (100)
+
+#define XAUDIO2_QUANTUM_MS ((1000.00000000000 * XAUDIO2_QUANTUM_NUMERATOR) / XAUDIO2_QUANTUM_DENOMINATOR)
+
+#define XAUDIO2_E_INVALID_CALL (0x88960001)
+
+#define XAUDIO2_E_XMA_DECODER_ERROR (0x88960002)
+
+#define XAUDIO2_E_XAPO_CREATION_FAILED (0x88960003)
+
+#define XAUDIO2_E_DEVICE_INVALIDATED (0x88960004)
+
+#define XAUDIO20_E_XMA_DECODER_ERROR (0x88960001)
+
+#define XAUDIO20_E_XAPO_CREATION_FAILED (0x88960002)
+
+#define XAUDIO20_E_DEVICE_INVALIDATED (0x88960003)
+
+#ifdef XAUDIO2_HELPER_FUNCTIONS
+#define _USE_MATH_DEFINES
+#include <math.h>
+inline static float XAudio2DecibelsToAmplitudeRatio(float decibels) { return powf(10.0f, decibels/20.0f); }
+inline static float XAudio2AmplitudeRatioToDecibels(float volume) { if (volume == 0) { return -3.402823466e+38f; } return 20.0f * log10f(volume); }
+inline static float XAudio2SemitonesToFrequencyRatio(float semitones) { return powf(2.0f, semitones/12.0f); }
+inline static float XAudio2FrequencyRatioToSemitones(float freqratio) { return 39.86313713864835f * log10f(freqratio); }
+inline static float XAudio2CutoffFrequencyToRadians(float cutofffreq, UINT32 samplerate) { if ((UINT32)(cutofffreq * 6.0f) >= samplerate) { return XAUDIO2_MAX_FILTER_FREQUENCY; } return 2.0f * sinf((float)M_PI * cutofffreq / samplerate); }
+inline static float XAudio2RadiansToCutoffFrequency(float radians, float samplerate) { return samplerate * asinf(radians/2.0f) / (float)M_PI; }
+#endif
+HRESULT WINAPI XAudio2Create(IXAudio2** pxaudio2, UINT32 flags, XAUDIO2_PROCESSOR processor);
+#include <poppack.h>
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __xaudio2_h__ */
diff --git a/mingw-w64-headers/include/xaudio2.idl b/mingw-w64-headers/include/xaudio2.idl
new file mode 100644
index 0000000..074454d
--- /dev/null
+++ b/mingw-w64-headers/include/xaudio2.idl
@@ -0,0 +1,1269 @@
+/*
+ * Copyright (c) 2015 Mark Harmstone
+ *
+ * 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
+ */
+
+import "unknwn.idl";
+import "mmdeviceapi.idl";
+
+import "audiosessiontypes.h";
+
+cpp_quote("#include <pshpack1.h>")
+
+[
+    uuid(fac23f48-31f5-45a8-b49b-5225d61401aa)
+]
+coclass XAudio20 {
+    interface IUnknown;
+}
+
+[
+    uuid(e21a7345-eb21-468e-be50-804db97cf708)
+]
+coclass XAudio21 {
+    interface IUnknown;
+}
+
+[
+    uuid(b802058a-464a-42db-bc10-b650d6f2586a)
+]
+coclass XAudio22 {
+    interface IUnknown;
+}
+
+[
+    uuid(4c5e637a-16c7-4de3-9c46-5ed22181962d)
+]
+coclass XAudio23 {
+    interface IUnknown;
+}
+
+[
+    uuid(03219e78-5bc3-44d1-b92e-f63d89cc6526)
+]
+coclass XAudio24 {
+    interface IUnknown;
+}
+
+[
+    uuid(4c9b6dde-6809-46e6-a278-9b6a97588670)
+]
+coclass XAudio25 {
+    interface IUnknown;
+}
+
+[
+    uuid(3eda9b49-2085-498b-9bb2-39a6778493de)
+]
+coclass XAudio26 {
+    interface IUnknown;
+}
+
+[
+    uuid(5a508685-a254-4fba-9b82-9a24b00306af)
+]
+coclass XAudio27 {
+    interface IUnknown;
+}
+
+[
+    uuid(db05ea35-0329-4d4b-a53a-6dead03d3852)
+]
+coclass XAudio2Debug {
+    interface IUnknown;
+}
+
+cpp_quote("#if 0")
+typedef struct WAVEFORMATEX
+{
+    WORD wFormatTag;
+    WORD nChannels;
+    DWORD nSamplesPerSec;
+    DWORD nAvgBytesPerSec;
+    WORD nBlockAlign;
+    WORD wBitsPerSample;
+    WORD cbSize;
+} WAVEFORMATEX;
+
+typedef struct {
+    WAVEFORMATEX    Format;
+    union {
+        WORD        wValidBitsPerSample;
+        WORD        wSamplesPerBlock;
+        WORD        wReserved;
+    } Samples;
+    DWORD           dwChannelMask;
+    GUID            SubFormat;
+} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
+cpp_quote("#else")
+cpp_quote("#include <mmreg.h>")
+cpp_quote("#endif")
+
+interface IXAudio2Voice;
+
+typedef enum XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER
+{
+    Processor1  = 0x00000001,
+    Processor2  = 0x00000002,
+    Processor3  = 0x00000004,
+    Processor4  = 0x00000008,
+    Processor5  = 0x00000010,
+    Processor6  = 0x00000020,
+    Processor7  = 0x00000040,
+    Processor8  = 0x00000080,
+    Processor9  = 0x00000100,
+    Processor10 = 0x00000200,
+    Processor11 = 0x00000400,
+    Processor12 = 0x00000800,
+    Processor13 = 0x00001000,
+    Processor14 = 0x00002000,
+    Processor15 = 0x00004000,
+    Processor16 = 0x00008000,
+    Processor17 = 0x00010000,
+    Processor18 = 0x00020000,
+    Processor19 = 0x00040000,
+    Processor20 = 0x00080000,
+    Processor21 = 0x00100000,
+    Processor22 = 0x00200000,
+    Processor23 = 0x00400000,
+    Processor24 = 0x00800000,
+    Processor25 = 0x01000000,
+    Processor26 = 0x02000000,
+    Processor27 = 0x04000000,
+    Processor28 = 0x08000000,
+    Processor29 = 0x10000000,
+    Processor30 = 0x20000000,
+    Processor31 = 0x40000000,
+    Processor32 = 0x80000000,
+    XAUDIO2_ANY_PROCESSOR = 0xffffffff,
+    XAUDIO2_DEFAULT_PROCESSOR = XAUDIO2_ANY_PROCESSOR
+} XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER, XAUDIO2_PROCESSOR;
+
+typedef struct XAUDIO2_PERFORMANCE_DATA
+{
+    UINT64 AudioCyclesSinceLastQuery;
+    UINT64 TotalCyclesSinceLastQuery;
+    UINT32 MinimumCyclesPerQuantum;
+    UINT32 MaximumCyclesPerQuantum;
+    UINT32 MemoryUsageInBytes;
+    UINT32 CurrentLatencyInSamples;
+    UINT32 GlitchesSinceEngineStarted;
+    UINT32 ActiveSourceVoiceCount;
+    UINT32 TotalSourceVoiceCount;
+    UINT32 ActiveSubmixVoiceCount;
+    UINT32 ActiveResamplerCount;
+    UINT32 ActiveMatrixMixCount;
+    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,
+    DefaultConsoleDevice        = 0x1,
+    DefaultMultimediaDevice     = 0x2,
+    DefaultCommunicationsDevice = 0x4,
+    DefaultGameDevice           = 0x8,
+    GlobalDefaultDevice         = 0xf,
+    InvalidDeviceRole = ~GlobalDefaultDevice
+} XAUDIO2_DEVICE_ROLE;
+
+typedef struct XAUDIO2_DEVICE_DETAILS
+{
+    WCHAR DeviceID[256];
+    WCHAR DisplayName[256];
+    XAUDIO2_DEVICE_ROLE Role;
+    WAVEFORMATEXTENSIBLE OutputFormat;
+} XAUDIO2_DEVICE_DETAILS;
+
+typedef struct XAUDIO27_VOICE_DETAILS
+{
+    UINT32 CreationFlags;
+    UINT32 InputChannels;
+    UINT32 InputSampleRate;
+} XAUDIO27_VOICE_DETAILS;
+
+typedef struct XAUDIO2_VOICE_DETAILS
+{
+    UINT32 CreationFlags;
+    UINT32 ActiveFlags;
+    UINT32 InputChannels;
+    UINT32 InputSampleRate;
+} XAUDIO2_VOICE_DETAILS;
+
+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;
+
+typedef struct XAUDIO2_EFFECT_DESCRIPTOR
+{
+    IUnknown* pEffect;
+    BOOL InitialState;
+    UINT32 OutputChannels;
+} XAUDIO2_EFFECT_DESCRIPTOR;
+
+typedef struct XAUDIO2_EFFECT_CHAIN
+{
+    UINT32 EffectCount;
+    XAUDIO2_EFFECT_DESCRIPTOR* pEffectDescriptors;
+} XAUDIO2_EFFECT_CHAIN;
+
+const UINT32 XAUDIO2_MAX_BUFFER_BYTES = 0x80000000;
+const UINT32 XAUDIO2_MAX_QUEUED_BUFFERS = 64;
+const UINT32 XAUDIO2_MAX_BUFFERS_SYSTEM = 2;
+const UINT32 XAUDIO2_MAX_AUDIO_CHANNELS = 64;
+const UINT32 XAUDIO2_MIN_SAMPLE_RATE = 1000;
+const UINT32 XAUDIO2_MAX_SAMPLE_RATE = 200000;
+const float XAUDIO2_MAX_VOLUME_LEVEL = 16777216.0;
+const float XAUDIO2_MIN_FREQ_RATIO = (1/1024.0);
+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;
+const UINT32 XAUDIO2_MAX_LOOP_COUNT = 254;
+const UINT32 XAUDIO20_MAX_LOOP_COUNT = 0x100000; /* xaudio 2.0 */
+
+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;
+const UINT32 XAUDIO2_LOOP_INFINITE = 255;
+const UINT32 XAUDIO20_LOOP_INFINITE = ((UINT)-1); /* xaudio 2.0 */
+const UINT32 XAUDIO2_DEFAULT_CHANNELS = 0;
+const UINT32 XAUDIO2_DEFAULT_SAMPLERATE = 0;
+
+[
+    object,
+    local
+]
+interface IXAudio2EngineCallback
+{
+    void OnProcessingPassStart();
+
+    void OnProcessingPassEnd();
+
+    void OnCriticalError([in] HRESULT Error);
+}
+
+typedef enum XAUDIO2_FILTER_TYPE
+{
+    LowPassFilter,
+    BandPassFilter,
+    HighPassFilter,
+    NotchFilter
+} XAUDIO2_FILTER_TYPE;
+
+typedef struct XAUDIO2_FILTER_PARAMETERS
+{
+    XAUDIO2_FILTER_TYPE Type;
+    float Frequency;
+    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
+{
+    void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails);
+
+    HRESULT SetOutputVoices([in] const XAUDIO23_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 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);
+
+    HRESULT GetOutputMatrix(
+        [in] IXAudio2Voice* pDestinationVoice,
+        [in] UINT32 SourceChannels,
+        [in] UINT32 DestinationChannels,
+        [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix);
+
+    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
+{
+    void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails);
+
+    HRESULT SetOutputVoices([in] const XAUDIO23_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 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();
+}
+
+/* XAudio 2.7's IXAudio2Voice */
+/* XAudio2 2.7's IXAudio2Voice interface. Actually called
+ * IXAudio2Voice in the Jun 2010 DX SDK */
+[
+    object,
+    local
+]
+interface IXAudio27Voice
+{
+    void GetVoiceDetails([out] XAUDIO27_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();
+}
+
+[
+    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);
+
+    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(NULL)] LPCWSTR DeviceId,
+        [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain,
+        [in, defaultvalue(AudioCategory_GameEffects)] AUDIO_STREAM_CATEGORY StreamCategory);
+
+    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);
+}
+
+const UINT32 XAUDIO2_DEBUG_ENGINE = 1;
+const UINT32 XAUDIO2_VOICE_NOPITCH = 2;
+const UINT32 XAUDIO2_VOICE_NOSRC = 4;
+const UINT32 XAUDIO2_VOICE_USEFILTER = 8;
+const UINT32 XAUDIO2_VOICE_MUSIC = 16;
+const UINT32 XAUDIO2_PLAY_TAILS = 32;
+const UINT32 XAUDIO2_END_OF_STREAM = 64;
+const UINT32 XAUDIO2_SEND_USEFILTER = 128;
+const UINT32 XAUDIO2_VOICE_NOSAMPLESPLAYED = 256;
+
+const XAUDIO2_FILTER_TYPE XAUDIO2_DEFAULT_FILTER_TYPE = LowPassFilter;
+const float XAUDIO2_DEFAULT_FILTER_FREQUENCY = XAUDIO2_MAX_FILTER_FREQUENCY;
+const float XAUDIO2_DEFAULT_FILTER_ONEOVERQ = 1.0;
+const UINT32 XAUDIO2_QUANTUM_NUMERATOR = 1;
+const UINT32 XAUDIO2_QUANTUM_DENOMINATOR = 100;
+const float XAUDIO2_QUANTUM_MS = (1000.0 * XAUDIO2_QUANTUM_NUMERATOR / XAUDIO2_QUANTUM_DENOMINATOR);
+
+const HRESULT XAUDIO2_E_INVALID_CALL = 0x88960001;
+const HRESULT XAUDIO2_E_XMA_DECODER_ERROR = 0x88960002;
+const HRESULT XAUDIO2_E_XAPO_CREATION_FAILED = 0x88960003;
+const HRESULT XAUDIO2_E_DEVICE_INVALIDATED = 0x88960004;
+
+/* xaudio 2.0 error codes */
+const HRESULT XAUDIO20_E_XMA_DECODER_ERROR = 0x88960001;
+const HRESULT XAUDIO20_E_XAPO_CREATION_FAILED = 0x88960002;
+const HRESULT XAUDIO20_E_DEVICE_INVALIDATED = 0x88960003;
+
+cpp_quote("#ifdef XAUDIO2_HELPER_FUNCTIONS")
+cpp_quote("#define _USE_MATH_DEFINES")
+cpp_quote("#include <math.h>")
+cpp_quote("inline static float XAudio2DecibelsToAmplitudeRatio(float decibels) { return powf(10.0f, decibels/20.0f); }")
+cpp_quote("inline static float XAudio2AmplitudeRatioToDecibels(float volume) { if (volume == 0) { return -3.402823466e+38f; } return 20.0f * log10f(volume); }")
+cpp_quote("inline static float XAudio2SemitonesToFrequencyRatio(float semitones) { return powf(2.0f, semitones/12.0f); }")
+cpp_quote("inline static float XAudio2FrequencyRatioToSemitones(float freqratio) { return 39.86313713864835f * log10f(freqratio); }")
+cpp_quote("inline static float XAudio2CutoffFrequencyToRadians(float cutofffreq, UINT32 samplerate) { if ((UINT32)(cutofffreq * 6.0f) >= samplerate) { return XAUDIO2_MAX_FILTER_FREQUENCY; } return 2.0f * sinf((float)M_PI * cutofffreq / samplerate); }")
+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>")
diff --git a/mingw-w64-headers/include/xaudio2fx.h b/mingw-w64-headers/include/xaudio2fx.h
new file mode 100644
index 0000000..2b1ba40
--- /dev/null
+++ b/mingw-w64-headers/include/xaudio2fx.h
@@ -0,0 +1,390 @@
+/*** Autogenerated by WIDL 5.13 from include/xaudio2fx.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __xaudio2fx_h__
+#define __xaudio2fx_h__
+
+/* Forward declarations */
+
+#ifndef __AudioVolumeMeter20_FWD_DEFINED__
+#define __AudioVolumeMeter20_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioVolumeMeter20 AudioVolumeMeter20;
+#else
+typedef struct AudioVolumeMeter20 AudioVolumeMeter20;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioVolumeMeter20_FWD_DEFINED__ */
+
+#ifndef __AudioVolumeMeter21_FWD_DEFINED__
+#define __AudioVolumeMeter21_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioVolumeMeter21 AudioVolumeMeter21;
+#else
+typedef struct AudioVolumeMeter21 AudioVolumeMeter21;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioVolumeMeter21_FWD_DEFINED__ */
+
+#ifndef __AudioVolumeMeter22_FWD_DEFINED__
+#define __AudioVolumeMeter22_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioVolumeMeter22 AudioVolumeMeter22;
+#else
+typedef struct AudioVolumeMeter22 AudioVolumeMeter22;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioVolumeMeter22_FWD_DEFINED__ */
+
+#ifndef __AudioVolumeMeter23_FWD_DEFINED__
+#define __AudioVolumeMeter23_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioVolumeMeter23 AudioVolumeMeter23;
+#else
+typedef struct AudioVolumeMeter23 AudioVolumeMeter23;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioVolumeMeter23_FWD_DEFINED__ */
+
+#ifndef __AudioVolumeMeter24_FWD_DEFINED__
+#define __AudioVolumeMeter24_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioVolumeMeter24 AudioVolumeMeter24;
+#else
+typedef struct AudioVolumeMeter24 AudioVolumeMeter24;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioVolumeMeter24_FWD_DEFINED__ */
+
+#ifndef __AudioVolumeMeter25_FWD_DEFINED__
+#define __AudioVolumeMeter25_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioVolumeMeter25 AudioVolumeMeter25;
+#else
+typedef struct AudioVolumeMeter25 AudioVolumeMeter25;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioVolumeMeter25_FWD_DEFINED__ */
+
+#ifndef __AudioVolumeMeter26_FWD_DEFINED__
+#define __AudioVolumeMeter26_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioVolumeMeter26 AudioVolumeMeter26;
+#else
+typedef struct AudioVolumeMeter26 AudioVolumeMeter26;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioVolumeMeter26_FWD_DEFINED__ */
+
+#ifndef __AudioVolumeMeter27_FWD_DEFINED__
+#define __AudioVolumeMeter27_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioVolumeMeter27 AudioVolumeMeter27;
+#else
+typedef struct AudioVolumeMeter27 AudioVolumeMeter27;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioVolumeMeter27_FWD_DEFINED__ */
+
+#ifndef __AudioReverb20_FWD_DEFINED__
+#define __AudioReverb20_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioReverb20 AudioReverb20;
+#else
+typedef struct AudioReverb20 AudioReverb20;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioReverb20_FWD_DEFINED__ */
+
+#ifndef __AudioReverb21_FWD_DEFINED__
+#define __AudioReverb21_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioReverb21 AudioReverb21;
+#else
+typedef struct AudioReverb21 AudioReverb21;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioReverb21_FWD_DEFINED__ */
+
+#ifndef __AudioReverb22_FWD_DEFINED__
+#define __AudioReverb22_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioReverb22 AudioReverb22;
+#else
+typedef struct AudioReverb22 AudioReverb22;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioReverb22_FWD_DEFINED__ */
+
+#ifndef __AudioReverb23_FWD_DEFINED__
+#define __AudioReverb23_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioReverb23 AudioReverb23;
+#else
+typedef struct AudioReverb23 AudioReverb23;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioReverb23_FWD_DEFINED__ */
+
+#ifndef __AudioReverb24_FWD_DEFINED__
+#define __AudioReverb24_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioReverb24 AudioReverb24;
+#else
+typedef struct AudioReverb24 AudioReverb24;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioReverb24_FWD_DEFINED__ */
+
+#ifndef __AudioReverb25_FWD_DEFINED__
+#define __AudioReverb25_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioReverb25 AudioReverb25;
+#else
+typedef struct AudioReverb25 AudioReverb25;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioReverb25_FWD_DEFINED__ */
+
+#ifndef __AudioReverb26_FWD_DEFINED__
+#define __AudioReverb26_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioReverb26 AudioReverb26;
+#else
+typedef struct AudioReverb26 AudioReverb26;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioReverb26_FWD_DEFINED__ */
+
+#ifndef __AudioReverb27_FWD_DEFINED__
+#define __AudioReverb27_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class AudioReverb27 AudioReverb27;
+#else
+typedef struct AudioReverb27 AudioReverb27;
+#endif /* defined __cplusplus */
+#endif /* defined __AudioReverb27_FWD_DEFINED__ */
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * AudioVolumeMeter20 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioVolumeMeter20, 0xc0c56f46, 0x29b1, 0x44e9, 0x99,0x39, 0xa3,0x2c,0xe8,0x68,0x67,0xe2);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("c0c56f46-29b1-44e9-9939-a32ce86867e2") AudioVolumeMeter20;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioVolumeMeter20, 0xc0c56f46, 0x29b1, 0x44e9, 0x99,0x39, 0xa3,0x2c,0xe8,0x68,0x67,0xe2)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioVolumeMeter21 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioVolumeMeter21, 0xc1e3f122, 0xa2ea, 0x442c, 0x85,0x4f, 0x20,0xd9,0x8f,0x83,0x57,0xa1);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("c1e3f122-a2ea-442c-854f-20d98f8357a1") AudioVolumeMeter21;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioVolumeMeter21, 0xc1e3f122, 0xa2ea, 0x442c, 0x85,0x4f, 0x20,0xd9,0x8f,0x83,0x57,0xa1)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioVolumeMeter22 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioVolumeMeter22, 0xf5ca7b34, 0x8055, 0x42c0, 0xb8,0x36, 0x21,0x61,0x29,0xeb,0x7e,0x30);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("f5ca7b34-8055-42c0-b836-216129eb7e30") AudioVolumeMeter22;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioVolumeMeter22, 0xf5ca7b34, 0x8055, 0x42c0, 0xb8,0x36, 0x21,0x61,0x29,0xeb,0x7e,0x30)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioVolumeMeter23 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioVolumeMeter23, 0xe180344b, 0xac83, 0x4483, 0x95,0x9e, 0x18,0xa5,0xc5,0x6a,0x5e,0x19);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("e180344b-ac83-4483-959e-18a5c56a5e19") AudioVolumeMeter23;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioVolumeMeter23, 0xe180344b, 0xac83, 0x4483, 0x95,0x9e, 0x18,0xa5,0xc5,0x6a,0x5e,0x19)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioVolumeMeter24 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioVolumeMeter24, 0xc7338b95, 0x52b8, 0x4542, 0xaa,0x79, 0x42,0xeb,0x01,0x6c,0x8c,0x1c);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("c7338b95-52b8-4542-aa79-42eb016c8c1c") AudioVolumeMeter24;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioVolumeMeter24, 0xc7338b95, 0x52b8, 0x4542, 0xaa,0x79, 0x42,0xeb,0x01,0x6c,0x8c,0x1c)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioVolumeMeter25 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioVolumeMeter25, 0x2139e6da, 0xc341, 0x4774, 0x9a,0xc3, 0xb4,0xe0,0x26,0x34,0x7f,0x64);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("2139e6da-c341-4774-9ac3-b4e026347f64") AudioVolumeMeter25;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioVolumeMeter25, 0x2139e6da, 0xc341, 0x4774, 0x9a,0xc3, 0xb4,0xe0,0x26,0x34,0x7f,0x64)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioVolumeMeter26 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioVolumeMeter26, 0xe48c5a3f, 0x93ef, 0x43bb, 0xa0,0x92, 0x2c,0x7c,0xeb,0x94,0x6f,0x27);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("e48c5a3f-93ef-43bb-a092-2c7ceb946f27") AudioVolumeMeter26;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioVolumeMeter26, 0xe48c5a3f, 0x93ef, 0x43bb, 0xa0,0x92, 0x2c,0x7c,0xeb,0x94,0x6f,0x27)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioVolumeMeter27 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioVolumeMeter27, 0xcac1105f, 0x619b, 0x4d04, 0x83,0x1a, 0x44,0xe1,0xcb,0xf1,0x2d,0x57);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("cac1105f-619b-4d04-831a-44e1cbf12d57") AudioVolumeMeter27;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioVolumeMeter27, 0xcac1105f, 0x619b, 0x4d04, 0x83,0x1a, 0x44,0xe1,0xcb,0xf1,0x2d,0x57)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioReverb20 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioReverb20, 0x6f6ea3a9, 0x2cf5, 0x41cf, 0x91,0xc1, 0x21,0x70,0xb1,0x54,0x00,0x63);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("6f6ea3a9-2cf5-41cf-91c1-2170b1540063") AudioReverb20;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioReverb20, 0x6f6ea3a9, 0x2cf5, 0x41cf, 0x91,0xc1, 0x21,0x70,0xb1,0x54,0x00,0x63)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioReverb21 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioReverb21, 0xf4769300, 0xb949, 0x4df9, 0xb3,0x33, 0x00,0xd3,0x39,0x32,0xe9,0xa6);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("f4769300-b949-4df9-b333-00d33932e9a6") AudioReverb21;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioReverb21, 0xf4769300, 0xb949, 0x4df9, 0xb3,0x33, 0x00,0xd3,0x39,0x32,0xe9,0xa6)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioReverb22 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioReverb22, 0x629cf0de, 0x3ecc, 0x41e7, 0x99,0x26, 0xf7,0xe4,0x3e,0xeb,0xec,0x51);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("629cf0de-3ecc-41e7-9926-f7e43eebec51") AudioReverb22;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioReverb22, 0x629cf0de, 0x3ecc, 0x41e7, 0x99,0x26, 0xf7,0xe4,0x3e,0xeb,0xec,0x51)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioReverb23 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioReverb23, 0x9cab402c, 0x1d37, 0x44b4, 0x88,0x6d, 0xfa,0x4f,0x36,0x17,0x0a,0x4c);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("9cab402c-1d37-44b4-886d-fa4f36170a4c") AudioReverb23;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioReverb23, 0x9cab402c, 0x1d37, 0x44b4, 0x88,0x6d, 0xfa,0x4f,0x36,0x17,0x0a,0x4c)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioReverb24 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioReverb24, 0x8bb7778b, 0x645b, 0x4475, 0x9a,0x73, 0x1d,0xe3,0x17,0x0b,0xd3,0xaf);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("8bb7778b-645b-4475-9a73-1de3170bd3af") AudioReverb24;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioReverb24, 0x8bb7778b, 0x645b, 0x4475, 0x9a,0x73, 0x1d,0xe3,0x17,0x0b,0xd3,0xaf)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioReverb25 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioReverb25, 0xd06df0d0, 0x8518, 0x441e, 0x82,0x2f, 0x54,0x51,0xd5,0xc5,0x95,0xb8);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("d06df0d0-8518-441e-822f-5451d5c595b8") AudioReverb25;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioReverb25, 0xd06df0d0, 0x8518, 0x441e, 0x82,0x2f, 0x54,0x51,0xd5,0xc5,0x95,0xb8)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioReverb26 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioReverb26, 0xcecec95a, 0xd894, 0x491a, 0xbe,0xe3, 0x5e,0x10,0x6f,0xb5,0x9f,0x2d);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("cecec95a-d894-491a-bee3-5e106fb59f2d") AudioReverb26;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioReverb26, 0xcecec95a, 0xd894, 0x491a, 0xbe,0xe3, 0x5e,0x10,0x6f,0xb5,0x9f,0x2d)
+#endif
+#endif
+
+/*****************************************************************************
+ * AudioReverb27 coclass
+ */
+
+DEFINE_GUID(CLSID_AudioReverb27, 0x6a93130e, 0x1d53, 0x41d1, 0xa9,0xcf, 0xe7,0x58,0x80,0x0b,0xb1,0x79);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("6a93130e-1d53-41d1-a9cf-e758800bb179") AudioReverb27;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(AudioReverb27, 0x6a93130e, 0x1d53, 0x41d1, 0xa9,0xcf, 0xe7,0x58,0x80,0x0b,0xb1,0x79)
+#endif
+#endif
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __xaudio2fx_h__ */
diff --git a/mingw-w64-headers/include/xaudio2fx.idl b/mingw-w64-headers/include/xaudio2fx.idl
new file mode 100644
index 0000000..224c660
--- /dev/null
+++ b/mingw-w64-headers/include/xaudio2fx.idl
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2015 Andrew Eikum
+ *
+ * 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
+ */
+
+import "unknwn.idl";
+
+[
+    uuid(c0c56f46-29b1-44e9-9939-a32ce86867e2)
+]
+coclass AudioVolumeMeter20 {
+    interface IUnknown;
+}
+
+[
+    uuid(c1e3f122-a2ea-442c-854f-20d98f8357a1)
+]
+coclass AudioVolumeMeter21 {
+    interface IUnknown;
+}
+
+[
+    uuid(f5ca7b34-8055-42c0-b836-216129eb7e30)
+]
+coclass AudioVolumeMeter22 {
+    interface IUnknown;
+}
+
+[
+    uuid(e180344b-ac83-4483-959e-18a5c56a5e19)
+]
+coclass AudioVolumeMeter23 {
+    interface IUnknown;
+}
+
+[
+    uuid(c7338b95-52b8-4542-aa79-42eb016c8c1c)
+]
+coclass AudioVolumeMeter24 {
+    interface IUnknown;
+}
+
+[
+    uuid(2139e6da-c341-4774-9ac3-b4e026347f64)
+]
+coclass AudioVolumeMeter25 {
+    interface IUnknown;
+}
+
+[
+    uuid(e48c5a3f-93ef-43bb-a092-2c7ceb946f27)
+]
+coclass AudioVolumeMeter26 {
+    interface IUnknown;
+}
+
+[
+    uuid(cac1105f-619b-4d04-831a-44e1cbf12d57)
+]
+coclass AudioVolumeMeter27 {
+    interface IUnknown;
+}
+
+[
+    uuid(6f6ea3a9-2cf5-41cf-91c1-2170b1540063)
+]
+coclass AudioReverb20 {
+    interface IUnknown;
+}
+
+[
+    uuid(f4769300-b949-4df9-b333-00d33932e9a6)
+]
+coclass AudioReverb21 {
+    interface IUnknown;
+}
+
+[
+    uuid(629cf0de-3ecc-41e7-9926-f7e43eebec51)
+]
+coclass AudioReverb22 {
+    interface IUnknown;
+}
+
+[
+    uuid(9cab402c-1d37-44b4-886d-fa4f36170a4c)
+]
+coclass AudioReverb23 {
+    interface IUnknown;
+}
+
+[
+    uuid(8bb7778b-645b-4475-9a73-1de3170bd3af)
+]
+coclass AudioReverb24 {
+    interface IUnknown;
+}
+
+[
+    uuid(d06df0d0-8518-441e-822f-5451d5c595b8)
+]
+coclass AudioReverb25 {
+    interface IUnknown;
+}
+
+[
+    uuid(cecec95a-d894-491a-bee3-5e106fb59f2d)
+]
+coclass AudioReverb26 {
+    interface IUnknown;
+}
+
+[
+    uuid(6a93130e-1d53-41d1-a9cf-e758800bb179)
+]
+coclass AudioReverb27 {
+    interface IUnknown;
+}
diff --git a/mingw-w64-headers/wine-import.sh b/mingw-w64-headers/wine-import.sh
index ec74e7d..e3b36ee 100755
--- a/mingw-w64-headers/wine-import.sh
+++ b/mingw-w64-headers/wine-import.sh
@@ -78,6 +78,7 @@
 	d3dx9shape.h \
 	d3dx9tex.h \
 	d3dx9xof.h \
+	devpkey.h \
 	dls1.h \
 	dls2.h \
 	dmerror.h \
@@ -118,7 +119,8 @@
 	vfwmsgs.h \
 	winhttp.h \
 	winineti.h \
-        xinput.h; do
+	xapofx.h \
+	xinput.h; do
     import_header $f include
 done
 
@@ -181,6 +183,9 @@
 	wmsbuffer \
 	wmsdkidl \
 	wpcapi \
+	xapo \
+	xaudio2 \
+	xaudio2fx \
 	xmllite; do
     import_idl $f.idl include
 done