Audio: Welcome XAudio2 support.

This commit is contained in:
Amer Koleci
2023-04-06 14:40:17 +02:00
parent 84ace9b66b
commit 8bc4462157
32 changed files with 7950 additions and 4 deletions

View File

@@ -14,7 +14,7 @@
<EnableTrimAnalyzer>true</EnableTrimAnalyzer> <EnableTrimAnalyzer>true</EnableTrimAnalyzer>
<RestoreConfigFile>$(MSBuildThisFileDirectory)NuGet.config</RestoreConfigFile> <RestoreConfigFile>$(MSBuildThisFileDirectory)NuGet.config</RestoreConfigFile>
<VersionPrefix>1.9.20</VersionPrefix> <VersionPrefix>1.9.21</VersionPrefix>
<VersionSuffix Condition="'$(VersionSuffix)' == ''"></VersionSuffix> <VersionSuffix Condition="'$(VersionSuffix)' == ''"></VersionSuffix>
<GenerateDocumentationFile>true</GenerateDocumentationFile> <GenerateDocumentationFile>true</GenerateDocumentationFile>

View File

@@ -44,6 +44,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vortice.Win32.Graphics.Dire
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vortice.Win32.Graphics.DirectComposition", "src\Vortice.Win32.Graphics.DirectComposition\Vortice.Win32.Graphics.DirectComposition.csproj", "{F7EBB80F-26EA-4C64-9454-C087BBC43549}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vortice.Win32.Graphics.DirectComposition", "src\Vortice.Win32.Graphics.DirectComposition\Vortice.Win32.Graphics.DirectComposition.csproj", "{F7EBB80F-26EA-4C64-9454-C087BBC43549}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vortice.Win32.Media.Audio.XAudio2", "src\Vortice.Win32.Media.Audio.XAudio2\Vortice.Win32.Media.Audio.XAudio2.csproj", "{6458F6C9-12ED-407E-A91D-9F155362E8E9}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@@ -102,6 +104,10 @@ Global
{F7EBB80F-26EA-4C64-9454-C087BBC43549}.Debug|Any CPU.Build.0 = Debug|Any CPU {F7EBB80F-26EA-4C64-9454-C087BBC43549}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F7EBB80F-26EA-4C64-9454-C087BBC43549}.Release|Any CPU.ActiveCfg = Release|Any CPU {F7EBB80F-26EA-4C64-9454-C087BBC43549}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F7EBB80F-26EA-4C64-9454-C087BBC43549}.Release|Any CPU.Build.0 = Release|Any CPU {F7EBB80F-26EA-4C64-9454-C087BBC43549}.Release|Any CPU.Build.0 = Release|Any CPU
{6458F6C9-12ED-407E-A91D-9F155362E8E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6458F6C9-12ED-407E-A91D-9F155362E8E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6458F6C9-12ED-407E-A91D-9F155362E8E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6458F6C9-12ED-407E-A91D-9F155362E8E9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@@ -31,7 +31,7 @@ public static class Program
// Media // Media
//"Media.Audio.json", //"Media.Audio.json",
//"Media.Audio.XAudio2.json", "Media.Audio.XAudio2.json",
}; };
private static readonly Dictionary<string, string> s_csNameMappings = new() private static readonly Dictionary<string, string> s_csNameMappings = new()
@@ -127,6 +127,10 @@ public static class Program
{ "Graphics.Direct3D11.D3D11_VIEWPORT", "Viewport" }, { "Graphics.Direct3D11.D3D11_VIEWPORT", "Viewport" },
{ "Graphics.Direct3D12.D3D12_VIEWPORT", "Viewport" }, { "Graphics.Direct3D12.D3D12_VIEWPORT", "Viewport" },
// Media
{ "Media.Audio.AUDIO_STREAM_CATEGORY", "Media.Audio.AudioStreamCategory" },
{ "Media.Audio.WAVEFORMATEX", "Media.Audio.WaveFormatEx" },
// TODO: Understand those -> // TODO: Understand those ->
{ "Foundation.RECT", "Rect" }, { "Foundation.RECT", "Rect" },
{ "Foundation.RECTL", "Rect" }, { "Foundation.RECTL", "Rect" },
@@ -216,6 +220,7 @@ public static class Program
{ "SAT", "Saturate" }, { "SAT", "Saturate" },
{ "INV", "Inverse" }, { "INV", "Inverse" },
{ "REV", "Reverse" }, { "REV", "Reverse" },
{ "XAUDIO2FX", "FX" },
}; };
private static readonly HashSet<string> s_partRenamesSet = new(StringComparer.OrdinalIgnoreCase) private static readonly HashSet<string> s_partRenamesSet = new(StringComparer.OrdinalIgnoreCase)
@@ -733,6 +738,22 @@ public static class Program
"ShaderCacheClear", "ShaderCacheClear",
"VideoExtensionCommand", "VideoExtensionCommand",
"VideoMotionEstimator", "VideoMotionEstimator",
"LockForProcess",
"FxMasteringLimiter",
"FxReverb",
"FxEcho",
"InitData",
"VolumeMeter",
"HrtfDirectivityType",
"HrtfEnvironment",
"HrtfDistanceDecayType",
"HrtfPosition",
"HrtfOrientation",
"HrtfDirectivity",
"HrtfDirectivityCardioid",
"HrtfDirectivityCone",
"HrtfDistanceDecay",
"HrtfApoInit",
}; };
private static readonly HashSet<string> s_preserveCaps = new(StringComparer.OrdinalIgnoreCase) private static readonly HashSet<string> s_preserveCaps = new(StringComparer.OrdinalIgnoreCase)
@@ -768,6 +789,9 @@ public static class Program
"HDR", "HDR",
"DC", "DC",
"XNA", "XNA",
"XAPO",
"FXEQ",
"I3DL2",
}; };
private static readonly Dictionary<string, string> s_knownTypesPrefixes = new() private static readonly Dictionary<string, string> s_knownTypesPrefixes = new()
@@ -874,6 +898,10 @@ public static class Program
{ "D2D1_BUFFER_PRECISION_16BPC_UNORM", "Precision16BitUnorm" }, { "D2D1_BUFFER_PRECISION_16BPC_UNORM", "Precision16BitUnorm" },
{ "D2D1_BUFFER_PRECISION_16BPC_FLOAT", "Precision16BitFloat" }, { "D2D1_BUFFER_PRECISION_16BPC_FLOAT", "Precision16BitFloat" },
{ "D2D1_BUFFER_PRECISION_32BPC_FLOAT", "Precision32BitFloat" }, { "D2D1_BUFFER_PRECISION_32BPC_FLOAT", "Precision32BitFloat" },
// XAudio2
{ "XAPO_BUFFER_SILENT", "Silent" },
{ "XAPO_BUFFER_VALID", "Valid" },
}; };
private static readonly Dictionary<string, bool> s_generatedEnums = new() private static readonly Dictionary<string, bool> s_generatedEnums = new()
@@ -910,6 +938,7 @@ public static class Program
"D3DCOMPILER", "D3DCOMPILER",
"DCOMPOSITION", "DCOMPOSITION",
"D3DADAPTER", "D3DADAPTER",
"XAUDIO2",
}; };
private static readonly HashSet<string> s_ignoredParts = new(StringComparer.OrdinalIgnoreCase) private static readonly HashSet<string> s_ignoredParts = new(StringComparer.OrdinalIgnoreCase)
@@ -1022,6 +1051,7 @@ public static class Program
{ "D3D12_RENDER_TARGET_BLEND_DESC::RenderTargetWriteMask", "D3D12_COLOR_WRITE_ENABLE" }, { "D3D12_RENDER_TARGET_BLEND_DESC::RenderTargetWriteMask", "D3D12_COLOR_WRITE_ENABLE" },
// Dxc // Dxc
{ "DxcBuffer::Encoding", "DXC_CP" },
{ "DxcShaderHash::Flags", "DXC_HASHFLAG" }, { "DxcShaderHash::Flags", "DXC_HASHFLAG" },
}; };
@@ -1115,6 +1145,7 @@ public static class Program
string dxcPath = Path.Combine(new DirectoryInfo(repoRoot).Parent.FullName, "Vortice.Win32.Graphics.Direct3D.Dxc"); string dxcPath = Path.Combine(new DirectoryInfo(repoRoot).Parent.FullName, "Vortice.Win32.Graphics.Direct3D.Dxc");
string fxcPath = Path.Combine(new DirectoryInfo(repoRoot).Parent.FullName, "Vortice.Win32.Graphics.Direct3D.Fxc"); string fxcPath = Path.Combine(new DirectoryInfo(repoRoot).Parent.FullName, "Vortice.Win32.Graphics.Direct3D.Fxc");
string directCompositionPath = Path.Combine(new DirectoryInfo(repoRoot).Parent.FullName, "Vortice.Win32.Graphics.DirectComposition"); string directCompositionPath = Path.Combine(new DirectoryInfo(repoRoot).Parent.FullName, "Vortice.Win32.Graphics.DirectComposition");
string XAudio2Path = Path.Combine(new DirectoryInfo(repoRoot).Parent.FullName, "Vortice.Win32.Media.Audio.XAudio2");
// Generate docs // Generate docs
//DocGenerator.Generate(new[] { "DXGI" }, Path.Combine(repoRoot, "Generated", "Graphics", "Dxgi.xml")); //DocGenerator.Generate(new[] { "DXGI" }, Path.Combine(repoRoot, "Generated", "Graphics", "Dxgi.xml"));
@@ -1127,6 +1158,7 @@ public static class Program
//DocGenerator.Generate(new[] { "D3D11" }, Path.Combine(d3d11Path, "Direct3D11.xml")); //DocGenerator.Generate(new[] { "D3D11" }, Path.Combine(d3d11Path, "Direct3D11.xml"));
//DocGenerator.Generate(new[] { "D3D12" }, Path.Combine(d3d12Path, "Direct3D12.xml")); //DocGenerator.Generate(new[] { "D3D12" }, Path.Combine(d3d12Path, "Direct3D12.xml"));
//DocGenerator.Generate(new[] { "DComposition" }, Path.Combine(directCompositionPath, "DirectComposition.xml")); //DocGenerator.Generate(new[] { "DComposition" }, Path.Combine(directCompositionPath, "DirectComposition.xml"));
//DocGenerator.Generate(new[] { "XAudio2" }, Path.Combine(XAudio2Path, "XAudio2.xml"));
foreach (string jsonFile in jsons) foreach (string jsonFile in jsons)
{ {
@@ -1199,6 +1231,11 @@ public static class Program
outputPath = d3d9Path; outputPath = d3d9Path;
useSubFolders = false; useSubFolders = false;
} }
else if (jsonFile == "Media.Audio.XAudio2.json")
{
outputPath = XAudio2Path;
useSubFolders = false;
}
outputPath = Path.Combine(outputPath, "Generated"); outputPath = Path.Combine(outputPath, "Generated");
@@ -1268,6 +1305,10 @@ public static class Program
{ {
docFile = $"../Vortice.Win32/Generated/Graphics/Direct3D"; docFile = $"../Vortice.Win32/Generated/Graphics/Direct3D";
} }
else if (jsonFile == "Media.Audio.XAudio2.json")
{
docFile = "XAudio2";
}
string apiName = ns; string apiName = ns;
string apiFolder; string apiFolder;
@@ -1809,7 +1850,8 @@ public static class Program
&& !enumType.Name.StartsWith("D3D11_") && !enumType.Name.StartsWith("D3D11_")
&& !enumType.Name.StartsWith("D3D12_") && !enumType.Name.StartsWith("D3D12_")
&& !enumType.Name.StartsWith("D3DCOMPILER_") && !enumType.Name.StartsWith("D3DCOMPILER_")
&& !enumType.Name.StartsWith("D3DCOMPILE")) && !enumType.Name.StartsWith("D3DCOMPILE")
&& !enumType.Name.StartsWith("XAUDIO2_"))
{ {
csTypeName = enumType.Name.Substring(3); csTypeName = enumType.Name.Substring(3);
skipPrettify = true; skipPrettify = true;

File diff suppressed because it is too large Load Diff

View File

@@ -24,7 +24,7 @@ public partial struct DxcBuffer
public nuint Size; public nuint Size;
public uint Encoding; public DxcCp Encoding;
} }
/// <unmanaged>DxcDefine</unmanaged> /// <unmanaged>DxcDefine</unmanaged>

View File

@@ -0,0 +1,184 @@
// 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 void ReverbConvertI3DL2ToNative(
[NativeTypeName("const XAUDIO2FX_REVERB_I3DL2_PARAMETERS *")] FXReverbI3DL2Parameters* pI3DL2,
[NativeTypeName("XAUDIO2FX_REVERB_PARAMETERS *")] FXReverbParameters* pNative,
[Optional, DefaultParameterValue(1)] Bool32 sevenDotOneReverb)
{
float reflectionsDelay;
float reverbDelay;
if (sevenDotOneReverb != 0)
{
pNative->RearDelay = 20;
}
else
{
pNative->RearDelay = 5;
}
pNative->SideDelay = 5;
pNative->PositionLeft = 6;
pNative->PositionRight = 6;
pNative->PositionMatrixLeft = 27;
pNative->PositionMatrixRight = 27;
pNative->RoomSize = 100.0f;
pNative->LowEQCutoff = 4;
pNative->HighEQCutoff = 6;
pNative->RoomFilterMain = (float)pI3DL2->Room / 100.0f;
pNative->RoomFilterHF = (float)pI3DL2->RoomHF / 100.0f;
if (pI3DL2->DecayHFRatio >= 1.0f)
{
int index = (int)(-4.0 * Math.Log10(pI3DL2->DecayHFRatio));
if (index < -8)
{
index = -8;
}
pNative->LowEQGain = (byte)((index < 0) ? index + 8 : 8);
pNative->HighEQGain = 8;
pNative->DecayTime = pI3DL2->DecayTime * pI3DL2->DecayHFRatio;
}
else
{
int index = (int)(4.0 * Math.Log10(pI3DL2->DecayHFRatio));
if (index < -8)
{
index = -8;
}
pNative->LowEQGain = 8;
pNative->HighEQGain = (byte)((index < 0) ? index + 8 : 8);
pNative->DecayTime = pI3DL2->DecayTime;
}
reflectionsDelay = pI3DL2->ReflectionsDelay * 1000.0f;
if (reflectionsDelay >= 300)
{
reflectionsDelay = (float)(300 - 1);
}
else if (reflectionsDelay <= 1)
{
reflectionsDelay = 1;
}
pNative->ReflectionsDelay = (uint)reflectionsDelay;
reverbDelay = pI3DL2->ReverbDelay * 1000.0f;
if (reverbDelay >= 85)
{
reverbDelay = (float)(85 - 1);
}
pNative->ReverbDelay = (byte)reverbDelay;
pNative->ReflectionsGain = pI3DL2->Reflections / 100.0f;
pNative->ReverbGain = pI3DL2->Reverb / 100.0f;
pNative->EarlyDiffusion = (byte)(15.0f * pI3DL2->Diffusion / 100.0f);
pNative->LateDiffusion = pNative->EarlyDiffusion;
pNative->Density = pI3DL2->Density;
pNative->RoomFilterFreq = pI3DL2->HFReference;
pNative->WetDryMix = pI3DL2->WetDryMix;
pNative->DisableLateField = 0;
}
public static float XAudio2DecibelsToAmplitudeRatio(float Decibels)
{
#if NETSTANDARD2_1 || NET6_0_OR_GREATER
return MathF.Pow(10.0f, Decibels / 20.0f);
#else
return (float)Math.Pow(10.0f, Decibels / 20.0f);
#endif
}
public static float XAudio2AmplitudeRatioToDecibels(float Volume)
{
if (Volume == 0)
{
return -3.402823466e+38f;
}
#if NETSTANDARD2_1 || NET6_0_OR_GREATER
return 20.0f * MathF.Log10(Volume);
#else
return 20.0f * (float)Math.Log10(Volume);
#endif
}
public static float XAudio2SemitonesToFrequencyRatio(float Semitones)
{
#if NETSTANDARD2_1 || NET6_0_OR_GREATER
return MathF.Pow(2.0f, Semitones / 12.0f);
#else
return (float)Math.Pow(2.0f, Semitones / 12.0f);
#endif
}
public static float XAudio2FrequencyRatioToSemitones(float FrequencyRatio)
{
#if NETSTANDARD2_1 || NET6_0_OR_GREATER
return 39.86313713864835f * MathF.Log10(FrequencyRatio);
#else
return 39.86313713864835f * (float)Math.Log10(FrequencyRatio);
#endif
}
public static float XAudio2CutoffFrequencyToRadians(float CutoffFrequency, [NativeTypeName("UINT32")] uint SampleRate)
{
if ((uint)(CutoffFrequency * 6.0f) >= SampleRate)
{
return 1.0f;
}
#if NETSTANDARD2_1 || NET6_0_OR_GREATER
return 2.0f * MathF.Sin((float)3.14159265358979323846 * CutoffFrequency / SampleRate);
#else
return 2.0f * (float)Math.Sin(3.14159265358979323846 * CutoffFrequency / SampleRate);
#endif
}
public static float XAudio2RadiansToCutoffFrequency(float Radians, float SampleRate)
{
#if NETSTANDARD2_1 || NET6_0_OR_GREATER
return SampleRate * MathF.Asin(Radians / 2.0f) / (float)3.14159265358979323846;
#else
return SampleRate * (float)Math.Asin(Radians / 2.0f) / (float)3.14159265358979323846;
#endif
}
public static float XAudio2CutoffFrequencyToOnePoleCoefficient(float CutoffFrequency, [NativeTypeName("UINT32")] uint SampleRate)
{
if ((uint)CutoffFrequency >= SampleRate)
{
return 1.0f;
}
#if NETSTANDARD2_1 || NET6_0_OR_GREATER
return (1.0f - MathF.Pow(1.0f - 2.0f * CutoffFrequency / SampleRate, 2.0f));
#else
return (1.0f - (float)Math.Pow(1.0f - 2.0f * CutoffFrequency / SampleRate, 2.0f));
#endif
}
/// <include file='XAudio2.xml' path='doc/member[@name="XAudio2Create"]/*' />
[DllImport("XAudio2_9", ExactSpelling = true)]
public static extern HResult XAudio2Create([NativeTypeName("IXAudio2 **")] IXAudio2** ppXAudio2, [NativeTypeName("UINT32")] uint Flags = 0, [NativeTypeName("XAUDIO2_PROCESSOR")] uint XAudio2Processor = XAUDIO2_DEFAULT_PROCESSOR);
/// <include file='XAudio2.xml' path='doc/member[@name="XAudio2CreateVolumeMeter"]/*' />
public static HResult XAudio2CreateVolumeMeter([NativeTypeName("IUnknown **")] IUnknown** ppApo)
{
return CreateAudioVolumeMeter(ppApo);
}
/// <include file='XAudio2.xml' path='doc/member[@name="XAudio2CreateReverb"]/*' />
public static HResult XAudio2CreateReverb([NativeTypeName("IUnknown **")] IUnknown** ppApo)
{
return CreateAudioReverb(ppApo);
}
}

View File

