我有这个片段来播放声音。我将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时开始。

10-07 14:40