zoukankan      html  css  js  c++  java
  • C#中使用DirectSound录音

     

    一.声卡录音的基本原理
    为了实现一个录音的基本过程,至少需要以下对象的支持:
    1.   录音设备,对我们的PC设备就是声卡。这个录音设备可以进行的操作应该有开始和关闭。
    2.   缓冲区,也就是录制的声音放在哪里的问题。

    二.DirectSound对录音的描述模型 (我装的是directx_dec2005_redist.exe)
    1.   DirectSound对录音的支持类
    ØCapture,设备对象,可以看作是声卡的描述。
    ØCaptureBuffer,缓冲区对象,存放录入的音频数据。
    ØNotify,事件通知对象,由于录音是一个长时间的过程,因此使用一个缓冲队列(多个缓冲区)接收数据,每当一个缓冲区满的时候,系统使用这个对象通知应用程序取走这个缓冲区,并继续录音。
    以上三个对象是进行录音操作的主要对象,由于在C++中对DirectSound的操作DirectX帮助文档中已经有很详细的说明,这里就不再赘述了。本文是针对Managed Code。除了以上三个主要的DirectSound类,还需要以下几个辅助类。
    ØWaveFormat,描述了进行录制的声音波形的格式,例如采样率,单声道还是立体声,每个采样点的长度等等。
    ØThread,线程类,由于录音的过程是需要不断处理缓冲区满的事件,因此新建一个线程对此进行单独处理。
    ØAutoResetEvent,通知的事件,当缓冲区满的时候,使用该事件作为通知事件。
    三.代码解析(SoundRecord类)

    Code


     

    5.外部窗体调用方式
    声明部分:
    private SoundRecord recorder = null;    // 录音
    窗体构造函数:
    recorder = new SoundRecord();

    启动录音按钮:
    private void btnStart_Click(object sender, System.EventArgs e)
    {
        //
        // 录音设置
        //
        string wavfile = null;
        wavfile = “test.wav”;
        recorder.SetFileName(wavfile);
        recorder.RecStart();
    }

    中止录音按钮:
    private void btnStop_Click(object sender, System.EventArgs e)
    {
        recorder.RecStop();
        recorder = null;
    }

    6.需要添加的外部引用文件
    在系统的System32目录下添加以下两个引用文件,如果没有,在DirectX的开发包内可以找到。
    Microsoft.DirectX.dll
    Microsoft.DirectX.DirectSound.dll

     

  • 相关阅读:
    mybatis中大于等于小于等于的写法
    RandomAccess接口
    ArrayList源码解析
    使用Docker搭建MySQL主从复制(一主一从)
    狂神Docker视频学习笔记(基础篇)
    【JQ】jQuery实现将div中滚动条滚动到指定位置的方法
    JAVA线程池的基本使用
    史上最全的Java技术体系思维导图,没有之一!
    springboot整合kafka
    spring cloud alibaba 分布式事务解决方案之seata-1.3.0
  • 原文地址:https://www.cnblogs.com/OwenWu/p/1545841.html
Copyright © 2011-2022 走看看