void AsyncWriteLoop()
{
_fs.Seek( GATWavHelper.headerSize, SeekOrigin.Begin );
int sleepMS;
int receivedFrames = 0;
sleepMS = ( int )( GATInfo.AudioBufferDuration * 2000 / 3 );
while( _vDoWrite )
{
receivedFrames = _vReceivedFrames; // cache volatile locally
if( receivedFrames >= _writtenFrames + WriteChunkFrames )
{
ConvertAndWriteChunk( WriteChunkFrames );
}
else
{
Thread.Sleep( sleepMS );
}
}
while( receivedFrames > _writtenFrames )
{
if( receivedFrames < WriteChunkFrames )
{
ConvertAndWriteChunk( receivedFrames - _writtenFrames );
}
else
{
ConvertAndWriteChunk( WriteChunkFrames );
}
}
byte[] header = null;
header = GATWavHelper.GetHeader( _numChannels, GATInfo.OutputSampleRate, ( int )_fs.Length );
_fs.Seek( 0, SeekOrigin.Begin );
_fs.Write( header, 0, header.Length );
_fs.Close();
}