diff --git a/src/Audio/AudioDevice.cs b/src/Audio/AudioDevice.cs index c86aa604..7e5ad822 100644 --- a/src/Audio/AudioDevice.cs +++ b/src/Audio/AudioDevice.cs @@ -253,6 +253,11 @@ namespace MoonWorks.Audio lock (StateLock) { resources.Add(resource.weakReference); + + if (resource is SourceVoice voice) + { + activeSourceVoices.Add(voice); + } } } diff --git a/src/Audio/SoundSequence.cs b/src/Audio/SoundSequence.cs index 466aebf8..9d5b1631 100644 --- a/src/Audio/SoundSequence.cs +++ b/src/Audio/SoundSequence.cs @@ -3,7 +3,7 @@ namespace MoonWorks.Audio /// /// Plays back a series of AudioBuffers in sequence. Set the OnSoundNeeded callback to add AudioBuffers dynamically. /// - public class SoundSequence : SourceVoice + public class SoundSequence : SourceVoice, IPoolable { public int NeedSoundThreshold = 0; public delegate void OnSoundNeededFunc(); @@ -19,6 +19,11 @@ namespace MoonWorks.Audio } + public static SoundSequence Create(AudioDevice device, Format format) + { + return new SoundSequence(device, format); + } + public override void Update() { lock (StateLock) @@ -27,7 +32,9 @@ namespace MoonWorks.Audio if (NeedSoundThreshold > 0) { - for (int i = 0; i < NeedSoundThreshold - BuffersQueued; i += 1) + var buffersNeeded = NeedSoundThreshold - (int) BuffersQueued; + + for (int i = 0; i < buffersNeeded; i += 1) { if (OnSoundNeeded != null) { @@ -44,6 +51,7 @@ namespace MoonWorks.Audio if (!(buffer.Format == Format)) { Logger.LogWarn("Sound sequence audio format mismatch!"); + return; } #endif