/// <summary>
 /// Releases resources held by this WaveBuffer
 /// </summary>
 protected void Dispose(bool disposing)
 {
     if (disposing)
     {
         // free managed resources
     }
     // free unmanaged resources
     if (waveInHandle != IntPtr.Zero)
     {
         WaveInterop.waveInUnprepareHeader(waveInHandle, header, Marshal.SizeOf(header));
         waveInHandle = IntPtr.Zero;
     }
     if (hHeader.IsAllocated)
     {
         hHeader.Free();
     }
     if (hBuffer.IsAllocated)
     {
         hBuffer.Free();
     }
     if (hThis.IsAllocated)
     {
         hThis.Free();
     }
 }
 /// <summary>
 /// Place this buffer back to record more audio
 /// </summary>
 public void Reuse()
 {
     // TEST: we might not actually need to bother unpreparing and repreparing
     MmException.Try(WaveInterop.waveInUnprepareHeader(waveInHandle, header, Marshal.SizeOf(header)), "waveUnprepareHeader");
     MmException.Try(WaveInterop.waveInPrepareHeader(waveInHandle, header, Marshal.SizeOf(header)), "waveInPrepareHeader");
     //System.Diagnostics.Debug.Assert(header.bytesRecorded == 0, "bytes recorded was not reset properly");
     MmException.Try(WaveInterop.waveInAddBuffer(waveInHandle, header, Marshal.SizeOf(header)), "waveInAddBuffer");
 }