WPF使用NAudio录音

news/2024/7/23 9:02:30

代码:

using NAudio.Wave;
using System.Windows;

namespace NAudioDemo
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        RecordController record = new RecordController();
        bool startRecord = false;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (!startRecord)
            {
                record.StartRecord("D:\\rec.wav");
                startRecord = true;
            }
            else
            {
                record.StopRecord();
                startRecord = false;
            }
        }
    }

    /// <summary>
    /// 录音功能控制类
    /// </summary>
    public class RecordController
    {
        public WaveIn mWavIn;
        public WaveFileWriter mWavWriter;

        /// <summary>
        /// 开始录音
        /// </summary>
        /// <param name="filePath"></param>
        public void StartRecord(string filePath)
        {
            mWavIn = new WaveIn();
            mWavIn.DataAvailable += MWavIn_DataAvailable;
            mWavIn.RecordingStopped += MWavIn_RecordingStopped;
            mWavWriter = new WaveFileWriter(filePath, mWavIn.WaveFormat);
            mWavIn.StartRecording();
        }

        /// <summary>
        /// 停止录音
        /// </summary>
        public void StopRecord()
        {
            mWavIn?.StopRecording();
            mWavIn?.Dispose();
            mWavIn = null;
            mWavWriter?.Close();
            mWavWriter = null;
        }

        private void MWavIn_RecordingStopped(object sender, StoppedEventArgs e)
        {
            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;
        }
    }
}

 

转载于:https://www.cnblogs.com/wzwyc/p/7380265.html


http://www.niftyadmin.cn/n/1699588.html

相关文章

【linux基础】vim常用操作

http://www.cnblogs.com/lijia0511/p/5644566.html 1、在线安装vim&#xff1a;&#xff08;原文&#xff09; sudo apt-get install vim &#xff08;ubuntu&#xff09; 2、vim初始化配置&#xff1a; 2.1 查看存放位置&#xff1a;  命令模式键入 :version &#xff08;查…

NOIP模拟 17.8.17

NOIP模拟17.8.17 A 小 G 的字符串文件名 输入文件 输出文件 时间限制 空间限制str.pas/c/cpp str.in str.out 1s 128MB【题目描述】有一天&#xff0c;小 L 给小 G 出了这样一道题&#xff1a;生成一个长度为 n 的、全由小写英文字母构成的字符串&#xff0c;只能使用 k 种字母…

【MYSQL安装】mysql 5.6在centos6.4上的安装

1.卸载系统自带的mysql [rootzhangmeng ~]# rpm -qa |grep mysql mysql-libs-5.1.66-2.el6_3.x86_64 [rootzhangmeng ~]# [rootzhangmeng ~]# rpm -e mysql-libs-5.1.66-2.el6_3.x86_64; error: Failed dependencies:libmysqlclient.so.16()(64bit) is needed by (installed) …

sequelize-auto orm 自动生成models

{/* npm install -g mssqlnpm install -g sequelize-autonpm install -g tedioussequelize-auto -o "./models" -d iBF_Selm_Tables -h 192.168.1.119 -u selmsa -p 1433 -x selm0318 -e mssql */}转载于:https://www.cnblogs.com/cylblogs/p/7390678.html

锋利的jQuery-----读书笔记

<!DOCTYPE html> <html><head> <meta charset"utf-8"><title>锋利的jquery</title><script type"text/javascript" srcjs/jquery-2.2.1.min.js></script><style type"text/css">body{bac…

报错:there is enough space in /tmp and that the installation package is not corrupt

ubuntu20.04安装cuda11.0报错&#xff1a;there is enough space in /tmp and that the installation package is not corrupt####################ubuntu20.04安装cuda 11.0################ 官网下载对应的版本&#xff1a; https://developer.nvidia.com/cuda-toolkit-archi…

死机后关机

方法一&#xff1a; AltF4组合键或者CtrlAltDel组合键 方法二 选择左下角WIN图标&#xff0c;点击电源后&#xff0c;选择关机或重启等 方法三 长按主机电源键

虚拟化--vsphere拓扑素材

vsphere拓扑素材http://url.cn/YoQL1G 转载于:https://blog.51cto.com/williamliuwen/1686115