大家好, 我参照网上前辈的文章完成了DirectX的放音和录音,以及即录即放. 单独放音,程序正常,可是到了录音时, CPU占用率就狂高, 不知怎么回事,是录音缓冲区的类型问题么? 我的DSCBUFFERDESC dscbd;dscbd.dwFlags=0;而且因为还是能实现录和放的功能, 程序在逻辑上似乎没什么不对头的. 这样我就不知道从哪些方面着手来调试, 请高手指教!
另外, 如果通过windbg来调试的话, 我怎么看那些CPU的寄存器的值(我的意思是它们的值有什么意义,是通过断点处的汇编语句来分析么)

解决方案 »

  1.   

    是录成mp3还是什么的?mp3慢很正常.......
      

  2.   

    那就要自己分析前辈的代码了。
    如果使用了MsgWaitForMultipleObjects,不会出现cpu狂高的情况的你跑跑DirectShow SDK里面提供的Demo就知道了
      

  3.   

    ds搞8懂,不过我用MM_WIM_DATA一切正常,不过没压缩
      

  4.   

    DXSDK里面不是有示例吗?你参考下:DXSDK\Samples\C++\DirectSound\CaptureSound
    试试看?
      

  5.   

    谢谢大家的关心
    1,未压缩,就是按采集进来的再原样出去
    2,我用的是WaitForSingleObject,将缓冲区分若干段,设段计数器,每当事件set一次时,段计数器加1,并对该段读写操作;没用WaitForMultipleObjects是因为担心该API有可能在多个事件来临时屏蔽低优先级的(开始时我用的就是这个,发现怎么每次一有事件了,返回值也就是事件号总是0,后来才查到这个问题,所以想了个前面的办法);但我觉得用这个应该不会影响性能
    3,缓冲区:的确设得蛮小的,也就1秒的样子,可是录音放音我都设这么大,怎么放音就没关系呢
    4,DX我装的是今年3月的,X64那部分我没装,结果DXSDK\Samples\C++\DirectSound这个文件夹我没有
      

  6.   

    录音,放音,你还可以用 waveInXXX ,waveOutXX 之类的函数啊。
      

  7.   

    不是DirectX SDK,是DirectShow SDK
      

  8.   

    大家好,我加过录音缓冲区内存了
    现在的问题是,我对比了标准的示例,好像没发现什么不过我的实现是外部声明一个大数组,再将这个数组传入录音部分,即将录音缓冲区的值拷贝到数组中,数组也是循环利用的。运行时发现,放音时,内存稳定在某一值附近,(就是那个大数组占的内存),CPU在百分之0到2,效果正常;录音,先是内存不断的增,CPU几乎维持百分之0到2,直到内存为五千几时的一个常数(每次都是这个数),内存稳定,CPU开始飚到百分之五六十。若同时放音,录音,(用同一个大数组)则效果正常,即我从耳机里可以不到1S的延迟听到我说的,但CPU占用巨高,估计还是放音问题。
    现在就是不知道为什么内存,CPU会在录音时有上述情况,谢谢。(录音,放音程序基本是对偶的,按说,放音不存在问题的话,录音不该有问题呀)