我做一个音频聊天的小程序,接收到声音数据后放入到DirectSoundBuffer中播放,但用DirectSoundBuffer播放好像只能用looping的方式进行,即没有新的数据进来就会重放上一次收到的数据,这对我要求声音的实时性就不行了,因为如果数据晚到一点,就会让上一次的数据播放了两次,这样慢慢下来声音播放就会越来越不实时了,而是延迟越来越明显我能不能每次收到声音数据后就把buffer中的声音清空啰,但DirectSoundBuffer里好像没有clear这样的方法呀,不知如何办了请问大家是用什么方法来解决这个问题的呢?还请指教

解决方案 »

  1.   

    多谢楼上的提示等于是定时向BUFFER里写入数据,或是真实数据或是0是吧有没有这方面的相关代码参考一下呢?
      

  2.   

    创建一个数组用于存放网络上传递过来的音频数据.在DirectSoundBuffer设定Notify,每到一个Notify就从数组中读取一块声音数据放到BufferLock的内存中
      

  3.   

    kingzai所说的notify,如果没有一时没有声音数据(可能网络延时)那如何发声?它就会LOOPING了,我现在就是这样,一但LOOPING就会占用一段时间,这时后面的数据过来就会有声音延时的问题出现了,而且这种情况会越来越明显我现在按 krh2001(边城浪子) 做了下,效果好像有点改进了也请大家谈谈做这方面的经验吧