调用麦克风列阵进行录音

这篇博客详细介绍了如何利用SoundRecord类进行麦克风录音,包括初始化音频捕捉设备、设定录音格式、创建录音文件、处理缓冲区消息、以及停止录音的步骤。通过设置缓冲区和通知事件,实现了录音数据的实时写入和文件头部信息的正确填写。
摘要由CSDN通过智能技术生成
定义音频捕捉设备(SoundRecord类)
        public const int cNotifyNum = 16;       // 缓冲队列的数目
        private int mNextCaptureOffset = 0;      // 该次录音缓冲区的起始点
        private int mSampleCount = 0;            // 录制的样本数目
        private int mNotifySize = 0;             // 每次通知大小
        private int mBufferSize = 0;             // 缓冲队列大小
        private string mFileName = string.Empty;     // 文件名
        private FileStream mWaveFile = null;         // 文件流
        private BinaryWriter mWriter = null;         // 写文件
        private Capture mCapDev = null;              // 音频捕捉设备
        private CaptureBuffer mRecBuffer = null;     // 缓冲区对象
        private Notify mNotify = null;               // 消息通知对象
        private WaveFormat mWavFormat;                       // 录音的格式
        private Thread mNotifyThread = null;                 // 处理缓冲区消息的线程
        private AutoResetEvent mNotificationEvent = null;    // 通知事件
        
        public SoundRecord()
        {
            InitializeComponent();
            // 初始化音频捕捉设备
            InitCaptureDevice();
            // 设定录音格式
            mWavFormat = CreateWaveFormat();
        }
        /// 
        /// 设定录音结束后保存的文件,包括路径
        /// 
        /// 保存wav文件的路径名
        public void SetFileName(string filename)
        {
            mFileName = filename;
        }
        /// 
        /// 开始录音
        /// 
        public void RecStart()
        {
            // 创建录音文件
            CreateSoundFile();
            // 创建一个录音缓冲区,并开始录音
            CreateCaptureBuffer();
            // 建立通知消息,当缓冲区满的时候处理方法
            InitNotifications();
            mRecBuffer.Start(true);
        }
        /// 
        /// 停止录音
        /// 
        public void RecStop()
        {
            // 关闭通知消息
            if (null != mNotificationEvent)
                mNotificationEvent.Set();
            // 停止录音
            mRecBuffer.Stop();
            // 写入缓冲区最后的数据
            RecordCapturedData();
            // 回写长度信息
            mWriter.Seek(4, SeekOrigin.Begin
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值