zoukankan      html  css  js  c++  java
  • WPF使用NAudio录音

    代码:

    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;
            }
        }
    }
  • 相关阅读:
    公布一些常用的WebServices
    ARM的嵌入式Linux应用程序开发研究
    c++读写剪贴板代码
    如何破解路由器密码(CISCO)!
    用Shell扩展实现源代码统计程序(转)
    图文例解C++类的多重继承与虚拟继承
    MSDN上关于ADO示例代码
    不错的句子
    codeforces #271(div2) F. Ant colony
    [Z]CUDA中Bank conflict冲突
  • 原文地址:https://www.cnblogs.com/wzwyc/p/7380265.html
Copyright © 2011-2022 走看看