diff --git a/Directory.Build.props b/Directory.Build.props
index dddf0c5..7390d72 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -14,7 +14,7 @@
true
$(MSBuildThisFileDirectory)NuGet.config
- 1.9.21
+ 1.9.22
true
diff --git a/src/Generator/Program.cs b/src/Generator/Program.cs
index a0606aa..74f4dcf 100644
--- a/src/Generator/Program.cs
+++ b/src/Generator/Program.cs
@@ -2527,6 +2527,11 @@ public static class Program
}
}
+ if (parameterName == "pReserved")
+ {
+ argumentBuilder.Append(" = null");
+ }
+
argumentsTypesBuilder.Append(parameterType);
argumentsNameBuilder.Append(parameterName);
@@ -3385,7 +3390,14 @@ public static class Program
private static bool IsEnum(string typeName)
{
- return s_visitedEnums.Contains(typeName);
+ switch (typeName)
+ {
+ case "Media.Audio.AUDIO_STREAM_CATEGORY":
+ return true;
+
+ default:
+ return s_visitedEnums.Contains(typeName);
+ }
}
private static bool IsStruct(string typeName)
diff --git a/src/Vortice.Win32.Media.Audio.XAudio2/Generated/IXAudio2.cs b/src/Vortice.Win32.Media.Audio.XAudio2/Generated/IXAudio2.cs
index 4a63a6e..a6156cd 100644
--- a/src/Vortice.Win32.Media.Audio.XAudio2/Generated/IXAudio2.cs
+++ b/src/Vortice.Win32.Media.Audio.XAudio2/Generated/IXAudio2.cs
@@ -137,12 +137,12 @@ public unsafe partial struct IXAudio2 : IXAudio2.Interface, INativeGuid
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(7)]
- public HResult CreateMasteringVoice(IXAudio2MasteringVoice** ppMasteringVoice, uint InputChannels, uint InputSampleRate, uint Flags, ushort* szDeviceId, EffectChain* pEffectChain, Media.Audio.AudioStreamCategory* StreamCategory)
+ public HResult CreateMasteringVoice(IXAudio2MasteringVoice** ppMasteringVoice, uint InputChannels, uint InputSampleRate, uint Flags, ushort* szDeviceId, EffectChain* pEffectChain, Media.Audio.AudioStreamCategory StreamCategory)
{
#if NET6_0_OR_GREATER
- return ((delegate* unmanaged)(lpVtbl[7]))((IXAudio2*)Unsafe.AsPointer(ref this), ppMasteringVoice, InputChannels, InputSampleRate, Flags, szDeviceId, pEffectChain, StreamCategory);
+ return ((delegate* unmanaged)(lpVtbl[7]))((IXAudio2*)Unsafe.AsPointer(ref this), ppMasteringVoice, InputChannels, InputSampleRate, Flags, szDeviceId, pEffectChain, StreamCategory);
#else
- return ((delegate* unmanaged[Stdcall])(lpVtbl[7]))((IXAudio2*)Unsafe.AsPointer(ref this), ppMasteringVoice, InputChannels, InputSampleRate, Flags, szDeviceId, pEffectChain, StreamCategory);
+ return ((delegate* unmanaged[Stdcall])(lpVtbl[7]))((IXAudio2*)Unsafe.AsPointer(ref this), ppMasteringVoice, InputChannels, InputSampleRate, Flags, szDeviceId, pEffectChain, StreamCategory);
#endif
}
@@ -197,7 +197,7 @@ public unsafe partial struct IXAudio2 : IXAudio2.Interface, INativeGuid
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(12)]
- public void SetDebugConfiguration(DebugConfiguration* pDebugConfiguration, void* pReserved)
+ public void SetDebugConfiguration(DebugConfiguration* pDebugConfiguration, void* pReserved = null)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged)(lpVtbl[12]))((IXAudio2*)Unsafe.AsPointer(ref this), pDebugConfiguration, pReserved);
@@ -221,7 +221,7 @@ public unsafe partial struct IXAudio2 : IXAudio2.Interface, INativeGuid
HResult CreateSubmixVoice(IXAudio2SubmixVoice** ppSubmixVoice, uint InputChannels, uint InputSampleRate, uint Flags, uint ProcessingStage, VoiceSends* pSendList, EffectChain* pEffectChain);
[VtblIndex(7)]
- HResult CreateMasteringVoice(IXAudio2MasteringVoice** ppMasteringVoice, uint InputChannels, uint InputSampleRate, uint Flags, ushort* szDeviceId, EffectChain* pEffectChain, Media.Audio.AudioStreamCategory* StreamCategory);
+ HResult CreateMasteringVoice(IXAudio2MasteringVoice** ppMasteringVoice, uint InputChannels, uint InputSampleRate, uint Flags, ushort* szDeviceId, EffectChain* pEffectChain, Media.Audio.AudioStreamCategory StreamCategory);
[VtblIndex(8)]
HResult StartEngine();
@@ -236,7 +236,7 @@ public unsafe partial struct IXAudio2 : IXAudio2.Interface, INativeGuid
void GetPerformanceData(PerformanceData* pPerfData);
[VtblIndex(12)]
- void SetDebugConfiguration(DebugConfiguration* pDebugConfiguration, void* pReserved);
+ void SetDebugConfiguration(DebugConfiguration* pDebugConfiguration, void* pReserved = null);
}
}
diff --git a/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/Apis.cs b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/Apis.cs
new file mode 100644
index 0000000..7adfe4e
--- /dev/null
+++ b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/Apis.cs
@@ -0,0 +1,23 @@
+// Copyright © Amer Koleci and Contributors.
+// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
+
+namespace Win32.Media.Audio.XAudio2;
+
+public static unsafe partial class Apis
+{
+ public static HResult X3DAudioInitialize(uint SpeakerChannelMask, out X3DAudioHandle Instance)
+ {
+ return X3DAudioInitialize(SpeakerChannelMask, X3DAUDIO_SPEED_OF_SOUND, out Instance);
+ }
+
+ public static void X3DAudioCalculate(in X3DAudioHandle Instance, X3DAudioListener* pListener, X3DAudioEmitter* pEmitter, X3DCalculateFlags Flags, X3DAudioDSPSettings* pDSPSettings)
+ {
+ X3DAudioCalculate(Instance, pListener, pEmitter, (uint)Flags, pDSPSettings);
+ }
+
+ [DllImport("xaudio2_9", ExactSpelling = true)]
+ public static extern HResult X3DAudioInitialize(uint SpeakerChannelMask, float SpeedOfSound, out X3DAudioHandle Instance);
+
+ [DllImport("xaudio2_9", ExactSpelling = true)]
+ public static extern void X3DAudioCalculate(in X3DAudioHandle Instance, X3DAudioListener* pListener, X3DAudioEmitter* pEmitter, uint Flags, X3DAudioDSPSettings* pDSPSettings);
+}
diff --git a/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioCone.cs b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioCone.cs
new file mode 100644
index 0000000..ecdc356
--- /dev/null
+++ b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioCone.cs
@@ -0,0 +1,26 @@
+// Copyright © Amer Koleci and Contributors.
+// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
+
+namespace Win32.Media.Audio.XAudio2;
+
+/// X3DAUDIO_CONE
+[StructLayout(LayoutKind.Sequential, Pack = 1)]
+public partial struct X3DAudioCone
+{
+ [NativeTypeName("FLOAT32")]
+ public float InnerAngle;
+
+ [NativeTypeName("FLOAT32")]
+ public float OuterAngle;
+
+ [NativeTypeName("FLOAT32")]
+ public float InnerVolume;
+
+ [NativeTypeName("FLOAT32")]
+ public float OuterVolume;
+
+ [NativeTypeName("FLOAT32")]
+ public float InnerLPF;
+}
+
+
diff --git a/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioDSPSettings.cs b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioDSPSettings.cs
new file mode 100644
index 0000000..aedeabe
--- /dev/null
+++ b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioDSPSettings.cs
@@ -0,0 +1,35 @@
+// Copyright © Amer Koleci and Contributors.
+// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
+
+namespace Win32.Media.Audio.XAudio2;
+
+/// X3DAUDIO_DSP_SETTINGS
+[StructLayout(LayoutKind.Sequential, Pack = 1)]
+public unsafe partial struct X3DAudioDSPSettings
+{
+ public float* pMatrixCoefficients;
+
+ public float* pDelayTimes;
+
+ public uint SrcChannelCount;
+
+ public uint DstChannelCount;
+
+ public float LPFDirectCoefficient;
+
+ public float LPFReverbCoefficient;
+
+ public float ReverbLevel;
+
+ public float DopplerFactor;
+
+ public float EmitterToListenerAngle;
+
+ public float EmitterToListenerDistance;
+
+ public float EmitterVelocityComponent;
+
+ public float ListenerVelocityComponent;
+}
+
+
diff --git a/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioDistanceCurve.cs b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioDistanceCurve.cs
new file mode 100644
index 0000000..3788b84
--- /dev/null
+++ b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioDistanceCurve.cs
@@ -0,0 +1,15 @@
+// Copyright © Amer Koleci and Contributors.
+// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
+
+namespace Win32.Media.Audio.XAudio2;
+
+/// X3DAUDIO_DISTANCE_CURVE
+[StructLayout(LayoutKind.Sequential, Pack = 1)]
+public unsafe partial struct X3DAudioDistanceCurve
+{
+ public X3DAudioDistanceCurvePoint* pPoints;
+
+ public uint PointCount;
+}
+
+
diff --git a/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioDistanceCurvePoint.cs b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioDistanceCurvePoint.cs
new file mode 100644
index 0000000..658a5e3
--- /dev/null
+++ b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioDistanceCurvePoint.cs
@@ -0,0 +1,15 @@
+// Copyright © Amer Koleci and Contributors.
+// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
+
+namespace Win32.Media.Audio.XAudio2;
+
+/// X3DAUDIO_DISTANCE_CURVE_POINT
+[StructLayout(LayoutKind.Sequential, Pack = 1)]
+public unsafe partial struct X3DAudioDistanceCurvePoint
+{
+ public float Distance;
+
+ public float DSPSetting;
+}
+
+
diff --git a/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioEmitter.cs b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioEmitter.cs
new file mode 100644
index 0000000..c55630c
--- /dev/null
+++ b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioEmitter.cs
@@ -0,0 +1,45 @@
+// Copyright © Amer Koleci and Contributors.
+// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
+
+namespace Win32.Media.Audio.XAudio2;
+
+/// X3DAUDIO_EMITTER
+[StructLayout(LayoutKind.Sequential, Pack = 1)]
+public unsafe partial struct X3DAudioEmitter
+{
+ public X3DAudioCone* pCone;
+
+ public Vector3 OrientFront;
+
+ public Vector3 OrientTop;
+
+ public Vector3 Position;
+
+ public Vector3 Velocity;
+
+ public float InnerRadius;
+
+ public float InnerRadiusAngle;
+
+ public uint ChannelCount;
+
+ public float ChannelRadius;
+
+ public float* pChannelAzimuths;
+
+ public X3DAudioDistanceCurve* pVolumeCurve;
+
+ public X3DAudioDistanceCurve* pLFECurve;
+
+ public X3DAudioDistanceCurve* pLPFDirectCurve;
+
+ public X3DAudioDistanceCurve* pLPFReverbCurve;
+
+ public X3DAudioDistanceCurve* pReverbCurve;
+
+ public float CurveDistanceScaler;
+
+ public float DopplerScaler;
+}
+
+
diff --git a/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioHandle.cs b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioHandle.cs
new file mode 100644
index 0000000..d575ffa
--- /dev/null
+++ b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioHandle.cs
@@ -0,0 +1,13 @@
+// Copyright © Amer Koleci and Contributors.
+// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
+
+using static Win32.Media.Audio.XAudio2.Apis;
+
+namespace Win32.Media.Audio.XAudio2;
+
+[StructLayout(LayoutKind.Explicit, Size = (int)X3DAUDIO_HANDLE_BYTESIZE)]
+public readonly struct X3DAudioHandle
+{
+}
+
+
diff --git a/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioListener.cs b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioListener.cs
new file mode 100644
index 0000000..1c76724
--- /dev/null
+++ b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DAudioListener.cs
@@ -0,0 +1,21 @@
+// Copyright © Amer Koleci and Contributors.
+// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
+
+namespace Win32.Media.Audio.XAudio2;
+
+/// X3DAUDIO_LISTENER
+[StructLayout(LayoutKind.Sequential, Pack = 1)]
+public struct X3DAudioListener
+{
+ public Vector3 OrientFront;
+
+ public Vector3 OrientTop;
+
+ public Vector3 Position;
+
+ public Vector3 Velocity;
+
+ public unsafe X3DAudioCone* pCone;
+}
+
+
diff --git a/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DCalculateFlags.cs b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DCalculateFlags.cs
new file mode 100644
index 0000000..ea712d4
--- /dev/null
+++ b/src/Vortice.Win32.Media.Audio.XAudio2/X3DAudio/X3DCalculateFlags.cs
@@ -0,0 +1,32 @@
+// Copyright © Amer Koleci and Contributors.
+// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
+
+using static Win32.Media.Audio.XAudio2.Apis;
+
+namespace Win32.Media.Audio.XAudio2;
+
+[Flags]
+public enum X3DCalculateFlags : uint
+{
+ None = 0,
+ /// X3DAUDIO_CALCULATE_MATRIX
+ Matrix = X3DAUDIO_CALCULATE_MATRIX,
+ /// X3DAUDIO_CALCULATE_DELAY
+ Delay = X3DAUDIO_CALCULATE_DELAY,
+ /// X3DAUDIO_CALCULATE_LPF_DIRECT
+ LpfDirect = X3DAUDIO_CALCULATE_LPF_DIRECT,
+ /// X3DAUDIO_CALCULATE_LPF_REVERB
+ LpfReverb = X3DAUDIO_CALCULATE_LPF_REVERB,
+ /// X3DAUDIO_CALCULATE_REVERB
+ Reverb = X3DAUDIO_CALCULATE_REVERB,
+ /// X3DAUDIO_CALCULATE_DOPPLER
+ Doppler = X3DAUDIO_CALCULATE_DOPPLER,
+ /// X3DAUDIO_CALCULATE_EMITTER_ANGLE
+ EmitterAngle = X3DAUDIO_CALCULATE_EMITTER_ANGLE,
+ /// X3DAUDIO_CALCULATE_ZEROCENTER
+ ZeroCenter = X3DAUDIO_CALCULATE_ZEROCENTER,
+ /// X3DAUDIO_CALCULATE_REDIRECT_TO_LFE
+ RedirectToLfe = X3DAUDIO_CALCULATE_REDIRECT_TO_LFE,
+}
+
+
diff --git a/src/Vortice.Win32.Media.Audio.XAudio2/XAudio2.xml b/src/Vortice.Win32.Media.Audio.XAudio2/XAudio2.xml
index 2a90c45..c8b0cea 100644
--- a/src/Vortice.Win32.Media.Audio.XAudio2/XAudio2.xml
+++ b/src/Vortice.Win32.Media.Audio.XAudio2/XAudio2.xml
@@ -418,7 +418,6 @@ See Remarks for more information on volume levels.
Changes global debug logging options for XAudio2.
Microsoft Docs:
Pointer to a XAUDIO2_DEBUG_CONFIGURATION structure that contains the new debug configuration.
- This parameter is reserved and must be NULL.
diff --git a/src/Vortice.Win32/Media/Audio/Speakers.cs b/src/Vortice.Win32/Media/Audio/Speakers.cs
new file mode 100644
index 0000000..13aee7b
--- /dev/null
+++ b/src/Vortice.Win32/Media/Audio/Speakers.cs
@@ -0,0 +1,85 @@
+// Copyright © Amer Koleci and Contributors.
+// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
+
+namespace Win32.Media.Audio;
+
+/// SPEAKER_FLAGS
+/// SPEAKER_FLAGS
+[Flags]
+public enum Speakers : uint
+{
+ ///
+ /// None value.
+ ///
+ None = 0,
+ /// SPEAKER_FRONT_LEFT
+ FrontLeft = 0x1,
+ /// SPEAKER_FRONT_RIGHT
+ FrontRight = 0x2,
+ /// SPEAKER_FRONT_CENTER
+ FrontCenter = 0x4,
+ /// SPEAKER_LOW_FREQUENCY
+ LowFrequency = 0x4,
+ /// SPEAKER_BACK_LEFT
+ BackLeft = 0x10,
+ /// SPEAKER_BACK_RIGHT
+ BackRight = 0x20,
+ /// SPEAKER_FRONT_LEFT_OF_CENTER
+ FrontLeftOfCenter = 0x40,
+ /// SPEAKER_FRONT_RIGHT_OF_CENTER
+ FrontRightOfCenter = 0x80,
+ /// SPEAKER_BACK_CENTER
+ BackCenter = 0x100,
+ /// SPEAKER_SIDE_LEFT
+ SideLeft = 0x200,
+ /// SPEAKER_SIDE_RIGHT
+ SideRight = 0x400,
+ /// SPEAKER_TOP_CENTER
+ TopCenter = 0x800,
+ /// SPEAKER_TOP_FRONT_LEFT
+ TopFrontLeft = 0x1000,
+ /// SPEAKER_TOP_FRONT_CENTER
+ TopFrontCenter = 0x2000,
+ /// SPEAKER_TOP_FRONT_RIGHT
+ TopFrontRight = 0x4000,
+ /// SPEAKER_TOP_BACK_LEFT
+ TopBackLeft = 0x8000,
+ /// SPEAKER_TOP_BACK_CENTER
+ TopBackCenter = 0x10000,
+ /// SPEAKER_TOP_BACK_RIGHT
+ TopBackRight = 0x20000,
+ /// SPEAKER_RESERVED
+ Reserved = 0x7FFC0000,
+ /// SPEAKER_ALL
+ All = 0x80000000,
+
+ [NativeTypeName("#define SPEAKER_MONO SPEAKER_FRONT_CENTER")]
+ Mono = FrontCenter,
+
+ [NativeTypeName("#define SPEAKER_STEREO (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT)")]
+ Stereo = (FrontLeft | FrontRight),
+
+ [NativeTypeName("#define SPEAKER_2POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_LOW_FREQUENCY)")]
+ TwoPointOne = (0x00000001 | 0x00000002 | 0x00000008),
+
+ [NativeTypeName("#define SPEAKER_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER)")]
+ Surround = (0x00000001 | 0x00000002 | 0x00000004 | 0x00000100),
+
+ [NativeTypeName("#define SPEAKER_QUAD (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)")]
+ Quad = (0x00000001 | 0x00000002 | 0x00000010 | 0x00000020),
+
+ [NativeTypeName("#define SPEAKER_4POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)")]
+ FourPointOne = (0x00000001 | 0x00000002 | 0x00000008 | 0x00000010 | 0x00000020),
+
+ [NativeTypeName("#define SPEAKER_5POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)")]
+ FivePointOne = (0x00000001 | 0x00000002 | 0x00000004 | 0x00000008 | 0x00000010 | 0x00000020),
+
+ [NativeTypeName("#define SPEAKER_7POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER)")]
+ SevenPointOne = (0x00000001 | 0x00000002 | 0x00000004 | 0x00000008 | 0x00000010 | 0x00000020 | 0x00000040 | 0x00000080),
+
+ [NativeTypeName("#define SPEAKER_5POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT)")]
+ FivePointOneSurround = (0x00000001 | 0x00000002 | 0x00000004 | 0x00000008 | 0x00000200 | 0x00000400),
+
+ [NativeTypeName("#define SPEAKER_7POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT)")]
+ SevenPointOneSurround = (0x00000001 | 0x00000002 | 0x00000004 | 0x00000008 | 0x00000010 | 0x00000020 | 0x00000200 | 0x00000400),
+}
diff --git a/src/samples/01-ClearScreen/Program.cs b/src/samples/01-ClearScreen/Program.cs
index 72b52d9..687f769 100644
--- a/src/samples/01-ClearScreen/Program.cs
+++ b/src/samples/01-ClearScreen/Program.cs
@@ -12,6 +12,7 @@ using Win32.Graphics.Dxgi;
using Win32.Graphics.Dxgi.Common;
using Win32.Graphics.Imaging;
using Win32.Graphics.Imaging.D2D;
+using Win32.Media.Audio.XAudio2;
using static Win32.Apis;
using static Win32.Graphics.Direct2D.Apis;
using static Win32.Graphics.Direct3D.Dxc.Apis;
@@ -19,6 +20,8 @@ using static Win32.Graphics.Direct3D11.Apis;
using static Win32.Graphics.DirectWrite.Apis;
using static Win32.Graphics.Dxgi.Apis;
using static Win32.Graphics.Imaging.D2D.Apis;
+using static Win32.Media.Audio.XAudio2.Apis;
+
using DWriteFactoryType = Win32.Graphics.DirectWrite.FactoryType;
using FactoryType = Win32.Graphics.Direct2D.FactoryType;
using FeatureLevel = Win32.Graphics.Direct3D.FeatureLevel;
@@ -110,6 +113,8 @@ public static unsafe class Program
public static void Main()
{
+ ThrowIfFailed(X3DAudioInitialize(0u, X3DAUDIO_SPEED_OF_SOUND, out X3DAudioHandle handle));
+
TestDxc();
TestWic();
TestD2D1AndDWrite();