大家, 我正在使用Web Audio API开发一个音乐网络应用程序,而且我遇到了一个我无法理解的问题。
该应用程序基本上是这样的:用户浏览全屏图像,在该图像上有一些与特定声音相关的特定点。该应用程序播放更接近用户的声音,并在用户离开时淡出它们。
当用户处于有两个以上声音(3或4,但有时也有2个就足够)播放的位置时,问题发生(不是每次),然后进入"无声&# 34;位置。
在这种情况下,渐变会以某种方式掉落,声音会突然中断。我可以从日志中看到它进入了衰落函数,但它并没有执行预定的增益曲线。
为了更清楚,这里是我的算法所做的步骤的一个例子:
结果是声音保持最大音量,直到调用停止功能。
这里是fadeOut()函数:
StreamSound.prototype.fadeOut = function (fadeTime) {
const self = this;
if (self.isPlaying()) {
if (!fadeTime) {
console.warn(`Missing argument fadeTime. Set to 1 second`);
fadeTime = 1;
}
var currGain = self.masterGain.gain.value;
var curTime = self.context.currentTime;
self.masterGain.gain.cancelScheduledValues(curTime);
self.masterGain.gain.setValueAtTime(currGain, curTime);
self.masterGain.gain.linearRampToValueAtTime(0.0001, curTime + fadeTime);
self.fading = true;
setTimeout(function () {
// If has not secondary streams
if (self.secondaryStream === undefined) {
console.log(`No secondary streams -> stop`);
self.pause();
} else if (!self.secondaryStream.isPlaying()) {
console.log(`Not playing secondary streams -> stop`);
self.pause();
} else {
self.playing = false;
}
self.fading = false;
console.log(`Fade out stream finished [ ID: ${self.index} ]`);
}, fadeTime * 1000 + 25);
console.log(`Fading out stream [ ID: ${self.index} ]`);
} else {
console.warn(`Cannot fade out. Sound not playing [ ID: ${self.index} ]`);
}
};
我想这可能是因为调度问题,或者它是否与JS线程管理相关?
我知道用这些信息帮助我并不容易,但也许有人有类似的问题。
非常感谢, 弗朗西斯
编辑:我打开了另一篇文章,其中包含更一般的说明以及源代码和在线测试版的链接 - > WebAudioAPI musical application: clicks and crackles and abrupt stops