using NAudio.Wave;
using System;
using System.Collections.Generic;namespace WinFromBaidu
{class NAudioRecorder{#region varpublic WaveIn waveSource = null;public WaveFileWriter waveFile = null;private string fileName = string.Empty;public Action<byte[]> ReciveMaxData;private List<byte> CacheBuffer = new List<byte>();private DateTime BeginTime = DateTime.Now;private bool IsSpeeak = false;public float LoudnessStant = 0.08F;#endregionpublic void StartRec(){waveSource = new WaveIn();waveSource.WaveFormat = new WaveFormat(16000, 16, 1); waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);waveSource.RecordingStopped += new EventHandler<StoppedEventArgs>(waveSource_RecordingStopped);waveFile = new WaveFileWriter(fileName, waveSource.WaveFormat);waveSource.StartRecording();}public void StopRec(){waveSource.StopRecording();if (waveSource != null){waveSource.Dispose();waveSource = null;}if (waveFile != null){waveFile.Dispose();waveFile = null;}}public void SetFileName(string fileName){this.fileName = fileName;}private void waveSource_DataAvailable(object sender, WaveInEventArgs e){if (waveFile != null){}AnalyzeVoice(e.Buffer);}private void waveSource_RecordingStopped(object sender, StoppedEventArgs e){if (waveSource != null){waveSource.Dispose();waveSource = null;}if (waveFile != null){waveFile.Dispose();waveFile = null;}}private void AnalyzeVoice(byte[] buf){float max = LoudnessStant;int maxNumber = 0;for (int index = 0; index < buf.Length; index += 2){short sample = (short)((buf[index + 1] << 8) |buf[index + 0]);var sample32 = sample / 32768f;if (sample32 < 0) sample32 = -sample32;if (sample32 > max){max = sample32;maxNumber++;}}if (max != LoudnessStant){CacheBuffer.AddRange(buf);IsSpeeak = true;BeginTime = DateTime.Now;}else{if (IsSpeeak){if ((DateTime.Now - BeginTime).TotalSeconds < 2){CacheBuffer.AddRange(buf);}else{CacheBuffer.AddRange(buf);ReciveMaxData(CacheBuffer.ToArray());CacheBuffer.Clear();IsSpeeak = false;}}else{if (CacheBuffer.Count > 3200 * 6){CacheBuffer.RemoveRange(0, 3200);}CacheBuffer.AddRange(buf);}}}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!