RT,錄音並保存成wav格式的文件,原本是想用DirectX,可是找了好多資料都沒法正常錄音,只能用別的方法了,而後就找到了NAudio函數
下載地址 http://naudio.codeplex.com/this
下面上在網上找的例子裏面的關鍵類spa
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LuYinC.Recorder { public interface ISpeechRecorder { void SetFileName(string fileName); void StartRec(); void StopRec(); } }
using NAudio.Wave; using System; namespace LuYinC.Recorder { class NAudioRecorder : ISpeechRecorder { public WaveIn waveSource = null; public WaveFileWriter waveFile = null; private string fileName = string.Empty; /// <summary> /// 開始錄音 /// </summary> public void StartRec() { 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(); } /// <summary> /// 中止錄音 /// </summary> public void StopRec() { waveSource.StopRecording(); // Close Wave(Not needed under synchronous situation) if (waveSource != null) { waveSource.Dispose(); waveSource = null; } if (waveFile != null) { waveFile.Dispose(); waveFile = null; } } /// <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(); } } /// <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; } } } }
調用方法:code
recorder = new NAudioRecorder(); //開始錄音 recorder.SetFileName("record.wav"); recorder.StartRec(); //結束錄音 recorder.StopRec();
如下是我下載好的NAudio.dll文件,不知道怎麼直接放上來文件包,只能發一個百度網盤的鏈接了orm
連接:https://pan.baidu.com/s/1hundpEs 密碼:i1m2blog