using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using NAudio.Wave; using System.IO; namespace WindowsVIKI { public class NAudioRecorder { public WaveIn waveSource = null; public WaveFileWriter waveFile = null; private string fileName = string.Empty; /// <summary> /// 开始录音 /// </summary> public void StartRec() { try { waveSource = new WaveIn(); waveSource.WaveFormat = new WaveFormat(16000, 16, 1); // 16bit,16KHz,Mono的录音格式 waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable); waveSource.RecordingStopped += new EventHandler<StoppedEventArgs>(waveSource_RecordingStopped); waveFile = new WaveFileWriter(fileName, waveSource.WaveFormat); waveSource.StartRecording(); } catch { } } /// <summary> /// 停止录音 /// </summary> public void StopRec() { // waveSource.StopRecording(); if (waveSource != null) { waveSource.Dispose(); waveSource = null; } if (waveFile != null) { waveFile.Dispose(); waveFile = null; } } /// <summary> /// 停止录音 /// </summary> public void PauseRec() { waveSource.StopRecording(); } /// <summary> /// 录音结束后保存的文件路径 /// </summary> /// <param name="fileName">保存wav文件的路径名</param> public void SetFileName(string fileName) { this.fileName = fileName; } /// <summary> /// 开始录音回调函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void waveSource_DataAvailable(object sender, WaveInEventArgs e) { if (waveFile != null) { waveFile.Write(e.Buffer, 0, e.BytesRecorded); waveFile.Flush(); try { if(Form1._record_status == Form1.RecordStatus.On){ Form1.wss_viki.Send(e.Buffer); } } catch (Exception ex) { Form1._record_status = Form1.RecordStatus.Off; } } } /// <summary> /// 录音结束回调函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void waveSource_RecordingStopped(object sender, StoppedEventArgs e) { if (waveSource != null) { waveSource.Dispose(); waveSource = null; } if (waveFile != null) { waveFile.Dispose(); waveFile = null; } } } }
/// <summary> /// 录音对象 /// </summary> NAudioRecorder recorder; outputFolder = System.Windows.Forms.Application.StartupPath; Directory.CreateDirectory(outputFolder); var currentFileName = String.Format("viki-{0:yyy-MM-dd HH-mm-ss}.wav", DateTime.Now); audioFile = Path.Combine(outputFolder + "/record_file/", currentFileName); recorder = new NAudioRecorder(); recorder.SetFileName(audioFile);
引用控件下载:NAudio.dll
发表评论