首页 新闻 会员 周边

谁会用NAudio 做一个简单的 Winfrom录音程序 而且能保存成文件

1
悬赏园豆:200 [待解决问题]

用Winfrom实现                            

北京阿杰的主页 北京阿杰 | 初学一级 | 园豆:2
提问于:2013-12-26 10:52
< >
分享
所有回答(2)
0

以前用来播放,不清楚是否有录音功能.  http://www.oschina.net/p/naudio/

陈大欠 | 园豆:185 (初学一级) | 2013-12-26 11:48

这个 我也看过  但是没看懂  我就是想做一个简单的录音功能 用WInfrom 实现就可以

支持(0) 反对(0) 北京阿杰 | 园豆:2 (初学一级) | 2013-12-26 11:50
0

Demo中不是有吗?

http://naudio.codeplex.com

幻天芒 | 园豆:37175 (高人七级) | 2013-12-26 12:42

我一点没看懂  能给个源代码吗 

支持(0) 反对(0) 北京阿杰 | 园豆:2 (初学一级) | 2013-12-26 12:59

@北京阿杰: 晚点弄个...

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2013-12-26 19:04

@幻天芒: 

private IWaveIn waveIn;
        private WaveFileWriter writer;
        /// <summary>
        /// 开始录音
        /// </summary>
        private void StartRecording()
        {
            if (waveIn != null) return;
            waveIn = new WaveIn {WaveFormat = new WaveFormat(8000, 1)};//设置码率
            writer = new WaveFileWriter("test.wav", waveIn.WaveFormat);
            waveIn.DataAvailable += waveIn_DataAvailable;
            waveIn.RecordingStopped += OnRecordingStopped;
            waveIn.StartRecording();
        }
        /// <summary>
        /// 停止录音
        /// </summary>
        private void StopRecording()
        {
            waveIn.StopRecording();
            waveIn.Dispose();
        }
        /// <summary>
        /// 录音中
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void waveIn_DataAvailable(object sender, WaveInEventArgs e)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new EventHandler<WaveInEventArgs>(waveIn_DataAvailable), sender, e);
            }
            else
            {
                writer.Write(e.Buffer, 0, e.BytesRecorded);
                int secondsRecorded = (int)(writer.Length / writer.WaveFormat.AverageBytesPerSecond);//录音时间获取
                if (secondsRecorded >= 30)
                {
                    StopRecording();
                }

            }
        }
        /// <summary>
        /// 停止录音
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
       private void OnRecordingStopped(object sender, StoppedEventArgs e)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new EventHandler<StoppedEventArgs>(OnRecordingStopped), sender, e);
            }
            else
            {
                if (waveIn != null) // 关闭录音对象
                {
                    waveIn.Dispose();
                    waveIn = null;
                }
                if (writer != null)//关闭文件流
                {
                    writer.Close();
                    writer = null;
                }
                if (e.Exception != null)
                {
                    MessageBox.Show(String.Format("出现问题 {0}",
                                                  e.Exception.Message));
                }
            }
        }

主要代码就这些,using一下内容:

using NAudio.Wave;

支持(1) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2013-12-27 11:41

@幻天芒: 这个只能录mic的声音吧,不能录播放的声音

支持(0) 反对(0) lanvv | 园豆:205 (菜鸟二级) | 2013-12-27 15:55

@lanvv: 你是指系统本身播放的声音?

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2013-12-27 17:27

@幻天芒: 大神,大神求命呀,我遇到一个问题。

writer.Write(e.Buffer, 0, e.BytesRecorded);

int secondsRecorded = (int)(writer.Length / writer.WaveFormat.AverageBytesPerSecond);//录音时间获取

就是这句执行之后,

这句就报错 waveIn.StopRecording();未将对像引有到实例。

支持(0) 反对(0) 点灯网 | 园豆:40 (初学一级) | 2016-11-29 21:22

@点灯网: 根据报错直接调试哇,这个错误很明确,检查waveIn这个对象。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2016-11-29 21:23

@幻天芒: 但是根据上面的代码,这个waveIn 不应该为空呀

支持(0) 反对(0) 点灯网 | 园豆:40 (初学一级) | 2016-11-29 21:24

@点灯网: 直接改demo哇,我觉得这个demo挺全的。这个,光看代码不太容易看出问题。。。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2016-11-29 21:25

@幻天芒: demo 好像没有源代码

支持(0) 反对(0) 点灯网 | 园豆:40 (初学一级) | 2016-11-29 21:29

我有的vs2010还打不开,提示用更新的vs建的项目,晕死

支持(0) 反对(0) 点灯网 | 园豆:40 (初学一级) | 2016-11-29 21:31

@点灯网: 升级到最新版本的开发工具把。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2016-11-29 21:33

@幻天芒: 2015太重了

支持(0) 反对(0) 点灯网 | 园豆:40 (初学一级) | 2016-11-29 21:34

@点灯网: 还好~不需要装完。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2016-11-29 21:34

@幻天芒: 我先去下载一个以前的Naudio

支持(0) 反对(0) 点灯网 | 园豆:40 (初学一级) | 2016-11-29 21:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册