From 7f6b6a7baefef6883dc4a6f4cf4bf8c5475edd71 Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Thu, 10 Aug 2023 10:46:19 -0700 Subject: [PATCH] fix voices not respecting the faux mastering voice --- src/Audio/AudioDevice.cs | 2 +- src/Audio/SourceVoice.cs | 2 ++ src/Audio/SubmixVoice.cs | 25 +++++++++++++++++++++++++ src/Audio/Voice.cs | 1 - 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/Audio/AudioDevice.cs b/src/Audio/AudioDevice.cs index 7e5ad82..62129a8 100644 --- a/src/Audio/AudioDevice.cs +++ b/src/Audio/AudioDevice.cs @@ -105,7 +105,7 @@ namespace MoonWorks.Audio return; } - fauxMasteringVoice = new SubmixVoice(this, DeviceDetails.OutputFormat.Format.nChannels, DeviceDetails.OutputFormat.Format.nSamplesPerSec, int.MaxValue); + fauxMasteringVoice = SubmixVoice.CreateFauxMasteringVoice(this); /* Init 3D Audio */ diff --git a/src/Audio/SourceVoice.cs b/src/Audio/SourceVoice.cs index dfe9189..5e4efec 100644 --- a/src/Audio/SourceVoice.cs +++ b/src/Audio/SourceVoice.cs @@ -69,6 +69,8 @@ namespace MoonWorks.Audio IntPtr.Zero, // default sends to mastering voice! IntPtr.Zero ); + + SetOutputVoice(device.MasteringVoice); } /// diff --git a/src/Audio/SubmixVoice.cs b/src/Audio/SubmixVoice.cs index ae64e9f..3edf650 100644 --- a/src/Audio/SubmixVoice.cs +++ b/src/Audio/SubmixVoice.cs @@ -23,9 +23,34 @@ namespace MoonWorks.Audio sampleRate, FAudio.FAUDIO_VOICE_USEFILTER, processingStage, + IntPtr.Zero, + IntPtr.Zero + ); + + SetOutputVoice(device.MasteringVoice); + } + + private SubmixVoice( + AudioDevice device + ) : base(device, device.DeviceDetails.OutputFormat.Format.nChannels, device.DeviceDetails.OutputFormat.Format.nChannels) + { + FAudio.FAudio_CreateSubmixVoice( + device.Handle, + out handle, + device.DeviceDetails.OutputFormat.Format.nChannels, + device.DeviceDetails.OutputFormat.Format.nSamplesPerSec, + FAudio.FAUDIO_VOICE_USEFILTER, + int.MaxValue, IntPtr.Zero, // default sends to mastering voice IntPtr.Zero ); + + OutputVoice = null; + } + + internal static SubmixVoice CreateFauxMasteringVoice(AudioDevice device) + { + return new SubmixVoice(device); } } } diff --git a/src/Audio/Voice.cs b/src/Audio/Voice.cs index c5870a4..e5bba15 100644 --- a/src/Audio/Voice.cs +++ b/src/Audio/Voice.cs @@ -261,7 +261,6 @@ namespace MoonWorks.Audio { SourceChannelCount = sourceChannelCount; DestinationChannelCount = destinationChannelCount; - OutputVoice = device.MasteringVoice; nuint memsize = 4 * sourceChannelCount * destinationChannelCount; pMatrixCoefficients = (byte*) NativeMemory.AllocZeroed(memsize); SetPanMatrixCoefficients();