diff --git a/src/Audio/AudioDevice.cs b/src/Audio/AudioDevice.cs index ce3f76e..c86aa60 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); + fauxMasteringVoice = new SubmixVoice(this, DeviceDetails.OutputFormat.Format.nChannels, DeviceDetails.OutputFormat.Format.nSamplesPerSec, int.MaxValue); /* Init 3D Audio */ diff --git a/src/Audio/ReverbEffect.cs b/src/Audio/ReverbEffect.cs index 746e99e..fd3950c 100644 --- a/src/Audio/ReverbEffect.cs +++ b/src/Audio/ReverbEffect.cs @@ -8,7 +8,7 @@ namespace MoonWorks.Audio /// public unsafe class ReverbEffect : SubmixVoice { - public ReverbEffect(AudioDevice audioDevice) : base(audioDevice, 1, audioDevice.DeviceDetails.OutputFormat.Format.nSamplesPerSec) + public ReverbEffect(AudioDevice audioDevice, uint processingStage) : base(audioDevice, 1, audioDevice.DeviceDetails.OutputFormat.Format.nSamplesPerSec, processingStage) { /* Init reverb */ IntPtr reverb; diff --git a/src/Audio/SubmixVoice.cs b/src/Audio/SubmixVoice.cs index b681024..ae64e9f 100644 --- a/src/Audio/SubmixVoice.cs +++ b/src/Audio/SubmixVoice.cs @@ -4,13 +4,16 @@ namespace MoonWorks.Audio { /// /// SourceVoices can send audio to a SubmixVoice for convenient effects processing. + /// Submixes process in order of processingStage, from lowest to highest. + /// Therefore submixes early in a chain should have a low processingStage, and later in the chain they should have a higher one. /// public class SubmixVoice : Voice { public SubmixVoice( AudioDevice device, uint sourceChannelCount, - uint sampleRate + uint sampleRate, + uint processingStage ) : base(device, sourceChannelCount, device.DeviceDetails.OutputFormat.Format.nChannels) { FAudio.FAudio_CreateSubmixVoice( @@ -19,7 +22,7 @@ namespace MoonWorks.Audio sourceChannelCount, sampleRate, FAudio.FAUDIO_VOICE_USEFILTER, - 0, + processingStage, IntPtr.Zero, // default sends to mastering voice IntPtr.Zero );