TAG:
网上有很多方法从麦克风读取PCM数据,不想一一举例。只是在这里发布一个我自己写的directsound的麦克风PCM数据采集类,通过它,可以很方便的利用directsound技术把麦克风的数据采集到,而且本身,开发者不必太在意自己会不会directsound编程,可以很方便的让开发者的主要精力集中于程序本身,而不是细节。
这个是头文件:
使用的时候,也很简单,我这里声明了一个纯虚类CAdoFrameHandler,这个类专门是用来让使用者重载它的纯虚函数的,只要重载了以 后,设置正确,就可以自动开始采集音频数据了。注意,在这个类里面,我用的是8KHz,16Bits,Mono单声道的PCM数据采集。
使用的时候,首先:
#include "CaptureAudio.h"
然后:
class CMyClass : public CAdoFrameHandler {
...
public: // override the CAdoFrameHandler
void AdoFrameData(BYTE* pBuffer, long lBufferSize) ; // 这个类重载一下,就可以采集了 protected:
CCaptureAudio m_cap_ado ; // 这个对象就是用来采集音频数据的
} ;
在OnInitDialog类中,我们可以使用如下初始化方法:
打开mic,同时初始化directsound:
m_cap_ado.Open() ;
开始采集声音就是:
m_cap_ado.GrabAudioFrames(TRUE, this) ;
调用它以后,只要你重载了上面的那个函数,directsound就会周期性的从麦克采集数据,然后调用该函数。
停止声音采集是:
m_cap_ado.GrabAudioFrames(FALSE, NULL) ;
关闭mic,同时释放directsound:
m_cap_ado.Close() ;
就这么简单的几步,就可以完成麦克风的音频数据采集。
有问题欢迎大家多多交流。
CPP的源码见后一页。 (陈罡) |