Exemplo n.º 1
0
        public void StopRecording()
        {
            _diskWriterRunning = false;

            if (_diskWriter != null)
            {
                _bufferEvent.Set();
                _diskWriter.Join();
            }

            Flush();
            FreeBuffers();

            _diskWriter = null;
            _wavWriter  = null;
        }
Exemplo n.º 2
0
        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;
        }