using System.Collections.Generic; using EasingFunction = System.Func; namespace MoonWorks.Audio { internal enum AudioTweenProperty { Pan, Pitch, Volume, FilterFrequency, Reverb } internal class AudioTween { public Voice Voice; public AudioTweenProperty Property; public EasingFunction EasingFunction; public float Time; public float StartValue; public float EndValue; public float DelayTime; public float Duration; } internal class AudioTweenPool { private Queue Tweens = new Queue(16); public AudioTweenPool() { for (int i = 0; i < 16; i += 1) { Tweens.Enqueue(new AudioTween()); } } public AudioTween Obtain() { if (Tweens.Count > 0) { var tween = Tweens.Dequeue(); return tween; } else { return new AudioTween(); } } public void Free(AudioTween tween) { tween.Voice = null; Tweens.Enqueue(tween); } } }