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

2024-08-13 18:50:15 浏览数 (2)

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

以下正文:

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

2、直接上代码:

代码语言:javascript复制
 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目录下,看下生成的录音文件:

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

注意,以上内容只是简单例子,如需更加丰富的功能,可以自己定制。如该文章对您有帮助,也欢迎大佬们一键三连,或者关注本公众号

0 人点赞