public void StopRecording() { _diskWriterRunning = false; if (_diskWriter != null) { _bufferEvent.Set(); _diskWriter.Join(); } Flush(); FreeBuffers(); _diskWriter = null; _wavWriter = null; }
private void DiskWriterThread() { if (_recordingMode == RecordingMode.Baseband) { //_iQObserver.IQReady += IQSamplesIn; //_iQObserver.Enabled = true; } else { _audioProcessor.AudioReady += AudioSamplesIn; _audioProcessor.Bypass = false; } string fileName = string.Format("Data\\ASR_{0}_{1}_{2}.wav", DateTime.Now.ToString("yyyyMMddHHmmss"), Frequency, Seconds); _wavWriter = new SimpleWavWriter(fileName, _wavSampleFormat, (uint)_sampleRate); _wavWriter.Open(); // 每秒返10包数据, int max = 10 * Seconds; int i = 0; while (_diskWriterRunning) { if (_circularBufferTail == _circularBufferHead) { _bufferEvent.WaitOne(); } if (_diskWriterRunning && _circularBufferTail != _circularBufferHead) { if (_recordingMode == RecordingMode.Audio) { ScaleAudio(_floatCircularBufferPtrs[_circularBufferTail], _circularBuffers[_circularBufferTail].Length * 2); } _wavWriter.Write(_floatCircularBufferPtrs[_circularBufferTail], _circularBuffers[_circularBufferTail].Length); _circularBufferUsedCount--; _circularBufferTail++; _circularBufferTail &= (_bufferCount - 1); i++; if (i >= max) { _wavWriter.Close(); _wavWriter = null; FreeBuffers(); _circularBufferTail = 0; _circularBufferHead = 0; fileName = string.Format("Data\\ASR_{0}_{1}_{2}.wav", DateTime.Now.ToString("yyyyMMddHHmmss"), Frequency, Seconds); _wavWriter = new SimpleWavWriter(fileName, _wavSampleFormat, (uint)_sampleRate); _wavWriter.Open(); i = 0; } } } while (_circularBufferTail != _circularBufferHead) { if (_floatCircularBufferPtrs[_circularBufferTail] != null) { _wavWriter.Write(_floatCircularBufferPtrs[_circularBufferTail], _circularBuffers[_circularBufferTail].Length); } _circularBufferTail++; _circularBufferTail &= (_bufferCount - 1); } if (_recordingMode == RecordingMode.Baseband) { //_iQObserver.Enabled = false; //_iQObserver.IQReady -= IQSamplesIn; } else { _audioProcessor.Bypass = true; _audioProcessor.AudioReady -= AudioSamplesIn; } _diskWriterRunning = false; }