前言:本文章使用.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目录下,看下生成的录音文件:
播放的时候,就可以听见自己的录音内容了~