javascript - 网络音频 API 延迟后停止

标签 javascript html web-audio-api

我有这个片段来播放音调。我将 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/

相关文章:

javascript - 如何重新聚焦创建 HTML5 通知的窗口?

web-audio-api - 使用 Web Audio Api 连续播放小声音缓冲区序列

JavaScript debounce 函数,为什么只有两个参数?

javascript - 使用 JS 更改 g 组中 SVG 元素的样式

javascript - 使用纯 Javascript 将文本节点附加到 <li>

javascript - 如何在单元格5之后动态添加行vue.js

javascript - 为什么此声音会在webaudio api中不断重新触发?

ios - iOS 内存崩溃上的 Web Audio API

javascript - 在不丢失光标位置的情况下更新输入的值

javascript - ReactJS 不使用 && 显示数据