【重要!!】creator h5声音静音效果,有超大问题!!!(提供demo)


如果使用:
cc.audioEngine.play(this.buttonAC, true, 0);
来播放音效,假如音效有[1,2,3,4,5]这五帧:如果volume设置为0,则播放为:[1],有一帧则强制播放了,
如果volume设置为1,则播放为:[1,2,3,4,5] 正常播放,
也就是说:前面的一帧 无论怎么设置 都是会播放的。

如果使用:
this.audio = new Audio(this.buttonAC);
this.audio.loop = true;
this.audio.volume = 0;
this.audio.play();
纯H5的代码,则没有问题。

通过查阅cocos源码 发现的确是 setVolume 强制设为1了

但是我通过改源代码不知道为什么没有生效,也就不太清楚是不是此问题

无论使用audio 还是使用 音源流


cocos 都有此问题。

我通过自己写一段AudioContext来播放音源,是没有此问题的。

1赞

NewProject_4.zip (500.7 KB)

此乃上面的demo

@引擎组 昨天一直搞到10点来查看这个问题,请引擎组人员能尽快搞定

再提一句,cocos creator提供的所有播放声音的类、控件 都有此问题,全部试过。

创建音源的时候有问题,如果重复复用的话,后面就没有此问题, 比如设置loop,
但是API提供的复用也有上面所描述的问题,感觉每次复用都像重复创建一样,而却复用的时候 状态为-1

2.0.9的引擎

@引擎大神 @引擎组 @引擎开发组

这个急,要不然只能用原生H5来播放声音了,

这个功能 只是提供一个静音和设置音量功能,基本所有游戏都是有这个功能的

顶!!!

找到引擎源代码文件夹中的CCAudio.js中的如红框所示


将原来的错误代码修改成红框中的代码。
这个问题的原因是引擎想通过调用setTargetAtTime这个API,来达到音频音量的逐渐变化的效果。
但是对于某些短音效来说,0.001秒的时间内它依然存在可以被人类捕捉到的音波,所以0.001这个值不够恰当。
个人觉得其实直接传0就行了。如果开发者要自定义效果的话,可以自行开发。
修改之后,编译引擎即可。

大神,这个方案 不行,怎么设置都没有声音

这个我测试过的 是可以的

我设置成这样就可以了

@337031709 谢谢你的建议,要不然脑子还是蒙的。


最终代码

修复PR:
https://github.com/cocos-creator/engine/pull/4767