@@ -0,0 +1,242 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPO"]/*' />
/// <unmanaged>IXAPO</unmanaged>
[Guid("a410b984-9839-4819-a0be-2856ae6b3adb")]
[NativeTypeName("struct IXAPO : IUnknown")]
[NativeInheritance("IUnknown")]
public unsafe partial struct IXAPO : IXAPO.Interface, INativeGuid
{
public static ref readonly Guid IID_IXAPO
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
ReadOnlySpan<byte> data = new byte[] {
0x84, 0xB9, 0x10, 0xA4,
0x39, 0x98,
0x19, 0x48,
0xA0,
0xBE,
0x28,
0x56,
0xAE,
0x6B,
0x3A,
0xDB
};
Debug.Assert(data.Length == Unsafe.SizeOf<Guid>());
return ref Unsafe.As<byte, Guid>(ref MemoryMarshal.GetReference(data));
}
}
#if NET6_0_OR_GREATER
static Guid* INativeGuid.NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IID_IXAPO));
#else
public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IID_IXAPO));
#endif
public void** lpVtbl;
/// <inheritdoc cref="IUnknown.QueryInterface" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(0)]
public HResult QueryInterface([NativeTypeName("const IID &")] Guid* riid, void** ppvObject)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPO*, Guid*, void**, int>)(lpVtbl[0]))((IXAPO*)Unsafe.AsPointer(ref this), riid, ppvObject);
#else
return ((delegate* unmanaged[Stdcall]<IXAPO*, Guid*, void**, int>)(lpVtbl[0]))((IXAPO*)Unsafe.AsPointer(ref this), riid, ppvObject);
#endif
}
/// <inheritdoc cref="IUnknown.AddRef" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(1)]
[return: NativeTypeName("ULONG")]
public uint AddRef()
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPO*, uint>)(lpVtbl[1]))((IXAPO*)Unsafe.AsPointer(ref this));
#else
return ((delegate* unmanaged[Stdcall]<IXAPO*, uint>)(lpVtbl[1]))((IXAPO*)Unsafe.AsPointer(ref this));
#endif
}
/// <inheritdoc cref="IUnknown.Release" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(2)]
[return: NativeTypeName("ULONG")]
public uint Release()
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPO*, uint>)(lpVtbl[2]))((IXAPO*)Unsafe.AsPointer(ref this));
#else
return ((delegate* unmanaged[Stdcall]<IXAPO*, uint>)(lpVtbl[2]))((IXAPO*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPO::GetRegistrationProperties"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(3)]
public HResult GetRegistrationProperties(XAPORegistrationProperties** ppRegistrationProperties)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPO*, XAPORegistrationProperties**, int>)(lpVtbl[3]))((IXAPO*)Unsafe.AsPointer(ref this), ppRegistrationProperties);
#else
return ((delegate* unmanaged[Stdcall]<IXAPO*, XAPORegistrationProperties**, int>)(lpVtbl[3]))((IXAPO*)Unsafe.AsPointer(ref this), ppRegistrationProperties);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPO::IsInputFormatSupported"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(4)]
public HResult IsInputFormatSupported(Media.Audio.WaveFormatEx* pOutputFormat, Media.Audio.WaveFormatEx* pRequestedInputFormat, Media.Audio.WaveFormatEx** ppSupportedInputFormat)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPO*, Media.Audio.WaveFormatEx*, Media.Audio.WaveFormatEx*, Media.Audio.WaveFormatEx**, int>)(lpVtbl[4]))((IXAPO*)Unsafe.AsPointer(ref this), pOutputFormat, pRequestedInputFormat, ppSupportedInputFormat);
#else
return ((delegate* unmanaged[Stdcall]<IXAPO*, Media.Audio.WaveFormatEx*, Media.Audio.WaveFormatEx*, Media.Audio.WaveFormatEx**, int>)(lpVtbl[4]))((IXAPO*)Unsafe.AsPointer(ref this), pOutputFormat, pRequestedInputFormat, ppSupportedInputFormat);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPO::IsOutputFormatSupported"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(5)]
public HResult IsOutputFormatSupported(Media.Audio.WaveFormatEx* pInputFormat, Media.Audio.WaveFormatEx* pRequestedOutputFormat, Media.Audio.WaveFormatEx** ppSupportedOutputFormat)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPO*, Media.Audio.WaveFormatEx*, Media.Audio.WaveFormatEx*, Media.Audio.WaveFormatEx**, int>)(lpVtbl[5]))((IXAPO*)Unsafe.AsPointer(ref this), pInputFormat, pRequestedOutputFormat, ppSupportedOutputFormat);
#else
return ((delegate* unmanaged[Stdcall]<IXAPO*, Media.Audio.WaveFormatEx*, Media.Audio.WaveFormatEx*, Media.Audio.WaveFormatEx**, int>)(lpVtbl[5]))((IXAPO*)Unsafe.AsPointer(ref this), pInputFormat, pRequestedOutputFormat, ppSupportedOutputFormat);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPO::Initialize"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(6)]
public HResult Initialize(void* pData, uint DataByteSize)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPO*, void*, uint, int>)(lpVtbl[6]))((IXAPO*)Unsafe.AsPointer(ref this), pData, DataByteSize);
#else
return ((delegate* unmanaged[Stdcall]<IXAPO*, void*, uint, int>)(lpVtbl[6]))((IXAPO*)Unsafe.AsPointer(ref this), pData, DataByteSize);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPO::Reset"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(7)]
public void Reset()
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAPO*, void>)(lpVtbl[7]))((IXAPO*)Unsafe.AsPointer(ref this));
#else
((delegate* unmanaged[Stdcall]<IXAPO*, void>)(lpVtbl[7]))((IXAPO*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPO::LockForProcess"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(8)]
public HResult LockForProcess(uint InputLockedParameterCount, XAPOLockForProcessParameters* pInputLockedParameters, uint OutputLockedParameterCount, XAPOLockForProcessParameters* pOutputLockedParameters)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPO*, uint, XAPOLockForProcessParameters*, uint, XAPOLockForProcessParameters*, int>)(lpVtbl[8]))((IXAPO*)Unsafe.AsPointer(ref this), InputLockedParameterCount, pInputLockedParameters, OutputLockedParameterCount, pOutputLockedParameters);
#else
return ((delegate* unmanaged[Stdcall]<IXAPO*, uint, XAPOLockForProcessParameters*, uint, XAPOLockForProcessParameters*, int>)(lpVtbl[8]))((IXAPO*)Unsafe.AsPointer(ref this), InputLockedParameterCount, pInputLockedParameters, OutputLockedParameterCount, pOutputLockedParameters);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPO::UnlockForProcess"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(9)]
public void UnlockForProcess()
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAPO*, void>)(lpVtbl[9]))((IXAPO*)Unsafe.AsPointer(ref this));
#else
((delegate* unmanaged[Stdcall]<IXAPO*, void>)(lpVtbl[9]))((IXAPO*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPO::Process"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(10)]
public void Process(uint InputProcessParameterCount, XAPOProcessBufferParameters* pInputProcessParameters, uint OutputProcessParameterCount, XAPOProcessBufferParameters* pOutputProcessParameters, Bool32 IsEnabled)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAPO*, uint, XAPOProcessBufferParameters*, uint, XAPOProcessBufferParameters*, Bool32, void>)(lpVtbl[10]))((IXAPO*)Unsafe.AsPointer(ref this), InputProcessParameterCount, pInputProcessParameters, OutputProcessParameterCount, pOutputProcessParameters, IsEnabled);
#else
((delegate* unmanaged[Stdcall]<IXAPO*, uint, XAPOProcessBufferParameters*, uint, XAPOProcessBufferParameters*, Bool32, void>)(lpVtbl[10]))((IXAPO*)Unsafe.AsPointer(ref this), InputProcessParameterCount, pInputProcessParameters, OutputProcessParameterCount, pOutputProcessParameters, IsEnabled);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPO::CalcInputFrames"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(11)]
public uint CalcInputFrames(uint OutputFrameCount)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPO*, uint, uint>)(lpVtbl[11]))((IXAPO*)Unsafe.AsPointer(ref this), OutputFrameCount);
#else
return ((delegate* unmanaged[Stdcall]<IXAPO*, uint, uint>)(lpVtbl[11]))((IXAPO*)Unsafe.AsPointer(ref this), OutputFrameCount);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPO::CalcOutputFrames"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(12)]
public uint CalcOutputFrames(uint InputFrameCount)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPO*, uint, uint>)(lpVtbl[12]))((IXAPO*)Unsafe.AsPointer(ref this), InputFrameCount);
#else
return ((delegate* unmanaged[Stdcall]<IXAPO*, uint, uint>)(lpVtbl[12]))((IXAPO*)Unsafe.AsPointer(ref this), InputFrameCount);
#endif
}
public interface Interface : IUnknown.Interface
{
[VtblIndex(3)]
HResult GetRegistrationProperties(XAPORegistrationProperties** ppRegistrationProperties);
[VtblIndex(4)]
HResult IsInputFormatSupported(Media.Audio.WaveFormatEx* pOutputFormat, Media.Audio.WaveFormatEx* pRequestedInputFormat, Media.Audio.WaveFormatEx** ppSupportedInputFormat);
[VtblIndex(5)]
HResult IsOutputFormatSupported(Media.Audio.WaveFormatEx* pInputFormat, Media.Audio.WaveFormatEx* pRequestedOutputFormat, Media.Audio.WaveFormatEx** ppSupportedOutputFormat);
[VtblIndex(6)]
HResult Initialize(void* pData, uint DataByteSize);
[VtblIndex(7)]
void Reset();
[VtblIndex(8)]
HResult LockForProcess(uint InputLockedParameterCount, XAPOLockForProcessParameters* pInputLockedParameters, uint OutputLockedParameterCount, XAPOLockForProcessParameters* pOutputLockedParameters);
[VtblIndex(9)]
void UnlockForProcess();
[VtblIndex(10)]
void Process(uint InputProcessParameterCount, XAPOProcessBufferParameters* pInputProcessParameters, uint OutputProcessParameterCount, XAPOProcessBufferParameters* pOutputProcessParameters, Bool32 IsEnabled);
[VtblIndex(11)]
uint CalcInputFrames(uint OutputFrameCount);
[VtblIndex(12)]
uint CalcOutputFrames(uint InputFrameCount);
}
}

View File

@@ -0,0 +1,152 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPOHrtfParameters"]/*' />
/// <unmanaged>IXAPOHrtfParameters</unmanaged>
[Guid("15b3cd66-e9de-4464-b6e6-2bc3cf63d455")]
[NativeTypeName("struct IXAPOHrtfParameters : IUnknown")]
[NativeInheritance("IUnknown")]
public unsafe partial struct IXAPOHrtfParameters : IXAPOHrtfParameters.Interface, INativeGuid
{
public static ref readonly Guid IID_IXAPOHrtfParameters
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
ReadOnlySpan<byte> data = new byte[] {
0x66, 0xCD, 0xB3, 0x15,
0xDE, 0xE9,
0x64, 0x44,
0xB6,
0xE6,
0x2B,
0xC3,
0xCF,
0x63,
0xD4,
0x55
};
Debug.Assert(data.Length == Unsafe.SizeOf<Guid>());
return ref Unsafe.As<byte, Guid>(ref MemoryMarshal.GetReference(data));
}
}
#if NET6_0_OR_GREATER
static Guid* INativeGuid.NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IID_IXAPOHrtfParameters));
#else
public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IID_IXAPOHrtfParameters));
#endif
public void** lpVtbl;
/// <inheritdoc cref="IUnknown.QueryInterface" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(0)]
public HResult QueryInterface([NativeTypeName("const IID &")] Guid* riid, void** ppvObject)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPOHrtfParameters*, Guid*, void**, int>)(lpVtbl[0]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this), riid, ppvObject);
#else
return ((delegate* unmanaged[Stdcall]<IXAPOHrtfParameters*, Guid*, void**, int>)(lpVtbl[0]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this), riid, ppvObject);
#endif
}
/// <inheritdoc cref="IUnknown.AddRef" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(1)]
[return: NativeTypeName("ULONG")]
public uint AddRef()
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPOHrtfParameters*, uint>)(lpVtbl[1]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this));
#else
return ((delegate* unmanaged[Stdcall]<IXAPOHrtfParameters*, uint>)(lpVtbl[1]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this));
#endif
}
/// <inheritdoc cref="IUnknown.Release" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(2)]
[return: NativeTypeName("ULONG")]
public uint Release()
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPOHrtfParameters*, uint>)(lpVtbl[2]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this));
#else
return ((delegate* unmanaged[Stdcall]<IXAPOHrtfParameters*, uint>)(lpVtbl[2]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPOHrtfParameters::SetSourcePosition"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(3)]
public HResult SetSourcePosition(HrtfPosition* position)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPOHrtfParameters*, HrtfPosition*, int>)(lpVtbl[3]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this), position);
#else
return ((delegate* unmanaged[Stdcall]<IXAPOHrtfParameters*, HrtfPosition*, int>)(lpVtbl[3]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this), position);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPOHrtfParameters::SetSourceOrientation"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(4)]
public HResult SetSourceOrientation(HrtfOrientation* orientation)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPOHrtfParameters*, HrtfOrientation*, int>)(lpVtbl[4]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this), orientation);
#else
return ((delegate* unmanaged[Stdcall]<IXAPOHrtfParameters*, HrtfOrientation*, int>)(lpVtbl[4]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this), orientation);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPOHrtfParameters::SetSourceGain"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(5)]
public HResult SetSourceGain(float gain)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPOHrtfParameters*, float, int>)(lpVtbl[5]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this), gain);
#else
return ((delegate* unmanaged[Stdcall]<IXAPOHrtfParameters*, float, int>)(lpVtbl[5]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this), gain);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPOHrtfParameters::SetEnvironment"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(6)]
public HResult SetEnvironment(HrtfEnvironment environment)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPOHrtfParameters*, HrtfEnvironment, int>)(lpVtbl[6]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this), environment);
#else
return ((delegate* unmanaged[Stdcall]<IXAPOHrtfParameters*, HrtfEnvironment, int>)(lpVtbl[6]))((IXAPOHrtfParameters*)Unsafe.AsPointer(ref this), environment);
#endif
}
public interface Interface : IUnknown.Interface
{
[VtblIndex(3)]
HResult SetSourcePosition(HrtfPosition* position);
[VtblIndex(4)]
HResult SetSourceOrientation(HrtfOrientation* orientation);
[VtblIndex(5)]
HResult SetSourceGain(float gain);
[VtblIndex(6)]
HResult SetEnvironment(HrtfEnvironment environment);
}
}

View File

@@ -0,0 +1,122 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPOParameters"]/*' />
/// <unmanaged>IXAPOParameters</unmanaged>
[Guid("26d95c66-80f2-499a-ad54-5ae7f01c6d98")]
[NativeTypeName("struct IXAPOParameters : IUnknown")]
[NativeInheritance("IUnknown")]
public unsafe partial struct IXAPOParameters : IXAPOParameters.Interface, INativeGuid
{
public static ref readonly Guid IID_IXAPOParameters
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
ReadOnlySpan<byte> data = new byte[] {
0x66, 0x5C, 0xD9, 0x26,
0xF2, 0x80,
0x9A, 0x49,
0xAD,
0x54,
0x5A,
0xE7,
0xF0,
0x1C,
0x6D,
0x98
};
Debug.Assert(data.Length == Unsafe.SizeOf<Guid>());
return ref Unsafe.As<byte, Guid>(ref MemoryMarshal.GetReference(data));
}
}
#if NET6_0_OR_GREATER
static Guid* INativeGuid.NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IID_IXAPOParameters));
#else
public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IID_IXAPOParameters));
#endif
public void** lpVtbl;
/// <inheritdoc cref="IUnknown.QueryInterface" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(0)]
public HResult QueryInterface([NativeTypeName("const IID &")] Guid* riid, void** ppvObject)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPOParameters*, Guid*, void**, int>)(lpVtbl[0]))((IXAPOParameters*)Unsafe.AsPointer(ref this), riid, ppvObject);
#else
return ((delegate* unmanaged[Stdcall]<IXAPOParameters*, Guid*, void**, int>)(lpVtbl[0]))((IXAPOParameters*)Unsafe.AsPointer(ref this), riid, ppvObject);
#endif
}
/// <inheritdoc cref="IUnknown.AddRef" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(1)]
[return: NativeTypeName("ULONG")]
public uint AddRef()
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPOParameters*, uint>)(lpVtbl[1]))((IXAPOParameters*)Unsafe.AsPointer(ref this));
#else
return ((delegate* unmanaged[Stdcall]<IXAPOParameters*, uint>)(lpVtbl[1]))((IXAPOParameters*)Unsafe.AsPointer(ref this));
#endif
}
/// <inheritdoc cref="IUnknown.Release" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(2)]
[return: NativeTypeName("ULONG")]
public uint Release()
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAPOParameters*, uint>)(lpVtbl[2]))((IXAPOParameters*)Unsafe.AsPointer(ref this));
#else
return ((delegate* unmanaged[Stdcall]<IXAPOParameters*, uint>)(lpVtbl[2]))((IXAPOParameters*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPOParameters::SetParameters"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(3)]
public void SetParameters(void* pParameters, uint ParameterByteSize)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAPOParameters*, void*, uint, void>)(lpVtbl[3]))((IXAPOParameters*)Unsafe.AsPointer(ref this), pParameters, ParameterByteSize);
#else
((delegate* unmanaged[Stdcall]<IXAPOParameters*, void*, uint, void>)(lpVtbl[3]))((IXAPOParameters*)Unsafe.AsPointer(ref this), pParameters, ParameterByteSize);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAPOParameters::GetParameters"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(4)]
public void GetParameters(void* pParameters, uint ParameterByteSize)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAPOParameters*, void*, uint, void>)(lpVtbl[4]))((IXAPOParameters*)Unsafe.AsPointer(ref this), pParameters, ParameterByteSize);
#else
((delegate* unmanaged[Stdcall]<IXAPOParameters*, void*, uint, void>)(lpVtbl[4]))((IXAPOParameters*)Unsafe.AsPointer(ref this), pParameters, ParameterByteSize);
#endif
}
public interface Interface : IUnknown.Interface
{
[VtblIndex(3)]
void SetParameters(void* pParameters, uint ParameterByteSize);
[VtblIndex(4)]
void GetParameters(void* pParameters, uint ParameterByteSize);
}
}

View File

@@ -0,0 +1,242 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2"]/*' />
/// <unmanaged>IXAudio2</unmanaged>
[Guid("2b02e3cf-2e0b-4ec3-be45-1b2a3fe7210d")]
[NativeTypeName("struct IXAudio2 : IUnknown")]
[NativeInheritance("IUnknown")]
public unsafe partial struct IXAudio2 : IXAudio2.Interface, INativeGuid
{
public static ref readonly Guid IID_IXAudio2
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
ReadOnlySpan<byte> data = new byte[] {
0xCF, 0xE3, 0x02, 0x2B,
0x0B, 0x2E,
0xC3, 0x4E,
0xBE,
0x45,
0x1B,
0x2A,
0x3F,
0xE7,
0x21,
0x0D
};
Debug.Assert(data.Length == Unsafe.SizeOf<Guid>());
return ref Unsafe.As<byte, Guid>(ref MemoryMarshal.GetReference(data));
}
}
#if NET6_0_OR_GREATER
static Guid* INativeGuid.NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IID_IXAudio2));
#else
public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IID_IXAudio2));
#endif
public void** lpVtbl;
/// <inheritdoc cref="IUnknown.QueryInterface" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(0)]
public HResult QueryInterface([NativeTypeName("const IID &")] Guid* riid, void** ppvObject)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2*, Guid*, void**, int>)(lpVtbl[0]))((IXAudio2*)Unsafe.AsPointer(ref this), riid, ppvObject);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2*, Guid*, void**, int>)(lpVtbl[0]))((IXAudio2*)Unsafe.AsPointer(ref this), riid, ppvObject);
#endif
}
/// <inheritdoc cref="IUnknown.AddRef" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(1)]
[return: NativeTypeName("ULONG")]
public uint AddRef()
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2*, uint>)(lpVtbl[1]))((IXAudio2*)Unsafe.AsPointer(ref this));
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2*, uint>)(lpVtbl[1]))((IXAudio2*)Unsafe.AsPointer(ref this));
#endif
}
/// <inheritdoc cref="IUnknown.Release" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(2)]
[return: NativeTypeName("ULONG")]
public uint Release()
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2*, uint>)(lpVtbl[2]))((IXAudio2*)Unsafe.AsPointer(ref this));
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2*, uint>)(lpVtbl[2]))((IXAudio2*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2::RegisterForCallbacks"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(3)]
public HResult RegisterForCallbacks(IXAudio2EngineCallback* pCallback)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2*, IXAudio2EngineCallback*, int>)(lpVtbl[3]))((IXAudio2*)Unsafe.AsPointer(ref this), pCallback);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2*, IXAudio2EngineCallback*, int>)(lpVtbl[3]))((IXAudio2*)Unsafe.AsPointer(ref this), pCallback);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2::UnregisterForCallbacks"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(4)]
public void UnregisterForCallbacks(IXAudio2EngineCallback* pCallback)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2*, IXAudio2EngineCallback*, void>)(lpVtbl[4]))((IXAudio2*)Unsafe.AsPointer(ref this), pCallback);
#else
((delegate* unmanaged[Stdcall]<IXAudio2*, IXAudio2EngineCallback*, void>)(lpVtbl[4]))((IXAudio2*)Unsafe.AsPointer(ref this), pCallback);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2::CreateSourceVoice"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(5)]
public HResult CreateSourceVoice(IXAudio2SourceVoice** ppSourceVoice, Media.Audio.WaveFormatEx* pSourceFormat, uint Flags, float MaxFrequencyRatio, IXAudio2VoiceCallback* pCallback, VoiceSends* pSendList, EffectChain* pEffectChain)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2*, IXAudio2SourceVoice**, Media.Audio.WaveFormatEx*, uint, float, IXAudio2VoiceCallback*, VoiceSends*, EffectChain*, int>)(lpVtbl[5]))((IXAudio2*)Unsafe.AsPointer(ref this), ppSourceVoice, pSourceFormat, Flags, MaxFrequencyRatio, pCallback, pSendList, pEffectChain);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2*, IXAudio2SourceVoice**, Media.Audio.WaveFormatEx*, uint, float, IXAudio2VoiceCallback*, VoiceSends*, EffectChain*, int>)(lpVtbl[5]))((IXAudio2*)Unsafe.AsPointer(ref this), ppSourceVoice, pSourceFormat, Flags, MaxFrequencyRatio, pCallback, pSendList, pEffectChain);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2::CreateSubmixVoice"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(6)]
public HResult CreateSubmixVoice(IXAudio2SubmixVoice** ppSubmixVoice, uint InputChannels, uint InputSampleRate, uint Flags, uint ProcessingStage, VoiceSends* pSendList, EffectChain* pEffectChain)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2*, IXAudio2SubmixVoice**, uint, uint, uint, uint, VoiceSends*, EffectChain*, int>)(lpVtbl[6]))((IXAudio2*)Unsafe.AsPointer(ref this), ppSubmixVoice, InputChannels, InputSampleRate, Flags, ProcessingStage, pSendList, pEffectChain);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2*, IXAudio2SubmixVoice**, uint, uint, uint, uint, VoiceSends*, EffectChain*, int>)(lpVtbl[6]))((IXAudio2*)Unsafe.AsPointer(ref this), ppSubmixVoice, InputChannels, InputSampleRate, Flags, ProcessingStage, pSendList, pEffectChain);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2::CreateMasteringVoice"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(7)]
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<IXAudio2*, IXAudio2MasteringVoice**, uint, uint, uint, ushort*, EffectChain*, Media.Audio.AudioStreamCategory*, int>)(lpVtbl[7]))((IXAudio2*)Unsafe.AsPointer(ref this), ppMasteringVoice, InputChannels, InputSampleRate, Flags, szDeviceId, pEffectChain, StreamCategory);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2*, IXAudio2MasteringVoice**, uint, uint, uint, ushort*, EffectChain*, Media.Audio.AudioStreamCategory*, int>)(lpVtbl[7]))((IXAudio2*)Unsafe.AsPointer(ref this), ppMasteringVoice, InputChannels, InputSampleRate, Flags, szDeviceId, pEffectChain, StreamCategory);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2::StartEngine"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(8)]
public HResult StartEngine()
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2*, int>)(lpVtbl[8]))((IXAudio2*)Unsafe.AsPointer(ref this));
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2*, int>)(lpVtbl[8]))((IXAudio2*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2::StopEngine"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(9)]
public void StopEngine()
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2*, void>)(lpVtbl[9]))((IXAudio2*)Unsafe.AsPointer(ref this));
#else
((delegate* unmanaged[Stdcall]<IXAudio2*, void>)(lpVtbl[9]))((IXAudio2*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2::CommitChanges"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(10)]
public HResult CommitChanges(uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2*, uint, int>)(lpVtbl[10]))((IXAudio2*)Unsafe.AsPointer(ref this), OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2*, uint, int>)(lpVtbl[10]))((IXAudio2*)Unsafe.AsPointer(ref this), OperationSet);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2::GetPerformanceData"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(11)]
public void GetPerformanceData(PerformanceData* pPerfData)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2*, PerformanceData*, void>)(lpVtbl[11]))((IXAudio2*)Unsafe.AsPointer(ref this), pPerfData);
#else
((delegate* unmanaged[Stdcall]<IXAudio2*, PerformanceData*, void>)(lpVtbl[11]))((IXAudio2*)Unsafe.AsPointer(ref this), pPerfData);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2::SetDebugConfiguration"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(12)]
public void SetDebugConfiguration(DebugConfiguration* pDebugConfiguration, void* pReserved)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2*, DebugConfiguration*, void*, void>)(lpVtbl[12]))((IXAudio2*)Unsafe.AsPointer(ref this), pDebugConfiguration, pReserved);
#else
((delegate* unmanaged[Stdcall]<IXAudio2*, DebugConfiguration*, void*, void>)(lpVtbl[12]))((IXAudio2*)Unsafe.AsPointer(ref this), pDebugConfiguration, pReserved);
#endif
}
public interface Interface : IUnknown.Interface
{
[VtblIndex(3)]
HResult RegisterForCallbacks(IXAudio2EngineCallback* pCallback);
[VtblIndex(4)]
void UnregisterForCallbacks(IXAudio2EngineCallback* pCallback);
[VtblIndex(5)]
HResult CreateSourceVoice(IXAudio2SourceVoice** ppSourceVoice, Media.Audio.WaveFormatEx* pSourceFormat, uint Flags, float MaxFrequencyRatio, IXAudio2VoiceCallback* pCallback, VoiceSends* pSendList, EffectChain* pEffectChain);
[VtblIndex(6)]
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);
[VtblIndex(8)]
HResult StartEngine();
[VtblIndex(9)]
void StopEngine();
[VtblIndex(10)]
HResult CommitChanges(uint OperationSet);
[VtblIndex(11)]
void GetPerformanceData(PerformanceData* pPerfData);
[VtblIndex(12)]
void SetDebugConfiguration(DebugConfiguration* pDebugConfiguration, void* pReserved);
}
}

