【.NET】使用NAudio实现录音功能

前言:本文章使用.NET 6环境,创建一个控制台程序,并通过控制按键R、S、P按键来实现开始录音、停止录音、暂停或继续录音的功能。

以下正文:

1、新建一个项目,例如控制台项目。然后引用NAudio包:.

【.NET】使用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、运行效果:

启动:

【.NET】使用NAudio实现录音功能

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

【.NET】使用NAudio实现录音功能

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

【.NET】使用NAudio实现录音功能

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

【.NET】使用NAudio实现录音功能

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