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

 

posted @ 2009-08-14 10:26  吴永富  阅读(1351)  评论(1编辑  收藏  举报