代码:
using NAudio.Wave; using System.Windows; namespace NAudioDemo { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { RecordController record = new RecordController(); bool startRecord = false; public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { if (!startRecord) { record.StartRecord("D:\rec.wav"); startRecord = true; } else { record.StopRecord(); startRecord = false; } } } /// <summary> /// 录音功能控制类 /// </summary> public class RecordController { public WaveIn mWavIn; public WaveFileWriter mWavWriter; /// <summary> /// 开始录音 /// </summary> /// <param name="filePath"></param> public void StartRecord(string filePath) { mWavIn = new WaveIn(); mWavIn.DataAvailable += MWavIn_DataAvailable; mWavIn.RecordingStopped += MWavIn_RecordingStopped; mWavWriter = new WaveFileWriter(filePath, mWavIn.WaveFormat); mWavIn.StartRecording(); } /// <summary> /// 停止录音 /// </summary> public void StopRecord() { mWavIn?.StopRecording(); mWavIn?.Dispose(); mWavIn = null; mWavWriter?.Close(); mWavWriter = null; } private void MWavIn_RecordingStopped(object sender, StoppedEventArgs e) { mWavIn?.Dispose(); mWavIn = null; mWavWriter?.Close(); mWavWriter = null; } private void MWavIn_DataAvailable(object sender, WaveInEventArgs e) { mWavWriter.Write(e.Buffer, 0, e.BytesRecorded); int secondsRecorded = (int)mWavWriter.Length / mWavWriter.WaveFormat.AverageBytesPerSecond; } } }