本帖最后由 oyljerry 于 2012-09-30 20:42:18 编辑

解决方案 »

  1.   

    你用什么函数?
    playsound?我记得那东西有bug的MciSendString吧。这个播放不错,功能强大的东西,就是有点小复杂
      

  2.   

    你这么看,把录制的声音和输出的声音是相同频率和结构的东西,不同的只是数据区。
    如果你通过网络传输,你录音那端先把录音的频率、时长、缓冲区等等信息发给放音那一端,
    然后放音那端建立好 WAVEFORMAT 等待录音端的数据到来,当录音端的数据到来就把数据缓存到一块
    符合录音端缓存大小的内存中,然后设置标志,XX内存可以播放,然后播放端检测到可以播放标志,
    就根据那个XX内存的参数指定将缓冲区设置到 WAVEHDR 结构的 ->lpData 里,再用 waveOutWrite 
    回放缓冲区数据,如果与此同时继续收到网络数据,就把数据缓存到另一块缓冲区里,同时在播放的
    XX内存队列里加入该缓冲区的序列号。这个队列可以考虑用数组完成,如两个数组:
    DWORD *PlayIndex;     // 这个放播放队列索引
    DWORD **PlayBuff;     // 这个放缓冲区块区还有就是 waveOutOpen 有一个回调函数地址,这个回调函数可以得知是否播放完成,等播放完成再
    判断是否有准备好的缓冲区和设置缓冲区到 WAVEHDR 进行回放,这样不会开销很多时间,甚至感觉
    不出有时间差。
      

  3.   

    我是使用wave函数族的,就是waveInOpen和waveOutOpen等,你说那种函数族我还不会用!!!不知道你有没有参考的东西。谢谢了