Web Audio api : 如何从头开始持续增加音量
Web Audio api : How to increase continuously the volume of the sound from the beginning
为了不让听众感到窒息我想播放一波但是音量不应该从一开始就以 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)
通过简单地使用某种 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;
};
在您的具体情况下,您会将最小和最大音量作为这两个值,然后使用经过的时间来调节数量。可能有一些异步函数回调到这个函数。
希望我能帮到你。
为了不让听众感到窒息我想播放一波但是音量不应该从一开始就以 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)
通过简单地使用某种 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;
};
在您的具体情况下,您会将最小和最大音量作为这两个值,然后使用经过的时间来调节数量。可能有一些异步函数回调到这个函数。 希望我能帮到你。