View File

@@ -0,0 +1,66 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2EngineCallback"]/*' />
/// <unmanaged>IXAudio2EngineCallback</unmanaged>
public unsafe partial struct IXAudio2EngineCallback : IXAudio2EngineCallback.Interface
{
public void** lpVtbl;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2EngineCallback::OnProcessingPassStart"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(0)]
public void OnProcessingPassStart()
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2EngineCallback*, void>)(lpVtbl[0]))((IXAudio2EngineCallback*)Unsafe.AsPointer(ref this));
#else
((delegate* unmanaged[Stdcall]<IXAudio2EngineCallback*, void>)(lpVtbl[0]))((IXAudio2EngineCallback*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2EngineCallback::OnProcessingPassEnd"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(1)]
public void OnProcessingPassEnd()
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2EngineCallback*, void>)(lpVtbl[1]))((IXAudio2EngineCallback*)Unsafe.AsPointer(ref this));
#else
((delegate* unmanaged[Stdcall]<IXAudio2EngineCallback*, void>)(lpVtbl[1]))((IXAudio2EngineCallback*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2EngineCallback::OnCriticalError"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(2)]
public void OnCriticalError(HResult Error)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2EngineCallback*, HResult, void>)(lpVtbl[2]))((IXAudio2EngineCallback*)Unsafe.AsPointer(ref this), Error);
#else
((delegate* unmanaged[Stdcall]<IXAudio2EngineCallback*, HResult, void>)(lpVtbl[2]))((IXAudio2EngineCallback*)Unsafe.AsPointer(ref this), Error);
#endif
}
public interface Interface
{
[VtblIndex(0)]
void OnProcessingPassStart();
[VtblIndex(1)]
void OnProcessingPassEnd();
[VtblIndex(2)]
void OnCriticalError(HResult Error);
}
}

View File

@@ -0,0 +1,122 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Extension"]/*' />
/// <unmanaged>IXAudio2Extension</unmanaged>
[Guid("84ac29bb-d619-44d2-b197-e4acf7df3ed6")]
[NativeTypeName("struct IXAudio2Extension : IUnknown")]
[NativeInheritance("IUnknown")]
public unsafe partial struct IXAudio2Extension : IXAudio2Extension.Interface, INativeGuid
{
public static ref readonly Guid IID_IXAudio2Extension
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
ReadOnlySpan<byte> data = new byte[] {
0xBB, 0x29, 0xAC, 0x84,
0x19, 0xD6,
0xD2, 0x44,
0xB1,
0x97,
0xE4,
0xAC,
0xF7,
0xDF,
0x3E,
0xD6
};
Debug.Assert(data.Length == Unsafe.SizeOf<Guid>());
return ref Unsafe.As<byte, Guid>(ref MemoryMarshal.GetReference(data));
}
}
#if NET6_0_OR_GREATER
static Guid* INativeGuid.NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IID_IXAudio2Extension));
#else
public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IID_IXAudio2Extension));
#endif
public void** lpVtbl;
/// <inheritdoc cref="IUnknown.QueryInterface" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(0)]
public HResult QueryInterface([NativeTypeName("const IID &")] Guid* riid, void** ppvObject)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Extension*, Guid*, void**, int>)(lpVtbl[0]))((IXAudio2Extension*)Unsafe.AsPointer(ref this), riid, ppvObject);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Extension*, Guid*, void**, int>)(lpVtbl[0]))((IXAudio2Extension*)Unsafe.AsPointer(ref this), riid, ppvObject);
#endif
}
/// <inheritdoc cref="IUnknown.AddRef" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(1)]
[return: NativeTypeName("ULONG")]
public uint AddRef()
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Extension*, uint>)(lpVtbl[1]))((IXAudio2Extension*)Unsafe.AsPointer(ref this));
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Extension*, uint>)(lpVtbl[1]))((IXAudio2Extension*)Unsafe.AsPointer(ref this));
#endif
}
/// <inheritdoc cref="IUnknown.Release" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(2)]
[return: NativeTypeName("ULONG")]
public uint Release()
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Extension*, uint>)(lpVtbl[2]))((IXAudio2Extension*)Unsafe.AsPointer(ref this));
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Extension*, uint>)(lpVtbl[2]))((IXAudio2Extension*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Extension::GetProcessingQuantum"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(3)]
public void GetProcessingQuantum(uint* quantumNumerator, uint* quantumDenominator)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2Extension*, uint*, uint*, void>)(lpVtbl[3]))((IXAudio2Extension*)Unsafe.AsPointer(ref this), quantumNumerator, quantumDenominator);
#else
((delegate* unmanaged[Stdcall]<IXAudio2Extension*, uint*, uint*, void>)(lpVtbl[3]))((IXAudio2Extension*)Unsafe.AsPointer(ref this), quantumNumerator, quantumDenominator);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Extension::GetProcessor"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(4)]
public void GetProcessor(uint* processor)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2Extension*, uint*, void>)(lpVtbl[4]))((IXAudio2Extension*)Unsafe.AsPointer(ref this), processor);
#else
((delegate* unmanaged[Stdcall]<IXAudio2Extension*, uint*, void>)(lpVtbl[4]))((IXAudio2Extension*)Unsafe.AsPointer(ref this), processor);
#endif
}
public interface Interface : IUnknown.Interface
{
[VtblIndex(3)]
void GetProcessingQuantum(uint* quantumNumerator, uint* quantumDenominator);
[VtblIndex(4)]
void GetProcessor(uint* processor);
}
}

View File

@@ -0,0 +1,266 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2MasteringVoice"]/*' />
/// <unmanaged>IXAudio2MasteringVoice</unmanaged>
[NativeTypeName("struct IXAudio2MasteringVoice : IXAudio2Voice")]
[NativeInheritance("IXAudio2Voice")]
public unsafe partial struct IXAudio2MasteringVoice : IXAudio2MasteringVoice.Interface
{
public void** lpVtbl;
/// <inheritdoc cref="IXAudio2Voice.GetVoiceDetails" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(0)]
public void GetVoiceDetails(VoiceDetails* pVoiceDetails)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2MasteringVoice*, VoiceDetails*, void>)(lpVtbl[0]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pVoiceDetails);
#else
((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, VoiceDetails*, void>)(lpVtbl[0]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pVoiceDetails);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetOutputVoices" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(1)]
public HResult SetOutputVoices(VoiceSends* pSendList)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2MasteringVoice*, VoiceSends*, int>)(lpVtbl[1]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pSendList);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, VoiceSends*, int>)(lpVtbl[1]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pSendList);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetEffectChain" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(2)]
public HResult SetEffectChain(EffectChain* pEffectChain)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2MasteringVoice*, EffectChain*, int>)(lpVtbl[2]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pEffectChain);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, EffectChain*, int>)(lpVtbl[2]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pEffectChain);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.EnableEffect" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(3)]
public HResult EnableEffect(uint EffectIndex, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2MasteringVoice*, uint, uint, int>)(lpVtbl[3]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, uint, uint, int>)(lpVtbl[3]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.DisableEffect" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(4)]
public HResult DisableEffect(uint EffectIndex, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2MasteringVoice*, uint, uint, int>)(lpVtbl[4]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, uint, uint, int>)(lpVtbl[4]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetEffectState" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(5)]
public void GetEffectState(uint EffectIndex, Bool32* pEnabled)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2MasteringVoice*, uint, Bool32*, void>)(lpVtbl[5]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), EffectIndex, pEnabled);
#else
((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, uint, Bool32*, void>)(lpVtbl[5]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), EffectIndex, pEnabled);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetEffectParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(6)]
public HResult SetEffectParameters(uint EffectIndex, void* pParameters, uint ParametersByteSize, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2MasteringVoice*, uint, void*, uint, uint, int>)(lpVtbl[6]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, uint, void*, uint, uint, int>)(lpVtbl[6]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetEffectParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(7)]
public HResult GetEffectParameters(uint EffectIndex, void* pParameters, uint ParametersByteSize)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2MasteringVoice*, uint, void*, uint, int>)(lpVtbl[7]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, uint, void*, uint, int>)(lpVtbl[7]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetFilterParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(8)]
public HResult SetFilterParameters(FilterParameters* pParameters, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2MasteringVoice*, FilterParameters*, uint, int>)(lpVtbl[8]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pParameters, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, FilterParameters*, uint, int>)(lpVtbl[8]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pParameters, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetFilterParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(9)]
public void GetFilterParameters(FilterParameters* pParameters)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2MasteringVoice*, FilterParameters*, void>)(lpVtbl[9]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pParameters);
#else
((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, FilterParameters*, void>)(lpVtbl[9]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pParameters);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetOutputFilterParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(10)]
public HResult SetOutputFilterParameters(IXAudio2Voice* pDestinationVoice, FilterParameters* pParameters, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2MasteringVoice*, IXAudio2Voice*, FilterParameters*, uint, int>)(lpVtbl[10]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, IXAudio2Voice*, FilterParameters*, uint, int>)(lpVtbl[10]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetOutputFilterParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(11)]
public void GetOutputFilterParameters(IXAudio2Voice* pDestinationVoice, FilterParameters* pParameters)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2MasteringVoice*, IXAudio2Voice*, FilterParameters*, void>)(lpVtbl[11]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters);
#else
((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, IXAudio2Voice*, FilterParameters*, void>)(lpVtbl[11]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetVolume" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(12)]
public HResult SetVolume(float Volume, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2MasteringVoice*, float, uint, int>)(lpVtbl[12]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), Volume, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, float, uint, int>)(lpVtbl[12]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), Volume, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetVolume" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(13)]
public void GetVolume(float* pVolume)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2MasteringVoice*, float*, void>)(lpVtbl[13]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pVolume);
#else
((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, float*, void>)(lpVtbl[13]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pVolume);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetChannelVolumes" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(14)]
public HResult SetChannelVolumes(uint Channels, float* pVolumes, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2MasteringVoice*, uint, float*, uint, int>)(lpVtbl[14]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), Channels, pVolumes, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, uint, float*, uint, int>)(lpVtbl[14]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), Channels, pVolumes, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetChannelVolumes" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(15)]
public void GetChannelVolumes(uint Channels, float* pVolumes)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2MasteringVoice*, uint, float*, void>)(lpVtbl[15]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), Channels, pVolumes);
#else
((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, uint, float*, void>)(lpVtbl[15]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), Channels, pVolumes);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetOutputMatrix" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(16)]
public HResult SetOutputMatrix(IXAudio2Voice* pDestinationVoice, uint SourceChannels, uint DestinationChannels, float* pLevelMatrix, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2MasteringVoice*, IXAudio2Voice*, uint, uint, float*, uint, int>)(lpVtbl[16]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, IXAudio2Voice*, uint, uint, float*, uint, int>)(lpVtbl[16]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetOutputMatrix" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(17)]
public void GetOutputMatrix(IXAudio2Voice* pDestinationVoice, uint SourceChannels, uint DestinationChannels, float* pLevelMatrix)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2MasteringVoice*, IXAudio2Voice*, uint, uint, float*, void>)(lpVtbl[17]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix);
#else
((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, IXAudio2Voice*, uint, uint, float*, void>)(lpVtbl[17]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.DestroyVoice" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(18)]
public void DestroyVoice()
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2MasteringVoice*, void>)(lpVtbl[18]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this));
#else
((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, void>)(lpVtbl[18]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2MasteringVoice::GetChannelMask"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(19)]
public HResult GetChannelMask(uint* pChannelmask)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2MasteringVoice*, uint*, int>)(lpVtbl[19]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pChannelmask);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2MasteringVoice*, uint*, int>)(lpVtbl[19]))((IXAudio2MasteringVoice*)Unsafe.AsPointer(ref this), pChannelmask);
#endif
}
public interface Interface : IXAudio2Voice.Interface
{
[VtblIndex(19)]
HResult GetChannelMask(uint* pChannelmask);
}
}

View File

@@ -0,0 +1,401 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2SourceVoice"]/*' />
/// <unmanaged>IXAudio2SourceVoice</unmanaged>
[NativeTypeName("struct IXAudio2SourceVoice : IXAudio2Voice")]
[NativeInheritance("IXAudio2Voice")]
public unsafe partial struct IXAudio2SourceVoice : IXAudio2SourceVoice.Interface
{
public void** lpVtbl;
/// <inheritdoc cref="IXAudio2Voice.GetVoiceDetails" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(0)]
public void GetVoiceDetails(VoiceDetails* pVoiceDetails)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SourceVoice*, VoiceDetails*, void>)(lpVtbl[0]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pVoiceDetails);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, VoiceDetails*, void>)(lpVtbl[0]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pVoiceDetails);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetOutputVoices" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(1)]
public HResult SetOutputVoices(VoiceSends* pSendList)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, VoiceSends*, int>)(lpVtbl[1]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pSendList);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, VoiceSends*, int>)(lpVtbl[1]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pSendList);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetEffectChain" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(2)]
public HResult SetEffectChain(EffectChain* pEffectChain)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, EffectChain*, int>)(lpVtbl[2]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pEffectChain);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, EffectChain*, int>)(lpVtbl[2]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pEffectChain);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.EnableEffect" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(3)]
public HResult EnableEffect(uint EffectIndex, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, uint, uint, int>)(lpVtbl[3]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, uint, uint, int>)(lpVtbl[3]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.DisableEffect" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(4)]
public HResult DisableEffect(uint EffectIndex, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, uint, uint, int>)(lpVtbl[4]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, uint, uint, int>)(lpVtbl[4]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetEffectState" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(5)]
public void GetEffectState(uint EffectIndex, Bool32* pEnabled)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SourceVoice*, uint, Bool32*, void>)(lpVtbl[5]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), EffectIndex, pEnabled);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, uint, Bool32*, void>)(lpVtbl[5]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), EffectIndex, pEnabled);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetEffectParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(6)]
public HResult SetEffectParameters(uint EffectIndex, void* pParameters, uint ParametersByteSize, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, uint, void*, uint, uint, int>)(lpVtbl[6]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, uint, void*, uint, uint, int>)(lpVtbl[6]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetEffectParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(7)]
public HResult GetEffectParameters(uint EffectIndex, void* pParameters, uint ParametersByteSize)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, uint, void*, uint, int>)(lpVtbl[7]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, uint, void*, uint, int>)(lpVtbl[7]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetFilterParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(8)]
public HResult SetFilterParameters(FilterParameters* pParameters, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, FilterParameters*, uint, int>)(lpVtbl[8]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pParameters, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, FilterParameters*, uint, int>)(lpVtbl[8]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pParameters, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetFilterParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(9)]
public void GetFilterParameters(FilterParameters* pParameters)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SourceVoice*, FilterParameters*, void>)(lpVtbl[9]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pParameters);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, FilterParameters*, void>)(lpVtbl[9]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pParameters);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetOutputFilterParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(10)]
public HResult SetOutputFilterParameters(IXAudio2Voice* pDestinationVoice, FilterParameters* pParameters, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, IXAudio2Voice*, FilterParameters*, uint, int>)(lpVtbl[10]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, IXAudio2Voice*, FilterParameters*, uint, int>)(lpVtbl[10]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetOutputFilterParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(11)]
public void GetOutputFilterParameters(IXAudio2Voice* pDestinationVoice, FilterParameters* pParameters)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SourceVoice*, IXAudio2Voice*, FilterParameters*, void>)(lpVtbl[11]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, IXAudio2Voice*, FilterParameters*, void>)(lpVtbl[11]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetVolume" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(12)]
public HResult SetVolume(float Volume, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, float, uint, int>)(lpVtbl[12]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), Volume, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, float, uint, int>)(lpVtbl[12]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), Volume, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetVolume" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(13)]
public void GetVolume(float* pVolume)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SourceVoice*, float*, void>)(lpVtbl[13]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pVolume);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, float*, void>)(lpVtbl[13]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pVolume);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetChannelVolumes" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(14)]
public HResult SetChannelVolumes(uint Channels, float* pVolumes, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, uint, float*, uint, int>)(lpVtbl[14]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), Channels, pVolumes, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, uint, float*, uint, int>)(lpVtbl[14]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), Channels, pVolumes, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetChannelVolumes" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(15)]
public void GetChannelVolumes(uint Channels, float* pVolumes)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SourceVoice*, uint, float*, void>)(lpVtbl[15]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), Channels, pVolumes);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, uint, float*, void>)(lpVtbl[15]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), Channels, pVolumes);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetOutputMatrix" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(16)]
public HResult SetOutputMatrix(IXAudio2Voice* pDestinationVoice, uint SourceChannels, uint DestinationChannels, float* pLevelMatrix, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, IXAudio2Voice*, uint, uint, float*, uint, int>)(lpVtbl[16]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, IXAudio2Voice*, uint, uint, float*, uint, int>)(lpVtbl[16]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetOutputMatrix" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(17)]
public void GetOutputMatrix(IXAudio2Voice* pDestinationVoice, uint SourceChannels, uint DestinationChannels, float* pLevelMatrix)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SourceVoice*, IXAudio2Voice*, uint, uint, float*, void>)(lpVtbl[17]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, IXAudio2Voice*, uint, uint, float*, void>)(lpVtbl[17]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.DestroyVoice" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(18)]
public void DestroyVoice()
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SourceVoice*, void>)(lpVtbl[18]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this));
#else
((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, void>)(lpVtbl[18]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2SourceVoice::Start"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(19)]
public HResult Start(uint Flags, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, uint, uint, int>)(lpVtbl[19]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), Flags, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, uint, uint, int>)(lpVtbl[19]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), Flags, OperationSet);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2SourceVoice::Stop"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(20)]
public HResult Stop(uint Flags, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, uint, uint, int>)(lpVtbl[20]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), Flags, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, uint, uint, int>)(lpVtbl[20]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), Flags, OperationSet);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2SourceVoice::SubmitSourceBuffer"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(21)]
public HResult SubmitSourceBuffer(Buffer* pBuffer, BufferWma* pBufferWMA)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, Buffer*, BufferWma*, int>)(lpVtbl[21]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pBuffer, pBufferWMA);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, Buffer*, BufferWma*, int>)(lpVtbl[21]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pBuffer, pBufferWMA);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2SourceVoice::FlushSourceBuffers"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(22)]
public HResult FlushSourceBuffers()
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, int>)(lpVtbl[22]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this));
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, int>)(lpVtbl[22]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2SourceVoice::Discontinuity"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(23)]
public HResult Discontinuity()
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, int>)(lpVtbl[23]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this));
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, int>)(lpVtbl[23]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2SourceVoice::ExitLoop"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(24)]
public HResult ExitLoop(uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, uint, int>)(lpVtbl[24]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, uint, int>)(lpVtbl[24]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), OperationSet);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2SourceVoice::GetState"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(25)]
public void GetState(VoiceState* pVoiceState, uint Flags)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SourceVoice*, VoiceState*, uint, void>)(lpVtbl[25]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pVoiceState, Flags);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, VoiceState*, uint, void>)(lpVtbl[25]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pVoiceState, Flags);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2SourceVoice::SetFrequencyRatio"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(26)]
public HResult SetFrequencyRatio(float Ratio, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, float, uint, int>)(lpVtbl[26]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), Ratio, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, float, uint, int>)(lpVtbl[26]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), Ratio, OperationSet);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2SourceVoice::GetFrequencyRatio"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(27)]
public void GetFrequencyRatio(float* pRatio)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SourceVoice*, float*, void>)(lpVtbl[27]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pRatio);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, float*, void>)(lpVtbl[27]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), pRatio);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2SourceVoice::SetSourceSampleRate"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(28)]
public HResult SetSourceSampleRate(uint NewSourceSampleRate)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SourceVoice*, uint, int>)(lpVtbl[28]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), NewSourceSampleRate);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SourceVoice*, uint, int>)(lpVtbl[28]))((IXAudio2SourceVoice*)Unsafe.AsPointer(ref this), NewSourceSampleRate);
#endif
}
public interface Interface : IXAudio2Voice.Interface
{
[VtblIndex(19)]
HResult Start(uint Flags, uint OperationSet);
[VtblIndex(20)]
HResult Stop(uint Flags, uint OperationSet);
[VtblIndex(21)]
HResult SubmitSourceBuffer(Buffer* pBuffer, BufferWma* pBufferWMA);
[VtblIndex(22)]
HResult FlushSourceBuffers();
[VtblIndex(23)]
HResult Discontinuity();
[VtblIndex(24)]
HResult ExitLoop(uint OperationSet);
[VtblIndex(25)]
void GetState(VoiceState* pVoiceState, uint Flags);
[VtblIndex(26)]
HResult SetFrequencyRatio(float Ratio, uint OperationSet);
[VtblIndex(27)]
void GetFrequencyRatio(float* pRatio);
[VtblIndex(28)]
HResult SetSourceSampleRate(uint NewSourceSampleRate);
}
}

