使用DirectSound进行PCM声音采集

msdn有directsound函数的讲解,网上有类似流程的例子。我就不说废话了哈,直接说一下步骤, 因为步骤清楚了,自然写起来就不那么费劲了。^ 。^

第一步:初始化 CoInitialize();

第二步:创建一个LPDIRECTSOUNDCAPTURE8类型的设备,我用的DirectSoundCaptureCreate8()

第三步:创建一个LPDIRECTSOUNDCAPTUREBUFFER类型的buffer对象,CreateCaptureBuffer()

第四部:用LPDIRECTSOUNDCAPTUREBUFFER类型的对象,query一个LPDIRECTSOUNDCAPTUREBUFFER8类型的对象。

第五步:

5.1设置提醒事件,就是在什么时间自己可以去缓冲区提取数据。用LPDIRECTSOUNDCAPTUREBUFFER8类型的对象,query一个LPDIRECTSOUNDNOTIFY8类型的对象。

5.2创建时间, createevent()

5.3描述事件的提醒,包含什么时间取数据,以及event的句柄。其类型为DSBPOSITIONNOTIFY。

5.4设置事件提醒,LPDIRECTSOUNDNOTIFY8中的SetNotificationPositions()方法。

第六步:启动录音,LPDIRECTSOUNDCAPTUREBUFFER8的start方法

第七步:对数据进行操作

7.1等待设置事件的发生 :MsgWaitForMultipleObjects

7.2对数据锁操作:LPDIRECTSOUNDCAPTUREBUFFER8中的lock方法

7.3拷贝数据

7.4数据解锁:LPDIRECTSOUNDCAPTUREBUFFER8中的unlock方法


需要注意的是,采集的缓冲是一个环形缓冲区。对数据操作时要加以处理。

网上的很多例子都几乎都一样- -~ 这里给一个参考的网址:http://lgy-047.blog.163.com/blog/static/6134656520139109334568/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值