using System; using System.Runtime.InteropServices; namespace Susurrus.XAudio2.UnitTests { /// /// Silent 16-bit mono samples, pinned so a voice can read them. /// public class PinnedSilence : IDisposable { private readonly byte[] samples; private GCHandle pin; public int FrameCount { get; } public PinnedSilence(int frameCount) { this.FrameCount = frameCount; this.samples = new byte[frameCount * 2]; this.pin = GCHandle.Alloc(samples, GCHandleType.Pinned); } public XAudio2Buffer Buffer() { XAudio2Buffer returnMe = new XAudio2Buffer(); returnMe.AudioBytes = (uint)samples.Length; returnMe.AudioData = pin.AddrOfPinnedObject(); return returnMe; } public void Dispose() { pin.Free(); } } }