View File

@@ -0,0 +1,252 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2SubmixVoice"]/*' />
/// <unmanaged>IXAudio2SubmixVoice</unmanaged>
[NativeTypeName("struct IXAudio2SubmixVoice : IXAudio2Voice")]
[NativeInheritance("IXAudio2Voice")]
public unsafe partial struct IXAudio2SubmixVoice : IXAudio2SubmixVoice.Interface
{
public void** lpVtbl;
/// <inheritdoc cref="IXAudio2Voice.GetVoiceDetails" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(0)]
public void GetVoiceDetails(VoiceDetails* pVoiceDetails)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SubmixVoice*, VoiceDetails*, void>)(lpVtbl[0]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pVoiceDetails);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, VoiceDetails*, void>)(lpVtbl[0]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pVoiceDetails);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetOutputVoices" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(1)]
public HResult SetOutputVoices(VoiceSends* pSendList)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SubmixVoice*, VoiceSends*, int>)(lpVtbl[1]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pSendList);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, VoiceSends*, int>)(lpVtbl[1]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pSendList);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetEffectChain" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(2)]
public HResult SetEffectChain(EffectChain* pEffectChain)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SubmixVoice*, EffectChain*, int>)(lpVtbl[2]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pEffectChain);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, EffectChain*, int>)(lpVtbl[2]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pEffectChain);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.EnableEffect" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(3)]
public HResult EnableEffect(uint EffectIndex, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SubmixVoice*, uint, uint, int>)(lpVtbl[3]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, uint, uint, int>)(lpVtbl[3]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.DisableEffect" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(4)]
public HResult DisableEffect(uint EffectIndex, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SubmixVoice*, uint, uint, int>)(lpVtbl[4]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, uint, uint, int>)(lpVtbl[4]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetEffectState" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(5)]
public void GetEffectState(uint EffectIndex, Bool32* pEnabled)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SubmixVoice*, uint, Bool32*, void>)(lpVtbl[5]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), EffectIndex, pEnabled);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, uint, Bool32*, void>)(lpVtbl[5]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), EffectIndex, pEnabled);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetEffectParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(6)]
public HResult SetEffectParameters(uint EffectIndex, void* pParameters, uint ParametersByteSize, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SubmixVoice*, uint, void*, uint, uint, int>)(lpVtbl[6]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, uint, void*, uint, uint, int>)(lpVtbl[6]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetEffectParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(7)]
public HResult GetEffectParameters(uint EffectIndex, void* pParameters, uint ParametersByteSize)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SubmixVoice*, uint, void*, uint, int>)(lpVtbl[7]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, uint, void*, uint, int>)(lpVtbl[7]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetFilterParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(8)]
public HResult SetFilterParameters(FilterParameters* pParameters, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SubmixVoice*, FilterParameters*, uint, int>)(lpVtbl[8]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pParameters, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, FilterParameters*, uint, int>)(lpVtbl[8]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pParameters, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetFilterParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(9)]
public void GetFilterParameters(FilterParameters* pParameters)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SubmixVoice*, FilterParameters*, void>)(lpVtbl[9]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pParameters);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, FilterParameters*, void>)(lpVtbl[9]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pParameters);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetOutputFilterParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(10)]
public HResult SetOutputFilterParameters(IXAudio2Voice* pDestinationVoice, FilterParameters* pParameters, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SubmixVoice*, IXAudio2Voice*, FilterParameters*, uint, int>)(lpVtbl[10]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, IXAudio2Voice*, FilterParameters*, uint, int>)(lpVtbl[10]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetOutputFilterParameters" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(11)]
public void GetOutputFilterParameters(IXAudio2Voice* pDestinationVoice, FilterParameters* pParameters)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SubmixVoice*, IXAudio2Voice*, FilterParameters*, void>)(lpVtbl[11]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, IXAudio2Voice*, FilterParameters*, void>)(lpVtbl[11]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetVolume" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(12)]
public HResult SetVolume(float Volume, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SubmixVoice*, float, uint, int>)(lpVtbl[12]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), Volume, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, float, uint, int>)(lpVtbl[12]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), Volume, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetVolume" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(13)]
public void GetVolume(float* pVolume)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SubmixVoice*, float*, void>)(lpVtbl[13]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pVolume);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, float*, void>)(lpVtbl[13]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pVolume);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetChannelVolumes" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(14)]
public HResult SetChannelVolumes(uint Channels, float* pVolumes, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SubmixVoice*, uint, float*, uint, int>)(lpVtbl[14]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), Channels, pVolumes, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, uint, float*, uint, int>)(lpVtbl[14]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), Channels, pVolumes, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetChannelVolumes" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(15)]
public void GetChannelVolumes(uint Channels, float* pVolumes)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SubmixVoice*, uint, float*, void>)(lpVtbl[15]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), Channels, pVolumes);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, uint, float*, void>)(lpVtbl[15]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), Channels, pVolumes);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.SetOutputMatrix" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(16)]
public HResult SetOutputMatrix(IXAudio2Voice* pDestinationVoice, uint SourceChannels, uint DestinationChannels, float* pLevelMatrix, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2SubmixVoice*, IXAudio2Voice*, uint, uint, float*, uint, int>)(lpVtbl[16]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, IXAudio2Voice*, uint, uint, float*, uint, int>)(lpVtbl[16]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.GetOutputMatrix" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(17)]
public void GetOutputMatrix(IXAudio2Voice* pDestinationVoice, uint SourceChannels, uint DestinationChannels, float* pLevelMatrix)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SubmixVoice*, IXAudio2Voice*, uint, uint, float*, void>)(lpVtbl[17]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix);
#else
((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, IXAudio2Voice*, uint, uint, float*, void>)(lpVtbl[17]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix);
#endif
}
/// <inheritdoc cref="IXAudio2Voice.DestroyVoice" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(18)]
public void DestroyVoice()
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2SubmixVoice*, void>)(lpVtbl[18]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this));
#else
((delegate* unmanaged[Stdcall]<IXAudio2SubmixVoice*, void>)(lpVtbl[18]))((IXAudio2SubmixVoice*)Unsafe.AsPointer(ref this));
#endif
}
public interface Interface : IXAudio2Voice.Interface
{
}
}

View File

@@ -0,0 +1,306 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice"]/*' />
/// <unmanaged>IXAudio2Voice</unmanaged>
public unsafe partial struct IXAudio2Voice : IXAudio2Voice.Interface
{
public void** lpVtbl;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::GetVoiceDetails"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(0)]
public void GetVoiceDetails(VoiceDetails* pVoiceDetails)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2Voice*, VoiceDetails*, void>)(lpVtbl[0]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pVoiceDetails);
#else
((delegate* unmanaged[Stdcall]<IXAudio2Voice*, VoiceDetails*, void>)(lpVtbl[0]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pVoiceDetails);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::SetOutputVoices"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(1)]
public HResult SetOutputVoices(VoiceSends* pSendList)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Voice*, VoiceSends*, int>)(lpVtbl[1]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pSendList);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Voice*, VoiceSends*, int>)(lpVtbl[1]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pSendList);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::SetEffectChain"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(2)]
public HResult SetEffectChain(EffectChain* pEffectChain)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Voice*, EffectChain*, int>)(lpVtbl[2]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pEffectChain);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Voice*, EffectChain*, int>)(lpVtbl[2]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pEffectChain);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::EnableEffect"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(3)]
public HResult EnableEffect(uint EffectIndex, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Voice*, uint, uint, int>)(lpVtbl[3]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Voice*, uint, uint, int>)(lpVtbl[3]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::DisableEffect"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(4)]
public HResult DisableEffect(uint EffectIndex, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Voice*, uint, uint, int>)(lpVtbl[4]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Voice*, uint, uint, int>)(lpVtbl[4]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), EffectIndex, OperationSet);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::GetEffectState"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(5)]
public void GetEffectState(uint EffectIndex, Bool32* pEnabled)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2Voice*, uint, Bool32*, void>)(lpVtbl[5]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), EffectIndex, pEnabled);
#else
((delegate* unmanaged[Stdcall]<IXAudio2Voice*, uint, Bool32*, void>)(lpVtbl[5]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), EffectIndex, pEnabled);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::SetEffectParameters"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(6)]
public HResult SetEffectParameters(uint EffectIndex, void* pParameters, uint ParametersByteSize, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Voice*, uint, void*, uint, uint, int>)(lpVtbl[6]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Voice*, uint, void*, uint, uint, int>)(lpVtbl[6]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize, OperationSet);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::GetEffectParameters"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(7)]
public HResult GetEffectParameters(uint EffectIndex, void* pParameters, uint ParametersByteSize)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Voice*, uint, void*, uint, int>)(lpVtbl[7]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Voice*, uint, void*, uint, int>)(lpVtbl[7]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), EffectIndex, pParameters, ParametersByteSize);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::SetFilterParameters"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(8)]
public HResult SetFilterParameters(FilterParameters* pParameters, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Voice*, FilterParameters*, uint, int>)(lpVtbl[8]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pParameters, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Voice*, FilterParameters*, uint, int>)(lpVtbl[8]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pParameters, OperationSet);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::GetFilterParameters"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(9)]
public void GetFilterParameters(FilterParameters* pParameters)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2Voice*, FilterParameters*, void>)(lpVtbl[9]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pParameters);
#else
((delegate* unmanaged[Stdcall]<IXAudio2Voice*, FilterParameters*, void>)(lpVtbl[9]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pParameters);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::SetOutputFilterParameters"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(10)]
public HResult SetOutputFilterParameters(IXAudio2Voice* pDestinationVoice, FilterParameters* pParameters, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Voice*, IXAudio2Voice*, FilterParameters*, uint, int>)(lpVtbl[10]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Voice*, IXAudio2Voice*, FilterParameters*, uint, int>)(lpVtbl[10]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters, OperationSet);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::GetOutputFilterParameters"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(11)]
public void GetOutputFilterParameters(IXAudio2Voice* pDestinationVoice, FilterParameters* pParameters)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2Voice*, IXAudio2Voice*, FilterParameters*, void>)(lpVtbl[11]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters);
#else
((delegate* unmanaged[Stdcall]<IXAudio2Voice*, IXAudio2Voice*, FilterParameters*, void>)(lpVtbl[11]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pDestinationVoice, pParameters);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::SetVolume"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(12)]
public HResult SetVolume(float Volume, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Voice*, float, uint, int>)(lpVtbl[12]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), Volume, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Voice*, float, uint, int>)(lpVtbl[12]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), Volume, OperationSet);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::GetVolume"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(13)]
public void GetVolume(float* pVolume)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2Voice*, float*, void>)(lpVtbl[13]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pVolume);
#else
((delegate* unmanaged[Stdcall]<IXAudio2Voice*, float*, void>)(lpVtbl[13]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pVolume);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::SetChannelVolumes"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(14)]
public HResult SetChannelVolumes(uint Channels, float* pVolumes, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Voice*, uint, float*, uint, int>)(lpVtbl[14]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), Channels, pVolumes, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Voice*, uint, float*, uint, int>)(lpVtbl[14]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), Channels, pVolumes, OperationSet);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::GetChannelVolumes"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(15)]
public void GetChannelVolumes(uint Channels, float* pVolumes)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2Voice*, uint, float*, void>)(lpVtbl[15]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), Channels, pVolumes);
#else
((delegate* unmanaged[Stdcall]<IXAudio2Voice*, uint, float*, void>)(lpVtbl[15]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), Channels, pVolumes);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::SetOutputMatrix"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(16)]
public HResult SetOutputMatrix(IXAudio2Voice* pDestinationVoice, uint SourceChannels, uint DestinationChannels, float* pLevelMatrix, uint OperationSet)
{
#if NET6_0_OR_GREATER
return ((delegate* unmanaged<IXAudio2Voice*, IXAudio2Voice*, uint, uint, float*, uint, int>)(lpVtbl[16]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet);
#else
return ((delegate* unmanaged[Stdcall]<IXAudio2Voice*, IXAudio2Voice*, uint, uint, float*, uint, int>)(lpVtbl[16]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix, OperationSet);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::GetOutputMatrix"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(17)]
public void GetOutputMatrix(IXAudio2Voice* pDestinationVoice, uint SourceChannels, uint DestinationChannels, float* pLevelMatrix)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2Voice*, IXAudio2Voice*, uint, uint, float*, void>)(lpVtbl[17]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix);
#else
((delegate* unmanaged[Stdcall]<IXAudio2Voice*, IXAudio2Voice*, uint, uint, float*, void>)(lpVtbl[17]))((IXAudio2Voice*)Unsafe.AsPointer(ref this), pDestinationVoice, SourceChannels, DestinationChannels, pLevelMatrix);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2Voice::DestroyVoice"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(18)]
public void DestroyVoice()
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2Voice*, void>)(lpVtbl[18]))((IXAudio2Voice*)Unsafe.AsPointer(ref this));
#else
((delegate* unmanaged[Stdcall]<IXAudio2Voice*, void>)(lpVtbl[18]))((IXAudio2Voice*)Unsafe.AsPointer(ref this));
#endif
}
public interface Interface
{
[VtblIndex(0)]
void GetVoiceDetails(VoiceDetails* pVoiceDetails);
[VtblIndex(1)]
HResult SetOutputVoices(VoiceSends* pSendList);
[VtblIndex(2)]
HResult SetEffectChain(EffectChain* pEffectChain);
[VtblIndex(3)]
HResult EnableEffect(uint EffectIndex, uint OperationSet);
[VtblIndex(4)]
HResult DisableEffect(uint EffectIndex, uint OperationSet);
[VtblIndex(5)]
void GetEffectState(uint EffectIndex, Bool32* pEnabled);
[VtblIndex(6)]
HResult SetEffectParameters(uint EffectIndex, void* pParameters, uint ParametersByteSize, uint OperationSet);
[VtblIndex(7)]
HResult GetEffectParameters(uint EffectIndex, void* pParameters, uint ParametersByteSize);
[VtblIndex(8)]
HResult SetFilterParameters(FilterParameters* pParameters, uint OperationSet);
[VtblIndex(9)]
void GetFilterParameters(FilterParameters* pParameters);
[VtblIndex(10)]
HResult SetOutputFilterParameters(IXAudio2Voice* pDestinationVoice, FilterParameters* pParameters, uint OperationSet);
[VtblIndex(11)]
void GetOutputFilterParameters(IXAudio2Voice* pDestinationVoice, FilterParameters* pParameters);
[VtblIndex(12)]
HResult SetVolume(float Volume, uint OperationSet);
[VtblIndex(13)]
void GetVolume(float* pVolume);
[VtblIndex(14)]
HResult SetChannelVolumes(uint Channels, float* pVolumes, uint OperationSet);
[VtblIndex(15)]
void GetChannelVolumes(uint Channels, float* pVolumes);
[VtblIndex(16)]
HResult SetOutputMatrix(IXAudio2Voice* pDestinationVoice, uint SourceChannels, uint DestinationChannels, float* pLevelMatrix, uint OperationSet);
[VtblIndex(17)]
void GetOutputMatrix(IXAudio2Voice* pDestinationVoice, uint SourceChannels, uint DestinationChannels, float* pLevelMatrix);
[VtblIndex(18)]
void DestroyVoice();
}
}

View File

@@ -0,0 +1,126 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2VoiceCallback"]/*' />
/// <unmanaged>IXAudio2VoiceCallback</unmanaged>
public unsafe partial struct IXAudio2VoiceCallback : IXAudio2VoiceCallback.Interface
{
public void** lpVtbl;
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2VoiceCallback::OnVoiceProcessingPassStart"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(0)]
public void OnVoiceProcessingPassStart(uint BytesRequired)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2VoiceCallback*, uint, void>)(lpVtbl[0]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this), BytesRequired);
#else
((delegate* unmanaged[Stdcall]<IXAudio2VoiceCallback*, uint, void>)(lpVtbl[0]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this), BytesRequired);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2VoiceCallback::OnVoiceProcessingPassEnd"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(1)]
public void OnVoiceProcessingPassEnd()
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2VoiceCallback*, void>)(lpVtbl[1]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this));
#else
((delegate* unmanaged[Stdcall]<IXAudio2VoiceCallback*, void>)(lpVtbl[1]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2VoiceCallback::OnStreamEnd"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(2)]
public void OnStreamEnd()
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2VoiceCallback*, void>)(lpVtbl[2]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this));
#else
((delegate* unmanaged[Stdcall]<IXAudio2VoiceCallback*, void>)(lpVtbl[2]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this));
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2VoiceCallback::OnBufferStart"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(3)]
public void OnBufferStart(void* pBufferContext)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2VoiceCallback*, void*, void>)(lpVtbl[3]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this), pBufferContext);
#else
((delegate* unmanaged[Stdcall]<IXAudio2VoiceCallback*, void*, void>)(lpVtbl[3]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this), pBufferContext);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2VoiceCallback::OnBufferEnd"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(4)]
public void OnBufferEnd(void* pBufferContext)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2VoiceCallback*, void*, void>)(lpVtbl[4]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this), pBufferContext);
#else
((delegate* unmanaged[Stdcall]<IXAudio2VoiceCallback*, void*, void>)(lpVtbl[4]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this), pBufferContext);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2VoiceCallback::OnLoopEnd"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(5)]
public void OnLoopEnd(void* pBufferContext)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2VoiceCallback*, void*, void>)(lpVtbl[5]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this), pBufferContext);
#else
((delegate* unmanaged[Stdcall]<IXAudio2VoiceCallback*, void*, void>)(lpVtbl[5]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this), pBufferContext);
#endif
}
/// <include file='../XAudio2.xml' path='doc/member[@name="IXAudio2VoiceCallback::OnVoiceError"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(6)]
public void OnVoiceError(void* pBufferContext, HResult Error)
{
#if NET6_0_OR_GREATER
((delegate* unmanaged<IXAudio2VoiceCallback*, void*, HResult, void>)(lpVtbl[6]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this), pBufferContext, Error);
#else
((delegate* unmanaged[Stdcall]<IXAudio2VoiceCallback*, void*, HResult, void>)(lpVtbl[6]))((IXAudio2VoiceCallback*)Unsafe.AsPointer(ref this), pBufferContext, Error);
#endif
}
public interface Interface
{
[VtblIndex(0)]
void OnVoiceProcessingPassStart(uint BytesRequired);
[VtblIndex(1)]
void OnVoiceProcessingPassEnd();
[VtblIndex(2)]
void OnStreamEnd();
[VtblIndex(3)]
void OnBufferStart(void* pBufferContext);
[VtblIndex(4)]
void OnBufferEnd(void* pBufferContext);
[VtblIndex(5)]
void OnLoopEnd(void* pBufferContext);
[VtblIndex(6)]
void OnVoiceError(void* pBufferContext, HResult Error);
}
}

View File

@@ -0,0 +1,33 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
public static unsafe partial class Apis
{
/// <include file='../XAudio2.xml' path='doc/member[@name="CreateFX"]/*' />
[DllImport("XAudio2_9.dll", ExactSpelling = true)]
public static extern HResult CreateFX(Guid* clsid, IUnknown** pEffect, void* pInitDat, uint InitDataByteSize);
/// <include file='../XAudio2.xml' path='doc/member[@name="XAudio2CreateWithVersionInfo"]/*' />
[DllImport("XAudio2_9.dll", ExactSpelling = true)]
public static extern HResult XAudio2CreateWithVersionInfo(IXAudio2** ppXAudio2, uint Flags, uint XAudio2Processor, uint ntddiVersion);
/// <include file='../XAudio2.xml' path='doc/member[@name="CreateAudioVolumeMeter"]/*' />
[DllImport("xaudio2_9.dll", ExactSpelling = true)]
public static extern HResult CreateAudioVolumeMeter(IUnknown** ppApo);
/// <include file='../XAudio2.xml' path='doc/member[@name="CreateAudioReverb"]/*' />
[DllImport("xaudio2_9.dll", ExactSpelling = true)]
public static extern HResult CreateAudioReverb(IUnknown** ppApo);
/// <include file='../XAudio2.xml' path='doc/member[@name="CreateHrtfApo"]/*' />
[DllImport("HrtfApo.dll", ExactSpelling = true)]
public static extern HResult CreateHrtfApo(HrtfApoInit* init, IXAPO** xApo);
}

