C# DirectSound录音类

 

一.声卡录音的基本原理 

为了实现一个录音的基本过程,至少需要以下对象的支持: 

1.   录音设备,对我们的PC设备就是声卡。这个录音设备可以进行的操作应该有开始和关闭。 

2.   缓冲区,也就是录制的声音放在哪里的问题。


二.DirectSound对录音的描述模型 

1.   DirectSound对录音的支持类 

     Capture,设备对象,可以看作是声卡的描述。 

     CaptureBuffer,缓冲区对象,存放录入的音频数据。 

     Notify,事件通知对象,由于录音是一个长时间的过程,因此使用一个缓冲队列(多个缓冲区)接收数据,每当一个缓冲区满的时候,系统使用这个对象通知应用程序取走这个缓冲区,并继续录音。

以上三个对象是进行录音操作的主要对象,由于在C++中对DirectSound的操作DirectX帮助文档中已经有很详细的说明,这里就不再赘述了。本文是针对Managed Code。除了以上三个主要的DirectSound类,还需要以下几个辅助类。 

     WaveFormat,描述了进行录制的声音波形的格式,例如采样率,单声道还是立体声,每个采样点的长度等等。 

     Thread,线程类,由于录音的过程是需要不断处理缓冲区满的事件,因此新建一个线程对此进行单独处理。

     AutoResetEvent,通知的事件,当缓冲区满的时候,使用该事件作为通知事件。

 

 

 

 

Code

 

外部窗体调用方式

声明部分:

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;

}

 

posted on 2009-05-27 16:08  jdmei520  阅读(925)  评论(2编辑  收藏  举报

导航