using System; using System.Collections.Generic; using System.Text; using NAudio.CoreAudioApi.Interfaces; using System.Runtime.InteropServices; namespace NAudio.CoreAudioApi { /// /// Audio Render Client /// public class AudioRenderClient : IDisposable { IAudioRenderClient audioRenderClientInterface; internal AudioRenderClient(IAudioRenderClient audioRenderClientInterface) { this.audioRenderClientInterface = audioRenderClientInterface; } /// /// Gets a pointer to the buffer /// /// Number of frames requested /// Pointer to the buffer public IntPtr GetBuffer(int numFramesRequested) { return audioRenderClientInterface.GetBuffer(numFramesRequested); } /// /// Release buffer /// /// Number of frames written /// Buffer flags public void ReleaseBuffer(int numFramesWritten,AudioClientBufferFlags bufferFlags) { audioRenderClientInterface.ReleaseBuffer(numFramesWritten, bufferFlags); } #region IDisposable Members /// /// Release the COM object /// public void Dispose() { if (audioRenderClientInterface != null) { // althugh GC would do this for us, we want it done now // to let us reopen WASAPI Marshal.ReleaseComObject(audioRenderClientInterface); audioRenderClientInterface = null; GC.SuppressFinalize(this); } } #endregion } }