bug描述:在使用playEffect播放设置循环参数为true,之后调用stopeffect有一定可能性会无法停止声音的循环播放
原因:
simpleAudioEngine在windows上使用mci接口播放音频文件,mci接口本身无循环功能,simpleAudioEngine在mci上层通过内置计数器实现音频的循环播放。当每次播放完毕后,mci都会向指定的窗口函数发送消息通知播放完毕,simpleAudioEngine
会在此时将内置计数器减一,并根据结果判断是否需要继续播放。
问题在于,stopEffect函数仅仅是通过mci接口函数停止了声音的播放,而没有将内置计数器归0,如果此时正好播放完毕,那么对应的窗口函数就会在stopeffect后收到消息,并根据计数器(依然是一个非常大的值)判断是否需要播放。因此会造成无法停止的现象。虽然结束的时间需要正好在播放结束,一般不会出现这种情况,但是当声音文件特别短时(LZ使用的点击音效只有0.065ms),这一概率就会大大增加,因此频繁发生无法停止声音的现象。
修改:
在stopEffect函数中将内置计数器归0