大家好, 我参照网上前辈的文章完成了DirectX的放音和录音,以及即录即放. 单独放音,程序正常,可是到了录音时, CPU占用率就狂高, 不知怎么回事,是录音缓冲区的类型问题么? 我的DSCBUFFERDESC dscbd;dscbd.dwFlags=0;而且因为还是能实现录和放的功能, 程序在逻辑上似乎没什么不对头的. 这样我就不知道从哪些方面着手来调试, 请高手指教!
另外, 如果通过windbg来调试的话, 我怎么看那些CPU的寄存器的值(我的意思是它们的值有什么意义,是通过断点处的汇编语句来分析么)
另外, 如果通过windbg来调试的话, 我怎么看那些CPU的寄存器的值(我的意思是它们的值有什么意义,是通过断点处的汇编语句来分析么)
解决方案 »
- 求教一个编辑框显示数据的简单问题
- MFC对话框贴上背景图片,Check-box背景色怎么透明
- 这种需求如何设计页面好呢?
- dc getdc ddraw
- 引用"0xffffffff"内存,不能"read"
- 问一下,如何把BYTE 格式化成 %02X 这样的格式? 不用CString
- 用VC编写简单的文本阅读程序!高手请帮忙!
- 不懂的不要进入 绝对是高手才能回答的问题
- 在光盘上发布数据库,用什么数据库好?
- 关于对话框的一个简单问题
- Hook API 在Debug和Release的区别??同样的代码为什么在Debug下就能成功,而Release下就不行.
- 在脚本中如何将SQL登录改为windows集成验证模式
如果使用了MsgWaitForMultipleObjects,不会出现cpu狂高的情况的你跑跑DirectShow SDK里面提供的Demo就知道了
试试看?
1,未压缩,就是按采集进来的再原样出去
2,我用的是WaitForSingleObject,将缓冲区分若干段,设段计数器,每当事件set一次时,段计数器加1,并对该段读写操作;没用WaitForMultipleObjects是因为担心该API有可能在多个事件来临时屏蔽低优先级的(开始时我用的就是这个,发现怎么每次一有事件了,返回值也就是事件号总是0,后来才查到这个问题,所以想了个前面的办法);但我觉得用这个应该不会影响性能
3,缓冲区:的确设得蛮小的,也就1秒的样子,可是录音放音我都设这么大,怎么放音就没关系呢
4,DX我装的是今年3月的,X64那部分我没装,结果DXSDK\Samples\C++\DirectSound这个文件夹我没有
现在的问题是,我对比了标准的示例,好像没发现什么不过我的实现是外部声明一个大数组,再将这个数组传入录音部分,即将录音缓冲区的值拷贝到数组中,数组也是循环利用的。运行时发现,放音时,内存稳定在某一值附近,(就是那个大数组占的内存),CPU在百分之0到2,效果正常;录音,先是内存不断的增,CPU几乎维持百分之0到2,直到内存为五千几时的一个常数(每次都是这个数),内存稳定,CPU开始飚到百分之五六十。若同时放音,录音,(用同一个大数组)则效果正常,即我从耳机里可以不到1S的延迟听到我说的,但CPU占用巨高,估计还是放音问题。
现在就是不知道为什么内存,CPU会在录音时有上述情况,谢谢。(录音,放音程序基本是对偶的,按说,放音不存在问题的话,录音不该有问题呀)