Web Audio api:如何从一开始就不断增加声音的音量

时间:2018-06-19 13:21:34

标签: javascript web-audio-api

为了不让听众阻塞我想播放的声音,但是音量不应该从早开始以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)

2 个答案:

答案 0 :(得分:4)

Web Audio API为此提供了library function

AudioParam.linearRampToValueAtTime(value, endTime)

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

结束时间

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


所以在您的情况下使用

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

答案 1 :(得分:0)

通过简单地使用某种lerp函数使其动态,那里有很多。基本思想是,您将在两个起始值之间插入一个值。 示例:

值1 = 5

值2 = 1

插值量= 0.4(40%)

那么结果应该恰好是2.6

所述功能可能看起来像这样

Math.lerp = function (value1, value2, amount) {
    amount = amount < 0 ? 0 : amount;
    amount = amount > 1 ? 1 : amount;
    return value1 + (value2 - value1) * amount;
};

在您的特定情况下,您将最小和最大音量作为两个值,然后使用已过去的时间调节数量。可能是通过一些异步函数调用此函数。 希望我能帮上忙。