internal override void End()
 {
     if (!_deviceOpen)
     {
         throw new InvalidOperationException();
     }
     _deviceOpen = false;
     if (!_aborted && _hasHeader)
     {
         long position = _stream.Position;
         AudioBase.WriteWaveHeader(_stream, _wfxOut, _startStreamPosition, _totalByteWrittens);
         _stream.Seek(position, SeekOrigin.Begin);
     }
 }
 internal override void Begin(byte[] wfx)
 {
     if (_deviceOpen)
     {
         throw new InvalidOperationException();
     }
     _wfxIn        = WAVEFORMATEX.ToWaveHeader(wfx);
     _doConversion = _pcmConverter.PrepareConverter(ref _wfxIn, ref _wfxOut);
     if (_totalByteWrittens == 0 && _hasHeader)
     {
         AudioBase.WriteWaveHeader(_stream, _wfxOut, _startStreamPosition, 0);
     }
     _bytesWritten = 0;
     _aborted      = false;
     _deviceOpen   = true;
 }