使用DirectSound进行PCM声音采集
2015-10-20 09:22
155 查看
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/
http://www.xuebuyuan.com/1755728.html
第一步:初始化 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/
http://www.xuebuyuan.com/1755728.html
相关文章推荐
- 集合的性能提升
- 在JDK和Eclipse下Java Applet的编写和运行方式
- iOS8后 屏幕适配 Size Classes 、 AutoLayout
- iOS 中的 Block
- Linux普通到root用户切换-转
- Windows下安装python 包管理器pip
- 数据库CSV导出
- NSString, NSMutableString, NSNumber----OC第四天
- DirectSound详细介绍
- Socket 上传文件
- Navicat Premium简介、下载、安装、破解、连接Oracle
- C++语言里静态变量和全局变量
- Android多媒体播放器
- Android异常问题记录
- XYLX 10.19 天堂(HEAVEN)
- Web安全之SQL注入攻击技巧与防范
- 数据包接收系列 — 下半部实现(软中断)
- 关于android 分享功能
- 测试
- Nhibernate Unknown entity class 的解决办法