前言:本文章使用.NET 6环境,创建一个控制台程序,并通过控制按键R、S、P按键来实现开始录音、停止录音、暂停或继续录音的功能。
以下正文:
1、新建一个项目,例如控制台项目。然后引用NAudio包:.

2、直接上代码:
static void Main(string[] args){using (var waveIn = new WaveInEvent()){using (WaveFileWriter writer = new WaveFileWriter($"{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")}.wav", waveIn.WaveFormat)){waveIn.DataAvailable += (sender, e) =>{writer.Write(e.Buffer, 0, e.BytesRecorded);};Console.WriteLine("Press 'R' to start recording, 'P' to pause/resume, and 'S' to stop.");bool isRecording = false;while (true){var key = Console.ReadKey(true).Key;switch (key){case ConsoleKey.R:if (!isRecording){waveIn.StartRecording();isRecording = true;Console.WriteLine("Recording started...");}break;case ConsoleKey.P:if (isRecording){waveIn.StopRecording();isRecording = false;Console.WriteLine("Recording paused...");}else{waveIn.StartRecording();isRecording = true;Console.WriteLine("Recording resumed...");}break;case ConsoleKey.S:if (isRecording){waveIn.StopRecording();}Console.WriteLine("Recording stopped.");return; // Exit the loop and the program}}}}}
3、代码解说:
-
WaveInEvent用于从音频输入设备(如麦克风)捕获音频。
-
WaveFileWriter用于将音频数据写入WAV文件
-
waveIn.DataAvailable += (sender, e) =>:这是一个事件处理器的添加。当waveIn对象有可用的音频数据时,它会触发DataAvailable事件。
-
writer.Write(e.Buffer, 0, e.BytesRecorded): 当有音频数据可用时,这段代码会被执行。它将音频数据从e.Buffer写入到WAV文件中。
-
waveIn.StartRecording(); 和 waveIn.StopRecording();这两个方法分别用于开始和停止录音。
4、运行效果:
启动:

按R开始录音,按P暂停和恢复,按S停止:

当前默认存储于bin目录下,看下生成的录音文件:

播放的时候,就可以听见自己的录音内容了~

注意,以上内容只是简单例子,如需更加丰富的功能,可以自己定制。