DirectSound折腾记之二

 DirectSound折腾记之二

找到有节奏的“突突”杂音的步骤:
1、先把收到的音频数据放到一个大的缓存(比如:可保存10秒的音频)
2、然后直接播放缓存里的数据,发现音频很流畅干净,说明杂音是播放过程中产生

解决思路:

利用Notify对象实现播放位置的通知,不断更新播放缓冲(SecondaryBuffer)里的音频数据。
不过很可惜,结果是失败的,在设置通知的时候:
//设置通知
myNotify2 = new Notify(secBuffer);
总会产生”值不在预期范围内“的异常,据说是DirectX中的BUG,微软也撒手不管了,只好另想3招:
1、另起线程,不断检测SecondaryBuffer的播放位置PlayPosition,发现该线程占用CPU太过分,此招作废。
2、收到播放端发送过来的数据时,检测播放位置PlayPosition,发现检测频率太低,受制于数据接收的速度。
3、使用Timer,定时检测播放位置PlayPosition,此招为前2招的折衷,采用。
另外:为了实现平滑播放,对音频数据进行了合并和扩充,效果还比较理想。
对于回声的问题,时间紧迫,暂时没有解决。

你可能感兴趣的:(timer,微软)