为了不让听众窒息,我想播放一波,但音量不要从一开始就以100%的比率播放,例如,在2秒的持续时间内,音量应从0%变为100%。

我加强了setTimeout,并随着时间增加了增益,但是我不知道是否还有其他更好的方法

    var source = aCtx.createBufferSource();
    source.buffer = buf;
    var gainNode = aCtx.createGain();
    gainNode.gain.value = 0
    source.connect(gainNode);
    gainNode.connect(aCtx.destination);
    source.start(0);

setTimeout(function() {
     gainNode.gain.value = 0.5
}, 1000)

setTimeout(function() {
     gainNode.gain.value = 1
}, 2000)

最佳答案

Web Audio API为此提供了一个library function

AudioParam.linearRampToValueAtTime(value, endTime)




一个浮点数,表示AudioParam在给定时间之前将逐渐增加的值。

时间结束

一个双精度值,代表斜坡开始之后停止值更改的确切时间(以秒为单位)。



所以在你的情况下使用

gainNode.gain.linearRampToValueAtTime(0, 0)
gainNode.gain.linearRampToValueAtTime(1, 2)

关于javascript - Web Audio api:如何从一开始就不断增加声音的音量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50929573/

10-09 23:24