C# recording audio based on audio in Console

1.

Install-package naudio -v 1.9.0

2.

using NAudio.Wave;

3.

复制代码
 public class NAudioHelper
    {        
        public WaveInEvent mWavIn;
        public WaveFileWriter mWavWriter;

        public bool IsStoppedRecording { get; set; } = false;
        /// <summary>
        /// starting  recording
        /// </summary>
        /// <param name="filePath"></param>
        public void StartRecord(string filePath)
        {
            mWavIn = new WaveInEvent();
            mWavIn.DataAvailable += MWavIn_DataAvailable;           
            mWavWriter = new WaveFileWriter(filePath, mWavIn.WaveFormat);
            mWavIn.StartRecording();

            ConsoleKeyInfo cki = Console.ReadKey(true);            
            while (cki.Key == ConsoleKey.Escape)
            {
                //Environment.Exit(0);
                StopRecord();
                IsStoppedRecording = true;
                if(IsStoppedRecording)
                {
                    Console.ForegroundColor = ConsoleColor.Red; 
                    Console.WriteLine("Stopped recording!");
                    break;
                }
            }            
        }

        /// <summary>
        /// stop recording
        /// </summary>
        public void StopRecord()
        {
            mWavIn?.StopRecording();
            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;
        }
    }


static void Main(string[] args)
        {
            NAudioDemo();      
        }
         
        static void NAudioDemo()
        {
            NAudioHelper recordHelper = new NAudioHelper();
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Ready!");
            Console.WriteLine("Enter Enter Key to start recording!");
            ConsoleKeyInfo info = Console.ReadKey(true);  

            bool isStarted = false;
            while (info.Key==ConsoleKey.Enter)
            {
                if (!isStarted)
                {
                    string recordedFileName = DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".mp3";
                    Console.WriteLine("Start recording...");
                    Console.WriteLine("Press the Escape(Esc) key to quit: \n");
                    recordHelper.StartRecord(recordedFileName);                    
                    isStarted = true;
                }                
            }           
        }     
复制代码

 

posted @   FredGrit  阅读(219)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示