我有这个片段来播放音调。我将 stop()
函数中的延迟设置为 5 秒。它在第一次被调用时起作用。但任何后续调用的延迟都没有发生 - 它只是在 time1 到期后立即停止。
有什么建议吗?问题是什么?
function playSound() {
var mySource = myAudioContext.createOscillator();
var myGain = myAudioContext.createGainNode();
mySource.frequency.value = 261.625;
mySource.connect(myGain);
myGain.gain.value = 1.0;
myGain.connect(myAudioContext.destination);
mySource.start(0);
setTimeout(function(s) {
mySource.stop(5); //stop after 5 sec. only works for the first call
}, time1, mySource);
}
最佳答案
stop(n) 在“n 秒后”不会生效。这是一个绝对时间 - 时间从零开始,所以它第一次看起来有效[*]。
改用这个:
mySource.stop( 5 + myAudioContext.currentTime );
[*] 这实际上还依赖于 Webkit/Blink 中的一个错误,即在创建第一个节点之前我们不会开始运行时间;它应该在创建 AudioContext 时启动。
关于javascript - 网络音频 API 延迟后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23699704/