怎样从声卡数据实时采集集数据

类是一个不错的选择,笔者就是利用CWinThread类将这两个功能封装成了两个独立的类,为以后的使用提供了很大的便利性。笔者在此为读者提供本人写好的一个工程,此工程为视频语音采集的不完善版,目前实现语音本地采集与播放,VFW视频采集与显示(视频不清晰),在后续章节会将VFW视频采集进行总结,敬请期待。。。。。

下载,此项目是用vs2010编译

1、分配数据buffer,通过WAVEHDR结构体保存,准备存储采集到的音频数据,此处应该根据采集频率设置足量的buffer

3、waveInOpen打开音频输入设备准备开始采集

//开启指定的输入采集设备

6、每当一个buffer数据填满时,会触发 MM_WIM_DATA 消息,在程序中捕获此消息,通过消息传递过来的 lParam,为指向数据buffer的WAVEHDR指针。采集到此数据时可以根据程序需要对其做相应的处理。本程序是直接将采集到的数据提供给播放线程直接播放,你也可以通过socket发送到远端在播放,就可以网络语音了。

7、在要停止采集是使用waveInStop停止采集数据。

8、停止采集成功,立即waveInReset重置设备,重置设备将会导致所有的采集buffer反馈给程序。

9、延时一段时间,等待所有的数据buffer都被程序处理完成

//设置输出设备的输出量

4、等待要输出的数据,通过waveOutPrepareHeader将数据提交给设备准备输出,通过waveOutWrite将提交给设备的数据输出。

5、当提交给设备的数据输出结束,设备会发送一条MM_WOM_DONE消息反馈给设备,设备应该用waveOutUnprepareHeader将提交给设备输出的数据清除。

6、结束输出前先用waveOutReset重置输出设备,重置能够使输出设备全部buffer输出结束,所以在waveOutReset后要延迟一段时间,然后调用waveOutClose关闭设备。

可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  • LabVIEW有自带控件,可以采集来自声卡麦克的声音数据,如附件图所示。

我要回帖

更多关于 数据实时采集 的文章

 

随机推荐