DirectSound 多事件通知发生混乱的问题
[ 问题点数100分]
大家好,有做过 DirectSound采集和播放的高手请进来指点下,[ 问题点数100分]
最近在做 语音通信程序,语音的采集和通信用 微软 DirectX组件中的 DirectSound来实现采集和播放,基本功能已经实现了,能够采到声音,也能播放声音。编程顺序都是按照 微软的DirectX的 API 说明文档来写的。
现在遇到一个比较困惑的问题,采集和播放部分用多事件通知机制的时候,底层的事件执行经常出现乱序,也就是用WaitForMultipleObjects等待通知事件有异常。
//采集部分
dwCapResult=WaitForMultipleObjects(NUM_REC_NOTIFICATIONS,m_aCapNotifyEventArray,FALSE,1000)-WAIT_OBJECT_0;
这一句代码中 NUM_REC_NOTIFICATIONS 是采集通知事件的个数,设定的是 16个,m_aCapNotifyEventArray是采集通知事件数组,通知位置已经设定好了。按DirectSound 的编程API说明,通知设定为 16时,dwResult 应该是按顺序返回 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;并如此反复循环。 我的程序执行的时候 发生混乱,有时还会有事件丢失,不是按上面的规律循环返回事件的。
//播放部分
dwPlayResult=WaitForMultipleObjects(NUM_PLAY_NOTIFICATIONS,m_aPlayNotifyEventArray,FALSE,1000)-WAIT_OBJECT_0;
NUM_PLAY_NOTIFICATIONS 是播放通知事件的个数,设定为 4个,m_aPlayNotifyEventArray为播放通知事件数组,正常执行的话,dwPlayResult 应该是按顺序 0,1,2,3;如此反复循环。 播放事件现在也是发生混乱,程序执行到一会又会出现 0,1,2,0,3,1,2,3。
采集和播放通知混乱,导致播放一直出现断断续续,不连惯的现像。多事件通知机制是 DirectSound 的一个 bug ,我们上层有什么机制可以解决这个 bug吗?现在没有思路解决这个问题,请有做过的同仁指点一下,提供点思路。
自己先顶上去..............