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

     

  • 相关阅读:
    Two Sum II
    Subarray Sum
    Intersection of Two Arrays
    Reorder List
    Convert Sorted List to Binary Search Tree
    Remove Duplicates from Sorted List II
    Partition List
    Linked List Cycle II
    Sort List
    struts2结果跳转和参数获取
  • 原文地址:https://www.cnblogs.com/OwenWu/p/1545841.html
Copyright © 2011-2022 走看看