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

     

  • 相关阅读:
    单列模式
    经济数据价格走势图(包括纸黄金),可以查看历史
    UVA10010的类似BFS做法
    转:数据结构专项之Hash函数
    ZOJ1709 DFS和BFS两种搜索方法
    HDU1969(二分搜索)
    HDU1045 回溯
    HDU2899(三分搜索)
    安神口中的水题
    HDU2199(二分搜索无限逼近)
  • 原文地址:https://www.cnblogs.com/OwenWu/p/1545841.html
Copyright © 2011-2022 走看看