diff --git a/WinDurango.sln b/WinDurango.sln
index 6263b85..b60055a 100644
--- a/WinDurango.sln
+++ b/WinDurango.sln
@@ -40,6 +40,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "dlls\common\commo
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XFrontPanelDisplay", "dlls\XFrontPanelDisplay\XFrontPanelDisplay.vcxproj", "{4A5072B4-8304-4CC4-88C1-CF875110FF47}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XAudio2_9", "dlls\XAudio2_9\XAudio2_9.vcxproj", "{0C02E6B1-4532-4194-8891-11DDC164C0A8}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM = Debug|ARM
@@ -508,6 +510,38 @@ Global
{4A5072B4-8304-4CC4-88C1-CF875110FF47}.ReleaseMD|x64.Build.0 = Release|x64
{4A5072B4-8304-4CC4-88C1-CF875110FF47}.ReleaseMD|x86.ActiveCfg = Release|Win32
{4A5072B4-8304-4CC4-88C1-CF875110FF47}.ReleaseMD|x86.Build.0 = Release|Win32
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Debug|ARM.ActiveCfg = Debug|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Debug|ARM.Build.0 = Debug|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Debug|ARM64.ActiveCfg = Debug|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Debug|ARM64.Build.0 = Debug|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Debug|x64.ActiveCfg = Debug|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Debug|x64.Build.0 = Debug|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Debug|x86.ActiveCfg = Debug|Win32
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Debug|x86.Build.0 = Debug|Win32
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.DebugMDd|ARM.ActiveCfg = Debug|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.DebugMDd|ARM.Build.0 = Debug|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.DebugMDd|ARM64.ActiveCfg = Debug|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.DebugMDd|ARM64.Build.0 = Debug|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.DebugMDd|x64.ActiveCfg = Debug|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.DebugMDd|x64.Build.0 = Debug|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.DebugMDd|x86.ActiveCfg = Debug|Win32
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.DebugMDd|x86.Build.0 = Debug|Win32
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Release|ARM.ActiveCfg = Release|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Release|ARM.Build.0 = Release|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Release|ARM64.ActiveCfg = Release|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Release|ARM64.Build.0 = Release|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Release|x64.ActiveCfg = Release|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Release|x64.Build.0 = Release|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Release|x86.ActiveCfg = Release|Win32
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.Release|x86.Build.0 = Release|Win32
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.ReleaseMD|ARM.ActiveCfg = Release|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.ReleaseMD|ARM.Build.0 = Release|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.ReleaseMD|ARM64.ActiveCfg = Release|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.ReleaseMD|ARM64.Build.0 = Release|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.ReleaseMD|x64.ActiveCfg = Release|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.ReleaseMD|x64.Build.0 = Release|x64
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.ReleaseMD|x86.ActiveCfg = Release|Win32
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8}.ReleaseMD|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -527,6 +561,7 @@ Global
{6FD783E4-EA7E-40E6-8782-7C0E90CE6D7A} = {BF759166-26A8-4B46-8423-8091158F2EA5}
{DA57F1D7-7922-44CB-9251-4D0F7E5E4096} = {BF759166-26A8-4B46-8423-8091158F2EA5}
{4A5072B4-8304-4CC4-88C1-CF875110FF47} = {BF759166-26A8-4B46-8423-8091158F2EA5}
+ {0C02E6B1-4532-4194-8891-11DDC164C0A8} = {BF759166-26A8-4B46-8423-8091158F2EA5}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {30EA489C-CFA4-4816-BE12-8BCE129039C5}
diff --git a/dlls/XAudio2_9/Exports.def b/dlls/XAudio2_9/Exports.def
new file mode 100644
index 0000000..d842705
--- /dev/null
+++ b/dlls/XAudio2_9/Exports.def
@@ -0,0 +1,8 @@
+LIBRARY XAudio2_9
+EXPORTS
+ CreateAudioReverb = CreateAudioReverb_X @1
+ CreateAudioVolumeMeter = CreateAudioVolumeMeter_X @2
+ CreateFX = CreateFX_X @3
+ CreateXAudio2Object = CreateXAudio2Object_X @4
+ X3DAudioCalculate = X3DAudioCalculate_X @5
+ X3DAudioInitialize = X3DAudioInitialize_X @6
diff --git a/dlls/XAudio2_9/XAudio2_9.cpp b/dlls/XAudio2_9/XAudio2_9.cpp
new file mode 100644
index 0000000..886801c
--- /dev/null
+++ b/dlls/XAudio2_9/XAudio2_9.cpp
@@ -0,0 +1,35 @@
+#include "pch.h"
+#include "xaudio2.h"
+#include "xaudio2fx.h"
+#include "x3daudio.h"
+#include "xapofx.h"
+
+HRESULT CreateAudioReverb_X(IUnknown **ppApo)
+{
+ return CreateAudioReverb(ppApo);
+}
+
+HRESULT CreateAudioVolumeMeter_X(IUnknown** ppApo)
+{
+ return CreateAudioVolumeMeter(ppApo);
+}
+
+HRESULT CreateFX_X(REFCLSID clsid, IUnknown** pEffect, const void* pInitDat, UINT32 InitDataByteSize)
+{
+ return CreateFX(clsid, pEffect, pInitDat, InitDataByteSize);
+}
+
+HRESULT CreateXAudio2Object_X(IXAudio2** ppXAudio2, UINT32 Flags, XAUDIO2_PROCESSOR XAudio2Processor)
+{
+ return XAudio2Create(ppXAudio2, Flags, XAudio2Processor);
+}
+
+void X3DAudioCalculate_X(const X3DAUDIO_HANDLE Instance, const X3DAUDIO_LISTENER* pListener, const X3DAUDIO_EMITTER* pEmitter, UINT32 Flags, X3DAUDIO_DSP_SETTINGS* pDSPSettings)
+{
+ return X3DAudioCalculate(Instance, pListener, pEmitter, Flags, pDSPSettings);
+}
+
+HRESULT X3DAudioInitialize_X(UINT32 SpeakerChannelMask, FLOAT32 SpeedOfSound, X3DAUDIO_HANDLE Instance)
+{
+ return X3DAudioInitialize(SpeakerChannelMask, SpeedOfSound, Instance);
+}
\ No newline at end of file
diff --git a/dlls/XAudio2_9/XAudio2_9.vcxproj b/dlls/XAudio2_9/XAudio2_9.vcxproj
new file mode 100644
index 0000000..e7cafe0
--- /dev/null
+++ b/dlls/XAudio2_9/XAudio2_9.vcxproj
@@ -0,0 +1,166 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {0c02e6b1-4532-4194-8891-11ddc164c0a8}
+ XAudio29
+ 10.0
+
+
+
+ DynamicLibrary
+ true
+ v143
+ Unicode
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ Unicode
+
+
+ DynamicLibrary
+ true
+ v143
+ Unicode
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Level3
+ true
+ WIN32;_DEBUG;XAUDIO29_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ Use
+ pch.h
+
+
+ Windows
+ true
+ false
+ Exports.def
+
+
+
+
+ Level3
+ true
+ true
+ true
+ WIN32;NDEBUG;XAUDIO29_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ Use
+ pch.h
+
+
+ Windows
+ true
+ true
+ true
+ false
+ Exports.def
+
+
+
+
+ Level3
+ true
+ _DEBUG;XAUDIO29_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ Use
+ pch.h
+
+
+ Windows
+ true
+ false
+ Exports.def
+ XAudio2.lib;%(AdditionalDependencies)
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;XAUDIO29_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ Use
+ pch.h
+
+
+ Windows
+ true
+ true
+ true
+ false
+ Exports.def
+
+
+
+
+
+
+
+
+
+ Create
+ Create
+ Create
+ Create
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dlls/XAudio2_9/XAudio2_9.vcxproj.filters b/dlls/XAudio2_9/XAudio2_9.vcxproj.filters
new file mode 100644
index 0000000..d9c6b19
--- /dev/null
+++ b/dlls/XAudio2_9/XAudio2_9.vcxproj.filters
@@ -0,0 +1,41 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Header Files
+
+
+ Header Files
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/dlls/XAudio2_9/dllmain.cpp b/dlls/XAudio2_9/dllmain.cpp
new file mode 100644
index 0000000..f266597
--- /dev/null
+++ b/dlls/XAudio2_9/dllmain.cpp
@@ -0,0 +1,19 @@
+// dllmain.cpp : Defines the entry point for the DLL application.
+#include "pch.h"
+
+BOOL APIENTRY DllMain( HMODULE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved
+ )
+{
+ switch (ul_reason_for_call)
+ {
+ case DLL_PROCESS_ATTACH:
+ case DLL_THREAD_ATTACH:
+ case DLL_THREAD_DETACH:
+ case DLL_PROCESS_DETACH:
+ break;
+ }
+ return TRUE;
+}
+
diff --git a/dlls/XAudio2_9/framework.h b/dlls/XAudio2_9/framework.h
new file mode 100644
index 0000000..54b83e9
--- /dev/null
+++ b/dlls/XAudio2_9/framework.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+// Windows Header Files
+#include
diff --git a/dlls/XAudio2_9/pch.cpp b/dlls/XAudio2_9/pch.cpp
new file mode 100644
index 0000000..64b7eef
--- /dev/null
+++ b/dlls/XAudio2_9/pch.cpp
@@ -0,0 +1,5 @@
+// pch.cpp: source file corresponding to the pre-compiled header
+
+#include "pch.h"
+
+// When you are using pre-compiled headers, this source file is necessary for compilation to succeed.
diff --git a/dlls/XAudio2_9/pch.h b/dlls/XAudio2_9/pch.h
new file mode 100644
index 0000000..885d5d6
--- /dev/null
+++ b/dlls/XAudio2_9/pch.h
@@ -0,0 +1,13 @@
+// pch.h: This is a precompiled header file.
+// Files listed below are compiled only once, improving build performance for future builds.
+// This also affects IntelliSense performance, including code completion and many code browsing features.
+// However, files listed here are ALL re-compiled if any one of them is updated between builds.
+// Do not add files here that you will be updating frequently as this negates the performance advantage.
+
+#ifndef PCH_H
+#define PCH_H
+
+// add headers that you want to pre-compile here
+#include "framework.h"
+
+#endif //PCH_H