View File

@@ -0,0 +1,462 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
public static partial class Apis
{
public const uint FXEQ_MIN_FRAMERATE = 22000;
public const uint FXEQ_MAX_FRAMERATE = 48000;
public const float FXEQ_MIN_FREQUENCY_CENTER = 20f;
public const float FXEQ_MAX_FREQUENCY_CENTER = 20000f;
public const float FXEQ_DEFAULT_FREQUENCY_CENTER_0 = 100f;
public const float FXEQ_DEFAULT_FREQUENCY_CENTER_1 = 800f;
public const float FXEQ_DEFAULT_FREQUENCY_CENTER_2 = 2000f;
public const float FXEQ_DEFAULT_FREQUENCY_CENTER_3 = 10000f;
public const float FXEQ_MIN_GAIN = 0.126f;
public const float FXEQ_MAX_GAIN = 7.94f;
public const float FXEQ_DEFAULT_GAIN = 1f;
public const float FXEQ_MIN_BANDWIDTH = 0.1f;
public const float FXEQ_MAX_BANDWIDTH = 2f;
public const float FXEQ_DEFAULT_BANDWIDTH = 1f;
public const uint FXMASTERINGLIMITER_MIN_RELEASE = 1;
public const uint FXMASTERINGLIMITER_MAX_RELEASE = 20;
public const uint FXMASTERINGLIMITER_DEFAULT_RELEASE = 6;
public const uint FXMASTERINGLIMITER_MIN_LOUDNESS = 1;
public const uint FXMASTERINGLIMITER_MAX_LOUDNESS = 1800;
public const uint FXMASTERINGLIMITER_DEFAULT_LOUDNESS = 1000;
public const float FXREVERB_MIN_DIFFUSION = 0f;
public const float FXREVERB_MAX_DIFFUSION = 1f;
public const float FXREVERB_DEFAULT_DIFFUSION = 0.9f;
public const float FXREVERB_MIN_ROOMSIZE = 0.0001f;
public const float FXREVERB_MAX_ROOMSIZE = 1f;
public const float FXREVERB_DEFAULT_ROOMSIZE = 0.6f;
public const uint FXLOUDNESS_DEFAULT_MOMENTARY_MS = 400;
public const uint FXLOUDNESS_DEFAULT_SHORTTERM_MS = 3000;
public const float FXECHO_MIN_WETDRYMIX = 0f;
public const float FXECHO_MAX_WETDRYMIX = 1f;
public const float FXECHO_DEFAULT_WETDRYMIX = 0.5f;
public const float FXECHO_MIN_FEEDBACK = 0f;
public const float FXECHO_MAX_FEEDBACK = 1f;
public const float FXECHO_DEFAULT_FEEDBACK = 0.5f;
public const float FXECHO_MIN_DELAY = 1f;
public const float FXECHO_MAX_DELAY = 2000f;
public const float FXECHO_DEFAULT_DELAY = 500f;
public const string XAUDIO2_DLL_A = "xaudio2_9.dll";
public const string XAUDIO2_DLL_W = "xaudio2_9.dll";
public const string XAUDIO2D_DLL_A = "xaudio2_9d.dll";
public const string XAUDIO2D_DLL_W = "xaudio2_9d.dll";
public const string XAUDIO2_DLL = "xaudio2_9.dll";
public const string XAUDIO2D_DLL = "xaudio2_9d.dll";
public const uint XAUDIO2_MAX_BUFFER_BYTES = 2147483648;
public const uint XAUDIO2_MAX_QUEUED_BUFFERS = 64;
public const uint XAUDIO2_MAX_BUFFERS_SYSTEM = 2;
public const uint XAUDIO2_MAX_AUDIO_CHANNELS = 64;
public const uint XAUDIO2_MIN_SAMPLE_RATE = 1000;
public const uint XAUDIO2_MAX_SAMPLE_RATE = 200000;
public const float XAUDIO2_MAX_VOLUME_LEVEL = 16777216f;
public const float XAUDIO2_MAX_FREQ_RATIO = 1024f;
public const float XAUDIO2_DEFAULT_FREQ_RATIO = 2f;
public const float XAUDIO2_MAX_FILTER_ONEOVERQ = 1.5f;
public const float XAUDIO2_MAX_FILTER_FREQUENCY = 1f;
public const uint XAUDIO2_MAX_LOOP_COUNT = 254;
public const uint XAUDIO2_MAX_INSTANCES = 8;
public const uint XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MONO = 600000;
public const uint XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MULTICHANNEL = 300000;
public const uint XAUDIO2_COMMIT_NOW = 0;
public const uint XAUDIO2_COMMIT_ALL = 0;
public const uint XAUDIO2_NO_LOOP_REGION = 0;
public const uint XAUDIO2_LOOP_INFINITE = 255;
public const uint XAUDIO2_DEFAULT_CHANNELS = 0;
public const uint XAUDIO2_DEFAULT_SAMPLERATE = 0;
public const uint XAUDIO2_DEBUG_ENGINE = 1;
public const uint XAUDIO2_VOICE_NOPITCH = 2;
public const uint XAUDIO2_VOICE_NOSRC = 4;
public const uint XAUDIO2_VOICE_USEFILTER = 8;
public const uint XAUDIO2_PLAY_TAILS = 32;
public const uint XAUDIO2_END_OF_STREAM = 64;
public const uint XAUDIO2_SEND_USEFILTER = 128;
public const uint XAUDIO2_VOICE_NOSAMPLESPLAYED = 256;
public const uint XAUDIO2_STOP_ENGINE_WHEN_IDLE = 8192;
public const uint XAUDIO2_1024_QUANTUM = 32768;
public const uint XAUDIO2_NO_VIRTUAL_AUDIO_CLIENT = 65536;
public const float XAUDIO2_DEFAULT_FILTER_FREQUENCY = 1f;
public const float XAUDIO2_DEFAULT_FILTER_ONEOVERQ = 1f;
public const uint XAUDIO2_QUANTUM_NUMERATOR = 1;
public const uint XAUDIO2_QUANTUM_DENOMINATOR = 100;
public const uint FACILITY_XAUDIO2 = 2198;
public static readonly HResult XAUDIO2_E_INVALID_CALL = -2003435519;
public static readonly HResult XAUDIO2_E_XMA_DECODER_ERROR = -2003435518;
public static readonly HResult XAUDIO2_E_XAPO_CREATION_FAILED = -2003435517;
public static readonly HResult XAUDIO2_E_DEVICE_INVALIDATED = -2003435516;
public const uint Processor1 = 1;
public const uint Processor2 = 2;
public const uint Processor3 = 4;
public const uint Processor4 = 8;
public const uint Processor5 = 16;
public const uint Processor6 = 32;
public const uint Processor7 = 64;
public const uint Processor8 = 128;
public const uint Processor9 = 256;
public const uint Processor10 = 512;
public const uint Processor11 = 1024;
public const uint Processor12 = 2048;
public const uint Processor13 = 4096;
public const uint Processor14 = 8192;
public const uint Processor15 = 16384;
public const uint Processor16 = 32768;
public const uint Processor17 = 65536;
public const uint Processor18 = 131072;
public const uint Processor19 = 262144;
public const uint Processor20 = 524288;
public const uint Processor21 = 1048576;
public const uint Processor22 = 2097152;
public const uint Processor23 = 4194304;
public const uint Processor24 = 8388608;
public const uint Processor25 = 16777216;
public const uint Processor26 = 33554432;
public const uint Processor27 = 67108864;
public const uint Processor28 = 134217728;
public const uint Processor29 = 268435456;
public const uint Processor30 = 536870912;
public const uint Processor31 = 1073741824;
public const uint Processor32 = 2147483648;
public const uint XAUDIO2_ANY_PROCESSOR = 4294967295;
public const uint XAUDIO2_USE_DEFAULT_PROCESSOR = 0;
public const uint XAUDIO2_DEFAULT_PROCESSOR = 1;
public const uint XAUDIO2_LOG_ERRORS = 1;
public const uint XAUDIO2_LOG_WARNINGS = 2;
public const uint XAUDIO2_LOG_INFO = 4;
public const uint XAUDIO2_LOG_DETAIL = 8;
public const uint XAUDIO2_LOG_API_CALLS = 16;
public const uint XAUDIO2_LOG_FUNC_CALLS = 32;
public const uint XAUDIO2_LOG_TIMING = 64;
public const uint XAUDIO2_LOG_LOCKS = 128;
public const uint XAUDIO2_LOG_MEMORY = 256;
public const uint XAUDIO2_LOG_STREAMING = 4096;
public const uint XAUDIO2FX_REVERB_MIN_FRAMERATE = 20000;
public const uint XAUDIO2FX_REVERB_MAX_FRAMERATE = 48000;
public const float XAUDIO2FX_REVERB_MIN_WET_DRY_MIX = 0f;
public const uint XAUDIO2FX_REVERB_MIN_REFLECTIONS_DELAY = 0;
public const uint XAUDIO2FX_REVERB_MIN_REVERB_DELAY = 0;
public const uint XAUDIO2FX_REVERB_MIN_REAR_DELAY = 0;
public const uint XAUDIO2FX_REVERB_MIN_7POINT1_SIDE_DELAY = 0;
public const uint XAUDIO2FX_REVERB_MIN_7POINT1_REAR_DELAY = 0;
public const uint XAUDIO2FX_REVERB_MIN_POSITION = 0;
public const uint XAUDIO2FX_REVERB_MIN_DIFFUSION = 0;
public const uint XAUDIO2FX_REVERB_MIN_LOW_EQ_GAIN = 0;
public const uint XAUDIO2FX_REVERB_MIN_LOW_EQ_CUTOFF = 0;
public const uint XAUDIO2FX_REVERB_MIN_HIGH_EQ_GAIN = 0;
public const uint XAUDIO2FX_REVERB_MIN_HIGH_EQ_CUTOFF = 0;
public const float XAUDIO2FX_REVERB_MIN_ROOM_FILTER_FREQ = 20f;
public const float XAUDIO2FX_REVERB_MIN_ROOM_FILTER_MAIN = -100f;
public const float XAUDIO2FX_REVERB_MIN_ROOM_FILTER_HF = -100f;
public const float XAUDIO2FX_REVERB_MIN_REFLECTIONS_GAIN = -100f;
public const float XAUDIO2FX_REVERB_MIN_REVERB_GAIN = -100f;
public const float XAUDIO2FX_REVERB_MIN_DECAY_TIME = 0.1f;
public const float XAUDIO2FX_REVERB_MIN_DENSITY = 0f;
public const float XAUDIO2FX_REVERB_MIN_ROOM_SIZE = 0f;
public const float XAUDIO2FX_REVERB_MAX_WET_DRY_MIX = 100f;
public const uint XAUDIO2FX_REVERB_MAX_REFLECTIONS_DELAY = 300;
public const uint XAUDIO2FX_REVERB_MAX_REVERB_DELAY = 85;
public const uint XAUDIO2FX_REVERB_MAX_REAR_DELAY = 5;
public const uint XAUDIO2FX_REVERB_MAX_7POINT1_SIDE_DELAY = 5;
public const uint XAUDIO2FX_REVERB_MAX_7POINT1_REAR_DELAY = 20;
public const uint XAUDIO2FX_REVERB_MAX_POSITION = 30;
public const uint XAUDIO2FX_REVERB_MAX_DIFFUSION = 15;
public const uint XAUDIO2FX_REVERB_MAX_LOW_EQ_GAIN = 12;
public const uint XAUDIO2FX_REVERB_MAX_LOW_EQ_CUTOFF = 9;
public const uint XAUDIO2FX_REVERB_MAX_HIGH_EQ_GAIN = 8;
public const uint XAUDIO2FX_REVERB_MAX_HIGH_EQ_CUTOFF = 14;
public const float XAUDIO2FX_REVERB_MAX_ROOM_FILTER_FREQ = 20000f;
public const float XAUDIO2FX_REVERB_MAX_ROOM_FILTER_MAIN = 0f;
public const float XAUDIO2FX_REVERB_MAX_ROOM_FILTER_HF = 0f;
public const float XAUDIO2FX_REVERB_MAX_REFLECTIONS_GAIN = 20f;
public const float XAUDIO2FX_REVERB_MAX_REVERB_GAIN = 20f;
public const float XAUDIO2FX_REVERB_MAX_DENSITY = 100f;
public const float XAUDIO2FX_REVERB_MAX_ROOM_SIZE = 100f;
public const float XAUDIO2FX_REVERB_DEFAULT_WET_DRY_MIX = 100f;
public const uint XAUDIO2FX_REVERB_DEFAULT_REFLECTIONS_DELAY = 5;
public const uint XAUDIO2FX_REVERB_DEFAULT_REVERB_DELAY = 5;
public const uint XAUDIO2FX_REVERB_DEFAULT_REAR_DELAY = 5;
public const uint XAUDIO2FX_REVERB_DEFAULT_7POINT1_SIDE_DELAY = 5;
public const uint XAUDIO2FX_REVERB_DEFAULT_7POINT1_REAR_DELAY = 20;
public const uint XAUDIO2FX_REVERB_DEFAULT_POSITION = 6;
public const uint XAUDIO2FX_REVERB_DEFAULT_POSITION_MATRIX = 27;
public const uint XAUDIO2FX_REVERB_DEFAULT_EARLY_DIFFUSION = 8;
public const uint XAUDIO2FX_REVERB_DEFAULT_LATE_DIFFUSION = 8;
public const uint XAUDIO2FX_REVERB_DEFAULT_LOW_EQ_GAIN = 8;
public const uint XAUDIO2FX_REVERB_DEFAULT_LOW_EQ_CUTOFF = 4;
public const uint XAUDIO2FX_REVERB_DEFAULT_HIGH_EQ_GAIN = 8;
public const uint XAUDIO2FX_REVERB_DEFAULT_HIGH_EQ_CUTOFF = 4;
public const float XAUDIO2FX_REVERB_DEFAULT_ROOM_FILTER_FREQ = 5000f;
public const float XAUDIO2FX_REVERB_DEFAULT_ROOM_FILTER_MAIN = 0f;
public const float XAUDIO2FX_REVERB_DEFAULT_ROOM_FILTER_HF = 0f;
public const float XAUDIO2FX_REVERB_DEFAULT_REFLECTIONS_GAIN = 0f;
public const float XAUDIO2FX_REVERB_DEFAULT_REVERB_GAIN = 0f;
public const float XAUDIO2FX_REVERB_DEFAULT_DECAY_TIME = 1f;
public const float XAUDIO2FX_REVERB_DEFAULT_DENSITY = 100f;
public const float XAUDIO2FX_REVERB_DEFAULT_ROOM_SIZE = 100f;
public const uint XAUDIO2FX_REVERB_DEFAULT_DISABLE_LATE_FIELD = 0;
public const float HRTF_MAX_GAIN_LIMIT = 12f;
public const float HRTF_MIN_GAIN_LIMIT = -96f;
public const float HRTF_MIN_UNITY_GAIN_DISTANCE = 0.05f;
public const float HRTF_DEFAULT_UNITY_GAIN_DISTANCE = 1f;
public const uint FACILITY_XAPO = 2199;
public static readonly HResult XAPO_E_FORMAT_UNSUPPORTED = -2003369983;
public const uint XAPO_MIN_CHANNELS = 1;
public const uint XAPO_MAX_CHANNELS = 64;
public const uint XAPO_MIN_FRAMERATE = 1000;
public const uint XAPO_MAX_FRAMERATE = 200000;
public const uint XAPO_REGISTRATION_STRING_LENGTH = 256;
public const uint XAPO_FLAG_CHANNELS_MUST_MATCH = 1;
public const uint XAPO_FLAG_FRAMERATE_MUST_MATCH = 2;
public const uint XAPO_FLAG_BITSPERSAMPLE_MUST_MATCH = 4;
public const uint XAPO_FLAG_BUFFERCOUNT_MUST_MATCH = 8;
public const uint XAPO_FLAG_INPLACE_REQUIRED = 32;
public const uint XAPO_FLAG_INPLACE_SUPPORTED = 16;
public const uint SPEAKER_MONO = 4;
public const uint X3DAUDIO_HANDLE_BYTESIZE = 20;
public const float X3DAUDIO_PI = 3.1415927f;
public const float X3DAUDIO_2PI = 6.2831855f;
public const float X3DAUDIO_SPEED_OF_SOUND = 343.5f;
public const uint X3DAUDIO_CALCULATE_MATRIX = 1;
public const uint X3DAUDIO_CALCULATE_DELAY = 2;
public const uint X3DAUDIO_CALCULATE_LPF_DIRECT = 4;
public const uint X3DAUDIO_CALCULATE_LPF_REVERB = 8;
public const uint X3DAUDIO_CALCULATE_REVERB = 16;
public const uint X3DAUDIO_CALCULATE_DOPPLER = 32;
public const uint X3DAUDIO_CALCULATE_EMITTER_ANGLE = 64;
public const uint X3DAUDIO_CALCULATE_ZEROCENTER = 65536;
public const uint X3DAUDIO_CALCULATE_REDIRECT_TO_LFE = 131072;
}

View File

@@ -0,0 +1,93 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_BUFFER_FLAGS"]/*' />
/// <unmanaged>XAPO_BUFFER_FLAGS</unmanaged>
[Flags]
public enum XAPOBufferFlags
{
None = 0,
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_BUFFER_FLAGS::XAPO_BUFFER_SILENT"]/*' />
/// <unmanaged>XAPO_BUFFER_SILENT</unmanaged>
Silent = 0,
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_BUFFER_FLAGS::XAPO_BUFFER_VALID"]/*' />
/// <unmanaged>XAPO_BUFFER_VALID</unmanaged>
Valid = 1,
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_FILTER_TYPE"]/*' />
/// <unmanaged>XAUDIO2_FILTER_TYPE</unmanaged>
public enum FilterType
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_FILTER_TYPE::LowPassFilter"]/*' />
/// <unmanaged>LowPassFilter</unmanaged>
LowPassFilter = 0,
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_FILTER_TYPE::BandPassFilter"]/*' />
/// <unmanaged>BandPassFilter</unmanaged>
BandPassFilter = 1,
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_FILTER_TYPE::HighPassFilter"]/*' />
/// <unmanaged>HighPassFilter</unmanaged>
HighPassFilter = 2,
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_FILTER_TYPE::NotchFilter"]/*' />
/// <unmanaged>NotchFilter</unmanaged>
NotchFilter = 3,
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_FILTER_TYPE::LowPassOnePoleFilter"]/*' />
/// <unmanaged>LowPassOnePoleFilter</unmanaged>
LowPassOnePoleFilter = 4,
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_FILTER_TYPE::HighPassOnePoleFilter"]/*' />
/// <unmanaged>HighPassOnePoleFilter</unmanaged>
HighPassOnePoleFilter = 5,
}
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivityType"]/*' />
/// <unmanaged>HrtfDirectivityType</unmanaged>
public enum HrtfDirectivityType
{
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivityType::OmniDirectional"]/*' />
/// <unmanaged>OmniDirectional</unmanaged>
OmniDirectional = 0,
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivityType::Cardioid"]/*' />
/// <unmanaged>Cardioid</unmanaged>
Cardioid = 1,
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivityType::Cone"]/*' />
/// <unmanaged>Cone</unmanaged>
Cone = 2,
}
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfEnvironment"]/*' />
/// <unmanaged>HrtfEnvironment</unmanaged>
public enum HrtfEnvironment
{
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfEnvironment::Small"]/*' />
/// <unmanaged>Small</unmanaged>
Small = 0,
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfEnvironment::Medium"]/*' />
/// <unmanaged>Medium</unmanaged>
Medium = 1,
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfEnvironment::Large"]/*' />
/// <unmanaged>Large</unmanaged>
Large = 2,
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfEnvironment::Outdoors"]/*' />
/// <unmanaged>Outdoors</unmanaged>
Outdoors = 3,
}
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDistanceDecayType"]/*' />
/// <unmanaged>HrtfDistanceDecayType</unmanaged>
public enum HrtfDistanceDecayType
{
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDistanceDecayType::NaturalDecay"]/*' />
/// <unmanaged>NaturalDecay</unmanaged>
NaturalDecay = 0,
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDistanceDecayType::CustomDecay"]/*' />
/// <unmanaged>CustomDecay</unmanaged>
CustomDecay = 1,
}

View File

@@ -0,0 +1,584 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
namespace Win32.Media.Audio.XAudio2;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_REGISTRATION_PROPERTIES"]/*' />
/// <unmanaged>XAPO_REGISTRATION_PROPERTIES</unmanaged>
public partial struct XAPORegistrationProperties
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_REGISTRATION_PROPERTIES::clsid"]/*' />
public Guid clsid;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_REGISTRATION_PROPERTIES::FriendlyName"]/*' />
public unsafe fixed ushort FriendlyName[256];
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_REGISTRATION_PROPERTIES::CopyrightInfo"]/*' />
public unsafe fixed ushort CopyrightInfo[256];
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_REGISTRATION_PROPERTIES::MajorVersion"]/*' />
public uint MajorVersion;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_REGISTRATION_PROPERTIES::MinorVersion"]/*' />
public uint MinorVersion;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_REGISTRATION_PROPERTIES::Flags"]/*' />
public uint Flags;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_REGISTRATION_PROPERTIES::MinInputBufferCount"]/*' />
public uint MinInputBufferCount;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_REGISTRATION_PROPERTIES::MaxInputBufferCount"]/*' />
public uint MaxInputBufferCount;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_REGISTRATION_PROPERTIES::MinOutputBufferCount"]/*' />
public uint MinOutputBufferCount;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_REGISTRATION_PROPERTIES::MaxOutputBufferCount"]/*' />
public uint MaxOutputBufferCount;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_LOCKFORPROCESS_PARAMETERS"]/*' />
/// <unmanaged>XAPO_LOCKFORPROCESS_PARAMETERS</unmanaged>
public partial struct XAPOLockForProcessParameters
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_LOCKFORPROCESS_PARAMETERS::pFormat"]/*' />
public unsafe Media.Audio.WaveFormatEx* pFormat;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_LOCKFORPROCESS_PARAMETERS::MaxFrameCount"]/*' />
public uint MaxFrameCount;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_PROCESS_BUFFER_PARAMETERS"]/*' />
/// <unmanaged>XAPO_PROCESS_BUFFER_PARAMETERS</unmanaged>
public partial struct XAPOProcessBufferParameters
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_PROCESS_BUFFER_PARAMETERS::pBuffer"]/*' />
public unsafe void* pBuffer;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_PROCESS_BUFFER_PARAMETERS::BufferFlags"]/*' />
public XAPOBufferFlags BufferFlags;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAPO_PROCESS_BUFFER_PARAMETERS::ValidFrameCount"]/*' />
public uint ValidFrameCount;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="FXEQ_PARAMETERS"]/*' />
/// <unmanaged>FXEQ_PARAMETERS</unmanaged>
public partial struct FXEQParameters
{
/// <include file='../XAudio2.xml' path='doc/member[@name="FXEQ_PARAMETERS::FrequencyCenter0"]/*' />
public float FrequencyCenter0;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXEQ_PARAMETERS::Gain0"]/*' />
public float Gain0;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXEQ_PARAMETERS::Bandwidth0"]/*' />
public float Bandwidth0;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXEQ_PARAMETERS::FrequencyCenter1"]/*' />
public float FrequencyCenter1;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXEQ_PARAMETERS::Gain1"]/*' />
public float Gain1;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXEQ_PARAMETERS::Bandwidth1"]/*' />
public float Bandwidth1;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXEQ_PARAMETERS::FrequencyCenter2"]/*' />
public float FrequencyCenter2;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXEQ_PARAMETERS::Gain2"]/*' />
public float Gain2;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXEQ_PARAMETERS::Bandwidth2"]/*' />
public float Bandwidth2;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXEQ_PARAMETERS::FrequencyCenter3"]/*' />
public float FrequencyCenter3;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXEQ_PARAMETERS::Gain3"]/*' />
public float Gain3;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXEQ_PARAMETERS::Bandwidth3"]/*' />
public float Bandwidth3;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="FXMASTERINGLIMITER_PARAMETERS"]/*' />
/// <unmanaged>FXMASTERINGLIMITER_PARAMETERS</unmanaged>
public partial struct FxMasteringLimiterParameters
{
/// <include file='../XAudio2.xml' path='doc/member[@name="FXMASTERINGLIMITER_PARAMETERS::Release"]/*' />
public uint Release;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXMASTERINGLIMITER_PARAMETERS::Loudness"]/*' />
public uint Loudness;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="FXREVERB_PARAMETERS"]/*' />
/// <unmanaged>FXREVERB_PARAMETERS</unmanaged>
public partial struct FxReverbParameters
{
/// <include file='../XAudio2.xml' path='doc/member[@name="FXREVERB_PARAMETERS::Diffusion"]/*' />
public float Diffusion;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXREVERB_PARAMETERS::RoomSize"]/*' />
public float RoomSize;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="FXECHO_INITDATA"]/*' />
/// <unmanaged>FXECHO_INITDATA</unmanaged>
public partial struct FxEchoInitData
{
/// <include file='../XAudio2.xml' path='doc/member[@name="FXECHO_INITDATA::MaxDelay"]/*' />
public float MaxDelay;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="FXECHO_PARAMETERS"]/*' />
/// <unmanaged>FXECHO_PARAMETERS</unmanaged>
public partial struct FxEchoParameters
{
/// <include file='../XAudio2.xml' path='doc/member[@name="FXECHO_PARAMETERS::WetDryMix"]/*' />
public float WetDryMix;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXECHO_PARAMETERS::Feedback"]/*' />
public float Feedback;
/// <include file='../XAudio2.xml' path='doc/member[@name="FXECHO_PARAMETERS::Delay"]/*' />
public float Delay;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_VOICE_DETAILS"]/*' />
/// <unmanaged>XAUDIO2_VOICE_DETAILS</unmanaged>
public partial struct VoiceDetails
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_VOICE_DETAILS::CreationFlags"]/*' />
public uint CreationFlags;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_VOICE_DETAILS::ActiveFlags"]/*' />
public uint ActiveFlags;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_VOICE_DETAILS::InputChannels"]/*' />
public uint InputChannels;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_VOICE_DETAILS::InputSampleRate"]/*' />
public uint InputSampleRate;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_SEND_DESCRIPTOR"]/*' />
/// <unmanaged>XAUDIO2_SEND_DESCRIPTOR</unmanaged>
public partial struct SendDescriptor
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_SEND_DESCRIPTOR::Flags"]/*' />
public uint Flags;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_SEND_DESCRIPTOR::pOutputVoice"]/*' />
public unsafe IXAudio2Voice* pOutputVoice;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_VOICE_SENDS"]/*' />
/// <unmanaged>XAUDIO2_VOICE_SENDS</unmanaged>
public partial struct VoiceSends
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_VOICE_SENDS::SendCount"]/*' />
public uint SendCount;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_VOICE_SENDS::pSends"]/*' />
public unsafe SendDescriptor* pSends;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_EFFECT_DESCRIPTOR"]/*' />
/// <unmanaged>XAUDIO2_EFFECT_DESCRIPTOR</unmanaged>
public partial struct EffectDescriptor
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_EFFECT_DESCRIPTOR::pEffect"]/*' />
public unsafe IUnknown* pEffect;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_EFFECT_DESCRIPTOR::InitialState"]/*' />
public Bool32 InitialState;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_EFFECT_DESCRIPTOR::OutputChannels"]/*' />
public uint OutputChannels;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_EFFECT_CHAIN"]/*' />
/// <unmanaged>XAUDIO2_EFFECT_CHAIN</unmanaged>
public partial struct EffectChain
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_EFFECT_CHAIN::EffectCount"]/*' />
public uint EffectCount;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_EFFECT_CHAIN::pEffectDescriptors"]/*' />
public unsafe EffectDescriptor* pEffectDescriptors;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_FILTER_PARAMETERS"]/*' />
/// <unmanaged>XAUDIO2_FILTER_PARAMETERS</unmanaged>
public partial struct FilterParameters
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_FILTER_PARAMETERS::Type"]/*' />
public FilterType Type;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_FILTER_PARAMETERS::Frequency"]/*' />
public float Frequency;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_FILTER_PARAMETERS::OneOverQ"]/*' />
public float OneOverQ;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_BUFFER"]/*' />
/// <unmanaged>XAUDIO2_BUFFER</unmanaged>
public partial struct Buffer
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_BUFFER::Flags"]/*' />
public uint Flags;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_BUFFER::AudioBytes"]/*' />
public uint AudioBytes;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_BUFFER::pAudioData"]/*' />
public unsafe byte* pAudioData;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_BUFFER::PlayBegin"]/*' />
public uint PlayBegin;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_BUFFER::PlayLength"]/*' />
public uint PlayLength;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_BUFFER::LoopBegin"]/*' />
public uint LoopBegin;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_BUFFER::LoopLength"]/*' />
public uint LoopLength;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_BUFFER::LoopCount"]/*' />
public uint LoopCount;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_BUFFER::pContext"]/*' />
public unsafe void* pContext;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_BUFFER_WMA"]/*' />
/// <unmanaged>XAUDIO2_BUFFER_WMA</unmanaged>
public partial struct BufferWma
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_BUFFER_WMA::pDecodedPacketCumulativeBytes"]/*' />
public unsafe uint* pDecodedPacketCumulativeBytes;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_BUFFER_WMA::PacketCount"]/*' />
public uint PacketCount;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_VOICE_STATE"]/*' />
/// <unmanaged>XAUDIO2_VOICE_STATE</unmanaged>
public partial struct VoiceState
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_VOICE_STATE::pCurrentBufferContext"]/*' />
public unsafe void* pCurrentBufferContext;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_VOICE_STATE::BuffersQueued"]/*' />
public uint BuffersQueued;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_VOICE_STATE::SamplesPlayed"]/*' />
public ulong SamplesPlayed;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA"]/*' />
/// <unmanaged>XAUDIO2_PERFORMANCE_DATA</unmanaged>
public partial struct PerformanceData
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::AudioCyclesSinceLastQuery"]/*' />
public ulong AudioCyclesSinceLastQuery;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::TotalCyclesSinceLastQuery"]/*' />
public ulong TotalCyclesSinceLastQuery;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::MinimumCyclesPerQuantum"]/*' />
public uint MinimumCyclesPerQuantum;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::MaximumCyclesPerQuantum"]/*' />
public uint MaximumCyclesPerQuantum;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::MemoryUsageInBytes"]/*' />
public uint MemoryUsageInBytes;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::CurrentLatencyInSamples"]/*' />
public uint CurrentLatencyInSamples;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::GlitchesSinceEngineStarted"]/*' />
public uint GlitchesSinceEngineStarted;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::ActiveSourceVoiceCount"]/*' />
public uint ActiveSourceVoiceCount;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::TotalSourceVoiceCount"]/*' />
public uint TotalSourceVoiceCount;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::ActiveSubmixVoiceCount"]/*' />
public uint ActiveSubmixVoiceCount;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::ActiveResamplerCount"]/*' />
public uint ActiveResamplerCount;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::ActiveMatrixMixCount"]/*' />
public uint ActiveMatrixMixCount;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::ActiveXmaSourceVoices"]/*' />
public uint ActiveXmaSourceVoices;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_PERFORMANCE_DATA::ActiveXmaStreams"]/*' />
public uint ActiveXmaStreams;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_DEBUG_CONFIGURATION"]/*' />
/// <unmanaged>XAUDIO2_DEBUG_CONFIGURATION</unmanaged>
public partial struct DebugConfiguration
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_DEBUG_CONFIGURATION::TraceMask"]/*' />
public uint TraceMask;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_DEBUG_CONFIGURATION::BreakMask"]/*' />
public uint BreakMask;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_DEBUG_CONFIGURATION::LogThreadID"]/*' />
public Bool32 LogThreadID;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_DEBUG_CONFIGURATION::LogFileline"]/*' />
public Bool32 LogFileline;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_DEBUG_CONFIGURATION::LogFunctionName"]/*' />
public Bool32 LogFunctionName;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2_DEBUG_CONFIGURATION::LogTiming"]/*' />
public Bool32 LogTiming;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_VOLUMEMETER_LEVELS"]/*' />
/// <unmanaged>XAUDIO2FX_VOLUMEMETER_LEVELS</unmanaged>
public partial struct FXVolumeMeterLevels
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_VOLUMEMETER_LEVELS::pPeakLevels"]/*' />
public unsafe float* pPeakLevels;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_VOLUMEMETER_LEVELS::pRMSLevels"]/*' />
public unsafe float* pRMSLevels;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_VOLUMEMETER_LEVELS::ChannelCount"]/*' />
public uint ChannelCount;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS"]/*' />
/// <unmanaged>XAUDIO2FX_REVERB_PARAMETERS</unmanaged>
public partial struct FXReverbParameters
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::WetDryMix"]/*' />
public float WetDryMix;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::ReflectionsDelay"]/*' />
public uint ReflectionsDelay;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::ReverbDelay"]/*' />
public byte ReverbDelay;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::RearDelay"]/*' />
public byte RearDelay;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::SideDelay"]/*' />
public byte SideDelay;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::PositionLeft"]/*' />
public byte PositionLeft;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::PositionRight"]/*' />
public byte PositionRight;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::PositionMatrixLeft"]/*' />
public byte PositionMatrixLeft;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::PositionMatrixRight"]/*' />
public byte PositionMatrixRight;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::EarlyDiffusion"]/*' />
public byte EarlyDiffusion;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::LateDiffusion"]/*' />
public byte LateDiffusion;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::LowEQGain"]/*' />
public byte LowEQGain;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::LowEQCutoff"]/*' />
public byte LowEQCutoff;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::HighEQGain"]/*' />
public byte HighEQGain;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::HighEQCutoff"]/*' />
public byte HighEQCutoff;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::RoomFilterFreq"]/*' />
public float RoomFilterFreq;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::RoomFilterMain"]/*' />
public float RoomFilterMain;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::RoomFilterHF"]/*' />
public float RoomFilterHF;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::ReflectionsGain"]/*' />
public float ReflectionsGain;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::ReverbGain"]/*' />
public float ReverbGain;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::DecayTime"]/*' />
public float DecayTime;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::Density"]/*' />
public float Density;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::RoomSize"]/*' />
public float RoomSize;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_PARAMETERS::DisableLateField"]/*' />
public Bool32 DisableLateField;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS"]/*' />
/// <unmanaged>XAUDIO2FX_REVERB_I3DL2_PARAMETERS</unmanaged>
public partial struct FXReverbI3DL2Parameters
{
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS::WetDryMix"]/*' />
public float WetDryMix;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS::Room"]/*' />
public int Room;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS::RoomHF"]/*' />
public int RoomHF;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS::RoomRolloffFactor"]/*' />
public float RoomRolloffFactor;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS::DecayTime"]/*' />
public float DecayTime;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS::DecayHFRatio"]/*' />
public float DecayHFRatio;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS::Reflections"]/*' />
public int Reflections;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS::ReflectionsDelay"]/*' />
public float ReflectionsDelay;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS::Reverb"]/*' />
public int Reverb;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS::ReverbDelay"]/*' />
public float ReverbDelay;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS::Diffusion"]/*' />
public float Diffusion;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS::Density"]/*' />
public float Density;
/// <include file='../XAudio2.xml' path='doc/member[@name="XAUDIO2FX_REVERB_I3DL2_PARAMETERS::HFReference"]/*' />
public float HFReference;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfPosition"]/*' />
/// <unmanaged>HrtfPosition</unmanaged>
public partial struct HrtfPosition
{
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfPosition::x"]/*' />
public float x;
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfPosition::y"]/*' />
public float y;
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfPosition::z"]/*' />
public float z;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfOrientation"]/*' />
/// <unmanaged>HrtfOrientation</unmanaged>
public partial struct HrtfOrientation
{
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfOrientation::element"]/*' />
public unsafe fixed float element[9];
}
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivity"]/*' />
/// <unmanaged>HrtfDirectivity</unmanaged>
public partial struct HrtfDirectivity
{
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivity::type"]/*' />
public HrtfDirectivityType type;
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivity::scaling"]/*' />
public float scaling;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivityCardioid"]/*' />
/// <unmanaged>HrtfDirectivityCardioid</unmanaged>
public partial struct HrtfDirectivityCardioid
{
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivityCardioid::directivity"]/*' />
public HrtfDirectivity directivity;
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivityCardioid::order"]/*' />
public float order;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivityCone"]/*' />
/// <unmanaged>HrtfDirectivityCone</unmanaged>
public partial struct HrtfDirectivityCone
{
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivityCone::directivity"]/*' />
public HrtfDirectivity directivity;
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivityCone::innerAngle"]/*' />
public float innerAngle;
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDirectivityCone::outerAngle"]/*' />
public float outerAngle;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDistanceDecay"]/*' />
/// <unmanaged>HrtfDistanceDecay</unmanaged>
public partial struct HrtfDistanceDecay
{
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDistanceDecay::type"]/*' />
public HrtfDistanceDecayType type;
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDistanceDecay::maxGain"]/*' />
public float maxGain;
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDistanceDecay::minGain"]/*' />
public float minGain;
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDistanceDecay::unityGainDistance"]/*' />
public float unityGainDistance;
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfDistanceDecay::cutoffDistance"]/*' />
public float cutoffDistance;
}
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfApoInit"]/*' />
/// <unmanaged>HrtfApoInit</unmanaged>
public partial struct HrtfApoInit
{
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfApoInit::distanceDecay"]/*' />
public unsafe HrtfDistanceDecay* distanceDecay;
/// <include file='../XAudio2.xml' path='doc/member[@name="HrtfApoInit::directivity"]/*' />
public unsafe HrtfDirectivity* directivity;
}

View File

@@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net6.0;net7.0</TargetFrameworks>
<Description>Direct3D11on12 bindings.</Description>
<NoWarn>$(NoWarn);CS0419;IDE0017</NoWarn>
</PropertyGroup>
<ItemGroup>
<Using Include="System.Numerics" />
<Using Include="System.Diagnostics" />
<Using Include="System.Runtime.CompilerServices" />
<Using Include="System.Runtime.InteropServices" />
<Using Include="System.Diagnostics.CodeAnalysis" />
<Using Include="Win32.Numerics" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Vortice.Win32.Graphics.Direct3D11\Vortice.Win32.Graphics.Direct3D11.csproj" />
<ProjectReference Include="..\Vortice.Win32.Graphics.Direct3D12\Vortice.Win32.Graphics.Direct3D12.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,773 @@
<?xml version="1.0" encoding="utf-8"?>
<doc>
<member name="IXAudio2SourceVoice::SetSourceSampleRate">
<summary>
<para>Reconfigures the voice to consume source data at a different sample rate than the rate specified when the voice was created.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2sourcevoice-setsourcesamplerate" /></para>
<param name="NewSourceSampleRate">The new sample rate the voice should process submitted data at. Valid sample rates are 1kHz to 200kHz.</param>
</summary>
</member>
<member name="IXAudio2::Release">
<summary>
<para>Releases a reference to the XAudio2 object.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2-release" /></para>
</summary>
</member>
<member name="IXAudio2SourceVoice::ExitLoop">
<summary>
<para>Stops looping the voice when it reaches the end of the current loop region.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2sourcevoice-exitloop" /></para>
<param name="X2DEFAULT">Identifies this call as part of a deferred batch. See the <a href="https://docs.microsoft.com/windows/desktop/xaudio2/xaudio2-operation-sets">XAudio2 Operation Sets</a> overview for more information.</param>
</summary>
</member>
<member name="IXAudio2::GetPerformanceData">
<summary>
<para>Returns current resource usage details, such as available memory or CPU usage.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2-getperformancedata" /></para>
<param name="pPerfData">On success, pointer to an <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_performance_data">XAUDIO2_PERFORMANCE_DATA</a> structure that is returned.</param>
</summary>
</member>
<member name="IXAudio2Voice::GetVoiceDetails">
<summary>
<para>Returns information about the creation flags, input channels, and sample rate of a voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-getvoicedetails" /></para>
<param name="pVoiceDetails"><a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_voice_details">XAUDIO2_VOICE_DETAILS</a> structure containing information about the voice.</param>
</summary>
</member>
<member name="IXAudio2::CreateMasteringVoice">
<summary>
<para>Creates and configures a mastering voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2-createmasteringvoice" /></para>
<param name="ppMasteringVoice">If successful, returns a pointer to the new <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2masteringvoice">IXAudio2MasteringVoice</a> object.</param>
<param name="X2DEFAULT">TBD</param>
<param name="Flags">Flags that specify the behavior of the mastering voice. Must be 0.</param>
<param name="InputChannels">Number of channels the mastering voice expects in its input audio.
<i>InputChannels</i> must be less than or equal to XAUDIO2_MAX_AUDIO_CHANNELS.
You can set <i>InputChannels</i> to XAUDIO2_DEFAULT_CHANNELS, which causes XAudio2 to try to detect the system speaker configuration setup.</param>
<param name="InputSampleRate">Sample rate of the input audio data of the mastering voice. This rate must be a multiple of XAUDIO2_QUANTUM_DENOMINATOR.
<i>InputSampleRate</i> must be between XAUDIO2_MIN_SAMPLE_RATE and XAUDIO2_MAX_SAMPLE_RATE.
You can set <i>InputSampleRate</i> to XAUDIO2_DEFAULT_SAMPLERATE, with the default being determined by the current platform.
Windows XP defaults to 44100.
Windows Vista and Windows 7 default to the setting specified in the Sound Control Panel. The default for this setting is 44100 (or 48000 if required by the driver).
Flags</param>
<param name="StreamCategory">The audio stream category to use for this mastering voice.</param>
<param name="pEffectChain">Pointer to an <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_effect_chain">XAUDIO2_EFFECT_CHAIN</a> structure that describes an effect chain to use in the mastering voice, or NULL to use no effects.</param>
<param name="szDeviceId">Identifier of the device to receive the output audio. Specifying the default value of NULL causes XAudio2 to select the global default audio device.</param>
</summary>
</member>
<member name="XAudio2RadiansToCutoffFrequency">
<summary>
<para>Inline function that converts from the radian frequencies used in XAUDIO2_FILTER_PARAMETERS back to absolute frequencies in hertz.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-xaudio2radianstocutofffrequency" /></para>
<param name="Radians">Value of the Frequency member of the <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_filter_parameters">XAUDIO2_FILTER_PARAMETERS</a> structure.</param>
<param name="SampleRate">The sample rate of the audio data affected by the <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_filter_parameters">XAUDIO2_FILTER_PARAMETERS</a> structure.</param>
</summary>
</member>
<member name="IXAudio2Voice::EnableEffect">
<summary>
<para>Enables the effect at a given position in the effect chain of the voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-enableeffect" /></para>
<param name="EffectIndex">Zero-based index of an effect in the effect chain of the voice.</param>
<param name="X2DEFAULT">TBD</param>
<param name="OperationSet">Identifies this call as part of a deferred batch. See the <a href="https://docs.microsoft.com/windows/desktop/xaudio2/xaudio2-operation-sets">XAudio2 Operation Sets</a> overview for more information.</param>
</summary>
</member>
<member name="IXAudio2EngineCallback::OnProcessingPassStart">
<summary>
<para>Called by XAudio2 just before an audio processing pass begins.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2enginecallback-onprocessingpassstart" /></para>
</summary>
</member>
<member name="IXAudio2EngineCallback::OnCriticalError">
<summary>
<para>Called if a critical system error occurs that requires XAudio2 to be closed down and restarted.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2enginecallback-oncriticalerror" /></para>
<param name="Error">Error code returned by XAudio2.</param>
</summary>
</member>
<member name="IXAudio2Voice::SetEffectParameters">
<summary>
<para>Sets parameters for a given effect in the voice's effect chain.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-seteffectparameters" /></para>
<param name="EffectIndex">Zero-based index of an effect within the voice's effect chain.</param>
<param name="pParameters">Returns the current values of the effect-specific parameters.</param>
<param name="ParametersByteSize">Size of the <b>pParameters</b> array in bytes.</param>
<param name="X2DEFAULT">TBD</param>
<param name="OperationSet">Identifies this call as part of a deferred batch. See the <a href="https://docs.microsoft.com/windows/desktop/xaudio2/xaudio2-operation-sets">XAudio2 Operation Sets</a> overview for more information.</param>
</summary>
</member>
<member name="IXAudio2SourceVoice::FlushSourceBuffers">
<summary>
<para>Removes all pending audio buffers from the voice queue.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2sourcevoice-flushsourcebuffers" /></para>
</summary>
</member>
<member name="IXAudio2SourceVoice::Discontinuity">
<summary>
<para>Notifies an XAudio2 voice that no more buffers are coming after the last one that is currently in its queue.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2sourcevoice-discontinuity" /></para>
</summary>
</member>
<member name="XAudio2CutoffFrequencyToRadians">
<summary>
<para>Inline function that converts from filter cutoff frequencies expressed in hertz to the radian frequency values used in the Frequency member of the XAUDIO2_FILTER_PARAMETERS structure.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-xaudio2cutofffrequencytoradians" /></para>
<param name="CutoffFrequency">The cutoff frequency in hertz. Frequencies greater than SampleRate ÷ 6 are clamped to XAUDIO2_MAX_FILTER_FREQUENCY.</param>
<param name="SampleRate">The sample rate of the audio data affected by the <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_filter_parameters">XAUDIO2_FILTER_PARAMETERS</a> structure.</param>
</summary>
</member>
<member name="IXAudio2Voice::GetOutputMatrix">
<summary>
<para>Gets the volume level of each channel of the final output for the voice. These channels are mapped to the input channels of a specified destination voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-getoutputmatrix" /></para>
<param name="pDestinationVoice">Pointer specifying the destination <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2voice">IXAudio2Voice</a> to retrieve the output matrix for.
<div class="alert"><b>Note</b>  If the voice sends to a single target voice then specifying NULL will cause <b>GetOutputMatrix</b> to operate on that target voice.</div>
<div> </div></param>
<param name="SourceChannels">Confirms the output channel count of the voice. This is the number of channels that are produced by the last effect in the chain.</param>
<param name="DestinationChannels">Confirms the input channel count of the destination voice.</param>
<param name="pLevelMatrix">Array of [<i>SourceChannels</i> * <i>DestinationChannels</i>] volume levels sent to the destination voice. The level sent from source channel S to destination channel D is returned in the form <i>pLevelMatrix</i>[<i>DestinationChannels</i> × S + D]. See Remarks for more information on volume levels.</param>
</summary>
</member>
<member name="IXAudio2VoiceCallback::OnVoiceProcessingPassStart">
<summary>
<para>Called during each processing pass for each voice, just before XAudio2 reads data from the voice's buffer queue.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voicecallback-onvoiceprocessingpassstart" /></para>
<param name="BytesRequired">The number of bytes that must be submitted immediately to avoid starvation. This allows the implementation of just-in-time streaming scenarios; the client can keep the absolute minimum data queued on the voice at all times, and pass it fresh data just before the data is required. This model provides the lowest possible latency attainable with XAudio2. For xWMA and XMA data <i>BytesRequired</i> will always be zero, since the concept of a frame of xWMA or XMA data is meaningless.
<div class="alert"><b>Note</b>  In a situation where there is always plenty of data available on the source voice, <i>BytesRequired</i> should always report zero, because it doesn't need any samples immediately to avoid glitching.</div>
<div> </div></param>
</summary>
</member>
<member name="IXAudio2Voice::GetFilterParameters">
<summary>
<para>Gets the voice's filter parameters.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-getfilterparameters" /></para>
<param name="pParameters">Pointer to an <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_filter_parameters">XAUDIO2_FILTER_PARAMETERS</a> structure containing the filter information.</param>
</summary>
</member>
<member name="XAudio2CreateVolumeMeter">
<summary>
<para>Creates a new volume meter audio processing object (APO) and returns a pointer to it.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2fx/nf-xaudio2fx-xaudio2createvolumemeter" /></para>
<param name="ppApo">Contains the created volume meter APO.</param>
</summary>
</member>
<member name="IXAudio2VoiceCallback::OnBufferStart">
<summary>
<para>Called when the voice is about to start processing a new audio buffer.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voicecallback-onbufferstart" /></para>
<param name="pBufferContext">Context pointer that was assigned to the pContext member of the <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_buffer">XAUDIO2_BUFFER</a> structure when the buffer was submitted.</param>
</summary>
</member>
<member name="IXAudio2::UnregisterForCallbacks">
<summary>
<para>Removes an IXAudio2EngineCallback pointer from the XAudio2 engine callback list.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2-unregisterforcallbacks" /></para>
<param name="pCallback"><a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2enginecallback">IXAudio2EngineCallback</a> pointer to remove from the <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2">XAudio2</a> engine callback list.
If the given pointer is present more than once in the list, only the first instance in the list will be removed.</param>
</summary>
</member>
<member name="IXAudio2Voice::SetOutputMatrix">
<summary>
<para>Sets the volume level of each channel of the final output for the voice. These channels are mapped to the input channels of a specified destination voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-setoutputmatrix" /></para>
<param name="pDestinationVoice">Pointer to a destination <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2voice">IXAudio2Voice</a> for which to set volume levels.
<div class="alert"><b>Note</b>  If the voice sends to a single target voice then specifying NULL will cause <b>SetOutputMatrix</b> to operate on that target voice.</div>
<div> </div></param>
<param name="SourceChannels">Confirms the output channel count of the voice. This is the number of channels that are produced by the last effect in the chain.</param>
<param name="DestinationChannels">Confirms the input channel count of the destination voice.</param>
<param name="pLevelMatrix">Array of [<i>SourceChannels</i> × <i>DestinationChannels</i>] volume levels sent to the destination voice. The level sent from source channel <i>S</i> to destination channel <i>D</i> is specified in the form <i>pLevelMatrix</i>[<i>SourceChannels</i> × <i>D</i> + <i>S</i>].
For example, when rendering two-channel stereo input into 5.1 output that is weighted toward the front channels—but is absent from the center and low-frequency channels—the matrix might have the values shown in the following table.
<table>
<tr>
<th>Output</th>
<th>Left Input [Array Index]</th>
<th>Right Input [Array Index]</th>
</tr>
<tr>
<td>Left</td>
<td>1.0 [0]</td>
<td>0.0 [1]</td>
</tr>
<tr>
<td>Right</td>
<td>0.0 [2]</td>
<td>1.0 [3]</td>
</tr>
<tr>
<td>Front Center</td>
<td>0.0 [4]</td>
<td>0.0 [5]</td>
</tr>
<tr>
<td>LFE</td>
<td>0.0 [6]</td>
<td>0.0 [7]</td>
</tr>
<tr>
<td>Rear Left</td>
<td>0.8 [8]</td>
<td>0.0 [9]</td>
</tr>
<tr>
<td>Rear Right</td>
<td>0.0 [10]</td>
<td>0.8 [11]</td>
</tr>
</table>
 
<div class="alert"><b>Note</b>  The left and right input are fully mapped to the output left and right channels; 80 percent of the left and right input is mapped to the rear left and right channels.</div>
<div> </div>
See Remarks for more information on volume levels.</param>
<param name="X2DEFAULT">TBD</param>
<param name="OperationSet">Identifies this call as part of a deferred batch. See the <a href="https://docs.microsoft.com/windows/desktop/xaudio2/xaudio2-operation-sets">XAudio2 Operation Sets</a> overview for more information.</param>
</summary>
</member>
<member name="IXAudio2SourceVoice::SubmitSourceBuffer">
<summary>
<para>Adds a new audio buffer to the voice queue.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2sourcevoice-submitsourcebuffer" /></para>
<param name="pBuffer">Pointer to an <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_buffer">XAUDIO2_BUFFER</a> structure to queue.</param>
<param name="X2DEFAULT">TBD</param>
<param name="pBufferWMA">Pointer to an additional <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_buffer_wma">XAUDIO2_BUFFER_WMA</a> structure used when submitting WMA data.</param>
</summary>
</member>
<member name="IXAudio2::AddRef">
<summary>
<para>Adds a reference to the XAudio2 object.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2-addref" /></para>
</summary>
</member>
<member name="IXAudio2VoiceCallback::OnStreamEnd">
<summary>
<para>Called when the voice has just finished playing a contiguous audio stream.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voicecallback-onstreamend" /></para>
</summary>
</member>
<member name="IXAudio2VoiceCallback::OnLoopEnd">
<summary>
<para>Called when the voice reaches the end position of a loop.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voicecallback-onloopend" /></para>
<param name="pBufferContext">Context pointer that was assigned to the <b>pContext</b> member of the <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_buffer">XAUDIO2_BUFFER</a> structure when the buffer was submitted.</param>
</summary>
</member>
<member name="IXAudio2Voice::SetVolume">
<summary>
<para>Sets the overall volume level for the voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-setvolume" /></para>
<param name="Volume">Overall volume level to use. See Remarks for more information on volume levels.</param>
<param name="X2DEFAULT">TBD</param>
<param name="OperationSet">Identifies this call as part of a deferred batch. See the <a href="https://docs.microsoft.com/windows/desktop/xaudio2/xaudio2-operation-sets">XAudio2 Operation Sets</a> overview for more information.</param>
</summary>
</member>
<member name="IXAudio2::QueryInterface">
<summary>
<para>Queries for a given COM interface on the XAudio2 object.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2-queryinterface" /></para>
<param name="riid">The REFIID that identifies the interface to query for.</param>
<param name="ppvInterface">Address of a pointer that receives the interface.</param>
</summary>
</member>
<member name="IXAudio2Voice::GetChannelVolumes">
<summary>
<para>Returns the volume levels for the voice, per channel.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-getchannelvolumes" /></para>
<param name="Channels">Confirms the channel count of the voice.</param>
<param name="pVolumes">Returns the current volume level of each channel in the voice. The array must have at least <i>Channels</i> elements. See Remarks for more information on volume levels.</param>
</summary>
</member>
<member name="IXAudio2Voice::GetVolume">
<summary>
<para>Gets the current overall volume level of the voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-getvolume" /></para>
<param name="pVolume">Returns the current overall volume level of the voice. See Remarks for more information on volume levels.</param>
</summary>
</member>
<member name="IXAudio2Voice::DestroyVoice">
<summary>
<para>Destroys the voice. If necessary, stops the voice and removes it from the XAudio2 graph.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-destroyvoice" /></para>
</summary>
</member>
<member name="IXAudio2VoiceCallback::OnVoiceError">
<summary>
<para>Called when a critical error occurs during voice processing.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voicecallback-onvoiceerror" /></para>
<param name="pBufferContext">Context pointer that was assigned to the <b>pContext</b> member of the <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_buffer">XAUDIO2_BUFFER</a> structure when the buffer was submitted.</param>
<param name="Error">The HRESULT code of the error encountered.</param>
</summary>
</member>
<member name="IXAudio2Voice::GetEffectState">
<summary>
<para>Returns the running state of the effect at a specified position in the effect chain of the voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-geteffectstate" /></para>
<param name="EffectIndex">Zero-based index of an effect in the effect chain of the voice.</param>
<param name="pEnabled">Returns TRUE If the effect is enabled. If the effect is disabled, returns FALSE.</param>
</summary>
</member>
<member name="IXAudio2Voice::SetFilterParameters">
<summary>
<para>Sets the voice's filter parameters.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-setfilterparameters" /></para>
<param name="pParameters">Pointer to an <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_filter_parameters">XAUDIO2_FILTER_PARAMETERS</a> structure containing the filter information.</param>
<param name="X2DEFAULT">TBD</param>
<param name="OperationSet">Identifies this call as part of a deferred batch. See the <a href="https://docs.microsoft.com/windows/desktop/xaudio2/xaudio2-operation-sets">XAudio2 Operation Sets</a> overview for more information.</param>
</summary>
</member>
<member name="IXAudio2Voice::GetEffectParameters">
<summary>
<para>Returns the current effect-specific parameters of a given effect in the voice's effect chain.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-geteffectparameters" /></para>
<param name="EffectIndex">Zero-based index of an effect within the voice's effect chain.</param>
<param name="pParameters">Returns the current values of the effect-specific parameters.</param>
<param name="ParametersByteSize">Size, in bytes, of the pParameters array.</param>
</summary>
</member>
<member name="IXAudio2SourceVoice::GetState">
<summary>
<para>Returns the voice's current cursor position data.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2sourcevoice-getstate" /></para>
<param name="pVoiceState">Pointer to an <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_voice_state">XAUDIO2_VOICE_STATE</a> structure containing the state of the voice.</param>
<param name="X2DEFAULT">TBD</param>
<param name="Flags">Flags controlling which voice state data should be returned. Valid values are 0 or <b>XAUDIO2_VOICE_NOSAMPLESPLAYED</b>. The default value is 0. If you specify <b>XAUDIO2_VOICE_NOSAMPLESPLAYED</b>, <b>GetState</b> returns only the buffer state, not the sampler state. <b>GetState</b> takes roughly one-third as much time to complete when you specify
<b>XAUDIO2_VOICE_NOSAMPLESPLAYED</b>.</param>
</summary>
</member>
<member name="IXAudio2Voice::GetOutputFilterParameters">
<summary>
<para>Returns the filter parameters from one of this voice's sends.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-getoutputfilterparameters" /></para>
<param name="pDestinationVoice"><a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2voice">IXAudio2Voice</a> pointer to the destination voice of the send whose filter parameters will be read.</param>
<param name="pParameters">Pointer to an <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_filter_parameters">XAUDIO2_FILTER_PARAMETERS</a> structure containing the filter information.</param>
</summary>
</member>
<member name="XAudio2CreateReverb">
<summary>
<para>Creates a new reverb audio processing object (APO), and returns a pointer to it.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2fx/nf-xaudio2fx-xaudio2createreverb" /></para>
<param name="ppApo">Contains a pointer to the reverb APO that is created.</param>
</summary>
</member>
<member name="XAudio2FrequencyRatioToSemitones">
<summary>
<para>Inline function that converts a frequency ratio value to a semitone value.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-xaudio2frequencyratiotosemitones" /></para>
<param name="FrequencyRatio">Floating point value representing the frequency ratio.</param>
</summary>
</member>
<member name="IXAudio2::RegisterForCallbacks">
<summary>
<para>Adds an IXAudio2EngineCallback pointer to the XAudio2 engine callback list.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2-registerforcallbacks" /></para>
<param name="pCallback"><a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2enginecallback">IXAudio2EngineCallback</a> pointer to add to the <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2">XAudio2</a> engine callback list.</param>
</summary>
</member>
<member name="IXAudio2MasteringVoice::GetChannelMask">
<summary>
<para>Returns the channel mask for this voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2masteringvoice-getchannelmask" /></para>
<param name="pChannelmask">Returns the channel mask for this voice. This corresponds to the <b>dwChannelMask</b> member of the <a href="https://docs.microsoft.com/windows-hardware/drivers/ddi/content/ksmedia/ns-ksmedia-waveformatextensible">WAVEFORMATEXTENSIBLE</a> structure.</param>
</summary>
</member>
<member name="XAudio2Create">
<summary>
<para>Creates a new XAudio2 object and returns a pointer to its IXAudio2 interface.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-xaudio2create" /></para>
<param name="ppXAudio2">If the operation is successful, returns a pointer to an <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2">IXAudio2</a> object.</param>
<param name="Flags">Flags that specify the behavior of the <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2">IXAudio2</a> object. The value of this parameter must be 0.</param>
<param name="XAudio2Processor">
<para>
An <a href="https://docs.microsoft.com//windows/desktop/xaudio2/uint32-xaudio2-processor">XAUDIO2_PROCESSOR</a>-typed value that specifies which CPU to use. If multiple bits are specified, the system will create a separate worker thread for each processor.
</para>
<para>
<a href="https://docs.microsoft.com//windows/desktop/xaudio2/uint32-xaudio2-processor">XAUDIO2_PROCESSOR</a> default value is XAUDIO2_DEFAULT_PROCESSOR.
</para>
<para>
<b>Warning</b> If you specify <a href="https://docs.microsoft.com//windows/desktop/xaudio2/uint32-xaudio2-processor">XAUDIO2_ANY_PROCESSOR</a>, the system will use all of the device's processors and, as noted above, create a worker thread for each processor.
</para>
<para>
<b>Note</b>  Specifying a processor should generally be avoided because it can interfere with the scheduler's ability to schedule threads effectively across processors. Instead, pass the XAUDIO2_DEFAULT_PROCESSOR value (see below).
</para>
<para>The special XAUDIO2_DEFAULT_PROCESSOR value causes XAudio2 to use its default processor.</para>
</param>
</summary>
</member>
<member name="IXAudio2::SetDebugConfiguration">
<summary>
<para>Changes global debug logging options for XAudio2.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2-setdebugconfiguration" /></para>
<param name="pDebugConfiguration">Pointer to a <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_debug_configuration">XAUDIO2_DEBUG_CONFIGURATION</a> structure that contains the new debug configuration.</param>
<param name="X2DEFAULT">This parameter is reserved and must be NULL.</param>
</summary>
</member>
<member name="IXAudio2::CreateSourceVoice">
<summary>
<para>Creates and configures a source voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2-createsourcevoice" /></para>
<param name="ppSourceVoice">If successful, returns a pointer to the new <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2sourcevoice">IXAudio2SourceVoice</a> object.</param>
<param name="pSourceFormat">Pointer to a one of the structures in the table below. This structure contains the expected format for all audio buffers submitted to the source voice.
XAudio2 supports PCM and ADPCM voice types.
<table>
<tr>
<th>Format tag</th>
<th>Wave format structure</th>
<th>Size (in bytes)</th>
</tr>
<tr>
<td>WAVE_FORMAT_PCM (0x0001) </td>
<td>
<a href="https://docs.microsoft.com/previous-versions/dd743663(v=vs.85)">PCMWAVEFORMAT</a>
</td>
<td>16</td>
</tr>
<tr>
<td>-or-</td>
<td>
<a href="https://docs.microsoft.com/windows/win32/api/mmreg/ns-mmreg-waveformatex">WAVEFORMATEX</a>
</td>
<td>18</td>
</tr>
<tr>
<td>WAVE_FORMAT_IEEE_FLOAT (0x0003) [32-bit]</td>
<td>
<a href="https://docs.microsoft.com/previous-versions/dd743663(v=vs.85)">PCMWAVEFORMAT</a>
</td>
<td>18</td>
</tr>
<tr>
<td>WAVE_FORMAT_ADPCM (0x0002) [MS-ADPCM]</td>
<td>
<a href="https://docs.microsoft.com/previous-versions/dd743663(v=vs.85)">ADPCMWAVEFORMAT</a>
</td>
<td>50</td>
</tr>
<tr>
<td>WAVE_FORMAT_EXTENSIBLE (0xFFFE)</td>
<td>
<a href="https://docs.microsoft.com/windows-hardware/drivers/ddi/content/ksmedia/ns-ksmedia-waveformatextensible">WAVEFORMATEXTENSIBLE</a>
</td>
<td>40</td>
</tr>
</table>
 
XAudio2 supports the following PCM formats.
<ul>
<li>8-bit (unsigned) integer PCM
</li>
<li>16-bit integer PCM (optimal format for XAudio2)
</li>
<li>20-bit integer PCM (either in 24 or 32 bit containers)
</li>
<li>24-bit integer PCM (either in 24 or 32 bit containers)
</li>
<li>32-bit integer PCM
</li>
<li>32-bit float PCM (preferred format after 16-bit integer)
</li>
</ul>
The number of channels in a source voice must be less than or equal to XAUDIO2_MAX_AUDIO_CHANNELS. The sample rate of a source voice must be between XAUDIO2_MIN_SAMPLE_RATE and XAUDIO2_MAX_SAMPLE_RATE.
<div class="alert"><b>Note</b>  PCM data formats such as <a href="https://docs.microsoft.com/previous-versions/dd743663(v=vs.85)">PCMWAVEFORMAT</a> and <b>ADPCMWAVEFORMAT</b> that require more information than provided by <b>WAVEFORMATEX</b> have a <b>WAVEFORMATEX</b> structure as the first member in their format structures. When you create a source voice with one of those formats, cast the format's structure as a <b>WAVEFORMATEX</b> structure and use it as the value for <i>pSourceFormat</i>.</div>
<div> </div></param>
<param name="X2DEFAULT">TBD</param>
<param name="Flags">Flags that specify the behavior of the source voice. A flag can be 0 or a combination of one or more of the following:
<table>
<tr>
<th>Value</th>
<th>Description</th>
</tr>
<tr>
<td>XAUDIO2_VOICE_NOPITCH</td>
<td>No pitch control is available on the voice. </td>
</tr>
<tr>
<td>XAUDIO2_VOICE_NOSRC</td>
<td>No sample rate conversion is available on the voice.
The voice's outputs must have the same sample rate.<div class="alert"><b>Note</b>  The XAUDIO2_VOICE_NOSRC flag causes the voice to behave as though the XAUDIO2_VOICE_NOPITCH flag also is specified.</div>
<div> </div>
</td>
</tr>
<tr>
<td>XAUDIO2_VOICE_USEFILTER</td>
<td>The filter effect should be available on this voice. </td>
</tr>
</table>
 
<div class="alert"><b>Note</b>  The XAUDIO2_VOICE_MUSIC flag is not supported on Windows.</div>
<div> </div></param>
<param name="MaxFrequencyRatio">Highest allowable frequency ratio that can be set on this voice. The value for this argument must be between XAUDIO2_MIN_FREQ_RATIO and XAUDIO2_MAX_FREQ_RATIO. Subsequent calls to <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nf-xaudio2-ixaudio2sourcevoice-setfrequencyratio">IXAudio2SourceVoice::SetFrequencyRatio</a> are clamped between XAUDIO2_MIN_FREQ_RATIO and <b>MaxFrequencyRatio</b>.
The maximum value for this argument is defined as XAUDIO2_MAX_FREQ_RATIO, which allows pitch to be raised by up to 10 octaves.
If <i>MaxFrequencyRatio</i> is less than 1.0, the voice will use that ratio immediately after being created (rather than the default of 1.0).
<table>
<tr>
<th>Xbox 360</th>
</tr>
<tr>
<td>For XMA voices, there is one more restriction on the <i>MaxFrequencyRatio</i> argument and the voice's sample rate. The product of these two numbers cannot exceed XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MONO for one-channel voices or XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MULTICHANNEL for voices with any other number of channels. If the value specified for <i>MaxFrequencyRatio</i> is too high for the specified format, the call to <b>CreateSourceVoice</b> fails and produces a debug message.
</td>
</tr>
</table>
 
<div class="alert"><b>Note</b>  You can use the lowest possible <i>MaxFrequencyRatio</i> value to reduce XAudio2's memory usage.</div>
<div> </div></param>
<param name="pCallback">Pointer to a client-provided callback interface, <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2voicecallback">IXAudio2VoiceCallback</a>.</param>
<param name="pEffectChain">Pointer to a list of <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_effect_chain">XAUDIO2_EFFECT_CHAIN</a> structures that describe an effect chain to use in the source voice.</param>
<param name="pSendList">Pointer to a list of <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_voice_sends">XAUDIO2_VOICE_SENDS</a> structures that describe the set of destination voices for the source voice. If pSendList is NULL, the send list defaults to a single output to the first mastering voice created.</param>
</summary>
</member>
<member name="XAudio2DecibelsToAmplitudeRatio">
<summary>
<para>Inline function that converts a decibel value to an amplitude ratio value.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-xaudio2decibelstoamplituderatio" /></para>
<param name="Decibels">Floating point value representing the decibel level.</param>
</summary>
</member>
<member name="IXAudio2::CreateSubmixVoice">
<summary>
<para>Creates and configures a submix voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2-createsubmixvoice" /></para>
<param name="ppSubmixVoice">On success, returns a pointer to the new <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2submixvoice">IXAudio2SubmixVoice</a> object.</param>
<param name="InputChannels">Number of channels in the input audio data of the submix voice.
<i>InputChannels</i> must be less than or equal to XAUDIO2_MAX_AUDIO_CHANNELS.</param>
<param name="InputSampleRate">Sample rate of the input audio data of submix voice. This rate must be a multiple of XAUDIO2_QUANTUM_DENOMINATOR. <i>InputSampleRate</i> must be between XAUDIO2_MIN_SAMPLE_RATE and XAUDIO2_MAX_SAMPLE_RATE.</param>
<param name="X2DEFAULT">TBD</param>
<param name="Flags">Flags that specify the behavior of the submix voice. It can be 0 or the following:
<table>
<tr>
<th>Value</th>
<th>Description</th>
</tr>
<tr>
<td>XAUDIO2_VOICE_USEFILTER</td>
<td>The filter effect should be available on this voice.</td>
</tr>
</table></param>
<param name="ProcessingStage">An arbitrary number that specifies when this voice is processed with respect to other submix voices, if the XAudio2 engine is running other submix voices. The voice is processed after all other voices that include a smaller <i>ProcessingStage</i> value and before all other voices that include a larger <i>ProcessingStage</i> value. Voices that include the same <i>ProcessingStage</i> value are processed in any order. A submix voice cannot send to another submix voice with a lower or equal <i>ProcessingStage</i> value. This prevents audio being lost due to a submix cycle.</param>
<param name="pEffectChain">Pointer to a list of <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_effect_chain">XAUDIO2_EFFECT_CHAIN</a> structures that describe an effect chain to use in the submix voice.</param>
<param name="pSendList">Pointer to a list of <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_voice_sends">XAUDIO2_VOICE_SENDS</a> structures that describe the set of destination voices for the submix voice. If <i>pSendList</i> is NULL, the send list will default to a single output to the first mastering voice created.</param>
</summary>
</member>
<member name="IXAudio2SourceVoice::Stop">
<summary>
<para>Stops consumption of audio by the current voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2sourcevoice-stop" /></para>
<param name="X2DEFAULT">TBD</param>
<param name="Flags">Flags that control how the voice is stopped. Can be 0 or the following:
<table>
<tr>
<th>Value</th>
<th>Description</th>
</tr>
<tr>
<td>XAUDIO2_PLAY_TAILS</td>
<td>Continue emitting effect output after the voice is stopped. </td>
</tr>
</table></param>
<param name="OperationSet">Identifies this call as part of a deferred batch. See the <a href="https://docs.microsoft.com/windows/desktop/xaudio2/xaudio2-operation-sets">XAudio2 Operation Sets</a> overview for more information.</param>
</summary>
</member>
<member name="IXAudio2VoiceCallback">
<summary>
<para>The IXAudio2VoiceCallback interface contains methods that notify the client when certain events happen in a given IXAudio2SourceVoice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nn-xaudio2-ixaudio2voicecallback" /></para>
</summary>
</member>
<member name="XAudio2SemitonesToFrequencyRatio">
<summary>
<para>Inline function that converts a semitone value to a frequency ratio value.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-xaudio2semitonestofrequencyratio" /></para>
<param name="Semitones">Floating point value representing the semitone value.</param>
</summary>
</member>
<member name="IXAudio2Voice::SetOutputVoices">
<summary>
<para>Designates a new set of submix or mastering voices to receive the output of the voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-setoutputvoices" /></para>
<param name="pSendList">Array of <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_voice_sends">XAUDIO2_VOICE_SENDS</a> structure pointers to destination voices. If <i>pSendList</i> is NULL, the voice will send its output to the current mastering voice. To set the voice to not send its output anywhere set the <b>OutputCount</b> member of <b>XAUDIO2_VOICE_SENDS</b> to 0. All of the voices in a send list must have the same input sample rate, see <a href="https://docs.microsoft.com/windows/desktop/xaudio2/xaudio2-sample-rate-conversions">XAudio2 Sample Rate Conversions</a> for additional information.</param>
</summary>
</member>
<member name="IXAudio2VoiceCallback::OnVoiceProcessingPassEnd">
<summary>
<para>Called just after the processing pass for the voice ends.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voicecallback-onvoiceprocessingpassend" /></para>
</summary>
</member>
<member name="IXAudio2SourceVoice::SetFrequencyRatio">
<summary>
<para>Sets the frequency adjustment ratio of the voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2sourcevoice-setfrequencyratio" /></para>
<param name="Ratio">Frequency adjustment ratio. This value must be between XAUDIO2_MIN_FREQ_RATIO and the <i>MaxFrequencyRatio</i> parameter specified when the voice was created (see <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nf-xaudio2-ixaudio2-createsourcevoice">IXAudio2::CreateSourceVoice</a>). XAUDIO2_MIN_FREQ_RATIO currently is 0.0005, which allows pitch to be lowered by up to 11 octaves.</param>
<param name="X2DEFAULT">TBD</param>
<param name="OperationSet">Identifies this call as part of a deferred batch. See the <a href="https://docs.microsoft.com/windows/desktop/xaudio2/xaudio2-operation-sets">XAudio2 Operation Sets</a> overview for more information.</param>
</summary>
</member>
<member name="IXAudio2EngineCallback::OnProcessingPassEnd">
<summary>
<para>Called by XAudio2 just after an audio processing pass ends.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2enginecallback-onprocessingpassend" /></para>
</summary>
</member>
<member name="IXAudio2::StopEngine">
<summary>
<para>Stops the audio processing thread.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2-stopengine" /></para>
</summary>
</member>
<member name="IXAudio2EngineCallback">
<summary>
<para>The IXAudio2EngineCallback interface contains methods that notify the client when certain events happen in the IXAudio2 engine.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nn-xaudio2-ixaudio2enginecallback" /></para>
</summary>
</member>
<member name="IXAudio2::CommitChanges">
<summary>
<para>Atomically applies a set of operations that are tagged with a given identifier.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2-commitchanges" /></para>
<param name="OperationSet">Identifier of the set of operations to be applied. To commit all pending operations, pass <b>XAUDIO2_COMMIT_ALL</b>.</param>
</summary>
</member>
<member name="XAudio2AmplitudeRatioToDecibels">
<summary>
<para>Inline function that converts an amplitude ratio value to a decibel value.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-xaudio2amplituderatiotodecibels" /></para>
<param name="Volume">Floating point value representing the amplitude ratio.</param>
</summary>
</member>
<member name="IXAudio2SourceVoice::GetFrequencyRatio">
<summary>
<para>Returns the frequency adjustment ratio of the voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2sourcevoice-getfrequencyratio" /></para>
<param name="pRatio">Returns the current frequency adjustment ratio if successful.</param>
</summary>
</member>
<member name="IXAudio2Voice::SetOutputFilterParameters">
<summary>
<para>Sets the filter parameters on one of this voice's sends.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-setoutputfilterparameters" /></para>
<param name="pDestinationVoice"><a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/nn-xaudio2-ixaudio2voice">IXAudio2Voice</a> pointer to the destination voice of the send whose filter parameters will be set.</param>
<param name="pParameters">Pointer to an <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_filter_parameters">XAUDIO2_FILTER_PARAMETERS</a> structure containing the filter information.</param>
<param name="X2DEFAULT">TBD</param>
<param name="OperationSet">Identifies this call as part of a deferred batch. See the <a href="https://docs.microsoft.com/windows/desktop/xaudio2/xaudio2-operation-sets">XAudio2 Operation Sets</a> overview for more information.</param>
</summary>
</member>
<member name="IXAudio2Voice::SetEffectChain">
<summary>
<para>Replaces the effect chain of the voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-seteffectchain" /></para>
<param name="pEffectChain">Pointer to an <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_effect_chain">XAUDIO2_EFFECT_CHAIN</a> structure that describes the new effect chain to use. If NULL is passed, the current effect chain is removed.
<div class="alert"><b>Note</b>  If <i>pEffectChain</i> is non-NULL, the <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_effect_chain">XAUDIO2_EFFECT_CHAIN</a> structure that it points to must specify at least one effect.</div>
<div> </div></param>
</summary>
</member>
<member name="IXAudio2Voice::DisableEffect">
<summary>
<para>Disables the effect at a given position in the effect chain of the voice.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-disableeffect" /></para>
<param name="EffectIndex">Zero-based index of an effect in the effect chain of the voice.</param>
<param name="X2DEFAULT">TBD</param>
<param name="OperationSet">Identifies this call as part of a deferred batch. See the <a href="https://docs.microsoft.com/windows/desktop/xaudio2/xaudio2-operation-sets">XAudio2 Operation Sets</a> overview for more information.</param>
</summary>
</member>
<member name="IXAudio2SubmixVoice">
<summary>
<para>A submix voice is used primarily for performance improvements and effects processing.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nn-xaudio2-ixaudio2submixvoice" /></para>
</summary>
</member>
<member name="IXAudio2MasteringVoice">
<summary>
<para>A mastering voice is used to represent the audio output device.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nn-xaudio2-ixaudio2masteringvoice" /></para>
</summary>
</member>
<member name="XAudio2CutoffFrequencyToOnePoleCoefficient">
<summary>
<para>Inline function that converts from filter cutoff frequencies expressed in hertz to the filter coefficients used with the Frequency member of the XAUDIO2_FILTER_PARAMETERS structure.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-xaudio2cutofffrequencytoonepolecoefficient" /></para>
<param name="CutoffFrequency">The cutoff frequency in hertz. Frequencies greater than <i>SampleRate</i> are clamped to XAUDIO2_MAX_FILTER_FREQUENCY.</param>
<param name="SampleRate">The sample rate of the audio data affected by the <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_filter_parameters">XAUDIO2_FILTER_PARAMETERS</a> structure.</param>
</summary>
</member>
<member name="IXAudio2SourceVoice::Start">
<summary>
<para>Starts consumption and processing of audio by the voice. Delivers the result to any connected submix or mastering voices, or to the output device.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2sourcevoice-start" /></para>
<param name="X2DEFAULT">TBD</param>
<param name="Flags">Flags that control how the voice is started. Must be 0.</param>
<param name="OperationSet">Identifies this call as part of a deferred batch. See the <a href="https://docs.microsoft.com/windows/desktop/xaudio2/xaudio2-operation-sets">XAudio2 Operation Sets</a> overview for more information.</param>
</summary>
</member>
<member name="IXAudio2::StartEngine">
<summary>
<para>Starts the audio processing thread.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2-startengine" /></para>
</summary>
</member>
<member name="IXAudio2SourceVoice">
<summary>
<para>Use a source voice to submit audio data to the XAudio2 processing pipeline.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nn-xaudio2-ixaudio2sourcevoice" /></para>
</summary>
</member>
<member name="IXAudio2VoiceCallback::OnBufferEnd">
<summary>
<para>Called when the voice finishes processing a buffer.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voicecallback-onbufferend" /></para>
<param name="pBufferContext">Context pointer assigned to the <b>pContext</b> member of the <a href="https://docs.microsoft.com/windows/desktop/api/xaudio2/ns-xaudio2-xaudio2_buffer">XAUDIO2_BUFFER</a> structure when the buffer was submitted.</param>
</summary>
</member>
<member name="IXAudio2Voice::SetChannelVolumes">
<summary>
<para>Sets the volume levels for the voice, per channel.</para>
<para>Microsoft Docs: <see href="https://docs.microsoft.com/windows/win32/api//xaudio2/nf-xaudio2-ixaudio2voice-setchannelvolumes" /></para>
<param name="Channels">Number of channels in the voice.</param>
<param name="pVolumes">Array containing the new volumes of each channel in the voice. The array must have <i>Channels</i> elements. See Remarks for more information on volume levels.</param>
<param name="X2DEFAULT">TBD</param>
<param name="OperationSet">Identifies this call as part of a deferred batch. See the <a href="https://docs.microsoft.com/windows/desktop/xaudio2/xaudio2-operation-sets">XAudio2 Operation Sets</a> overview for more information.</param>
</summary>
</member>
</doc>

View File

@@ -0,0 +1,13 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
namespace Win32.Media.Audio;
/// <unmanaged>ADPCMCOEFSET</unmanaged>
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public partial struct ADPCMCoefSet
{
public short iCoef1;
public short iCoef2;
}

View File

@@ -0,0 +1,40 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
namespace Win32.Media.Audio;
/// <unmanaged>ADPCMWAVEFORMAT</unmanaged>
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public partial struct ADPCMWaveFormat
{
public WaveFormatEx wfx;
[NativeTypeName("WORD")]
public ushort wSamplesPerBlock;
[NativeTypeName("WORD")]
public ushort wNumCoef;
[NativeTypeName("ADPCMCOEFSET[]")]
public _aCoef_e__FixedBuffer aCoef;
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public partial struct _aCoef_e__FixedBuffer
{
public ADPCMCoefSet e0;
[UnscopedRef]
public ref ADPCMCoefSet this[int index]
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
return ref AsSpan(int.MaxValue)[index];
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[UnscopedRef]
public Span<ADPCMCoefSet> AsSpan(int length) => MemoryMarshal.CreateSpan(ref e0, length);
}
}

View File

@@ -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;
/// <unmanaged>AUDIO_STREAM_CATEGORY</unmanaged>
public enum AudioStreamCategory
{
Other = 0,
ForegroundOnlyMedia = 1,
Communications = 3,
Alerts = 4,
SoundEffects = 5,
GameEffects = 6,
GameMedia = 7,
GameChat = 8,
Speech = 9,
Movie = 10,
Media = 11,
FarFieldSpeech = 12,
UniformSpeech = 13,
VoiceTyping = 14,
}

View File

@@ -0,0 +1,14 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
namespace Win32.Media.Audio;
/// <unmanaged>PCMWAVEFORMAT</unmanaged>
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public partial struct PCMWaveFormat
{
public WaveFormat wf;
[NativeTypeName("WORD")]
public ushort wBitsPerSample;
}

View File

@@ -0,0 +1,24 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
namespace Win32.Media.Audio;
/// <unmanaged>WAVEFORMAT</unmanaged>
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public partial struct WaveFormat
{
[NativeTypeName("WORD")]
public ushort wFormatTag;
[NativeTypeName("WORD")]
public ushort nChannels;
[NativeTypeName("DWORD")]
public uint nSamplesPerSec;
[NativeTypeName("DWORD")]
public uint nAvgBytesPerSec;
[NativeTypeName("WORD")]
public ushort nBlockAlign;
}

View File

@@ -0,0 +1,30 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
namespace Win32.Media.Audio;
/// <unmanaged>WAVEFORMATEX</unmanaged>
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public partial struct WaveFormatEx
{
[NativeTypeName("WORD")]
public ushort wFormatTag;
[NativeTypeName("WORD")]
public ushort nChannels;
[NativeTypeName("DWORD")]
public uint nSamplesPerSec;
[NativeTypeName("DWORD")]
public uint nAvgBytesPerSec;
[NativeTypeName("WORD")]
public ushort nBlockAlign;
[NativeTypeName("WORD")]
public ushort wBitsPerSample;
[NativeTypeName("WORD")]
public ushort cbSize;
}

View File

@@ -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;
/// <unmanaged>WAVEFORMATEXTENSIBLE</unmanaged>
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public partial struct WaveFormatExtensible
{
public WaveFormatEx Format;
[NativeTypeName("union (anonymous union at C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/shared/mmreg.h:2525:5)")]
public _Samples_e__Union Samples;
[NativeTypeName("DWORD")]
public uint dwChannelMask;
public Guid SubFormat;
[StructLayout(LayoutKind.Explicit, Pack = 1)]
public partial struct _Samples_e__Union
{
[FieldOffset(0)]
[NativeTypeName("WORD")]
public ushort wValidBitsPerSample;
[FieldOffset(0)]
[NativeTypeName("WORD")]
public ushort wSamplesPerBlock;
[FieldOffset(0)]
[NativeTypeName("WORD")]
public ushort wReserved;
}
}

View File

@@ -11,3 +11,4 @@
[assembly: InternalsVisibleTo("Vortice.Win32.Graphics.Direct3D.Dxc")] [assembly: InternalsVisibleTo("Vortice.Win32.Graphics.Direct3D.Dxc")]
[assembly: InternalsVisibleTo("Vortice.Win32.Graphics.Direct3D.Fxc")] [assembly: InternalsVisibleTo("Vortice.Win32.Graphics.Direct3D.Fxc")]
[assembly: InternalsVisibleTo("Vortice.Win32.Graphics.DirectComposition")] [assembly: InternalsVisibleTo("Vortice.Win32.Graphics.DirectComposition")]
[assembly: InternalsVisibleTo("Vortice.Win32.Media.Audio.XAudio2")]

View File

@@ -15,6 +15,7 @@
<ProjectReference Include="..\..\Vortice.Win32.Graphics.Direct2D\Vortice.Win32.Graphics.Direct2D.csproj" /> <ProjectReference Include="..\..\Vortice.Win32.Graphics.Direct2D\Vortice.Win32.Graphics.Direct2D.csproj" />
<ProjectReference Include="..\..\Vortice.Win32.Graphics.Direct3D.Dxc\Vortice.Win32.Graphics.Direct3D.Dxc.csproj" /> <ProjectReference Include="..\..\Vortice.Win32.Graphics.Direct3D.Dxc\Vortice.Win32.Graphics.Direct3D.Dxc.csproj" />
<ProjectReference Include="..\..\Vortice.Win32.Graphics.Direct3D.Fxc\Vortice.Win32.Graphics.Direct3D.Fxc.csproj" /> <ProjectReference Include="..\..\Vortice.Win32.Graphics.Direct3D.Fxc\Vortice.Win32.Graphics.Direct3D.Fxc.csproj" />
<ProjectReference Include="..\..\Vortice.Win32.Media.Audio.XAudio2\Vortice.Win32.Media.Audio.XAudio2.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>