使用网络音频API

时间:2015-08-07 13:13:28

标签: javascript web-audio

使用AudioBufferSourceNode开始播放AudioBuffer的音频后,如何在毫秒的预定时间后停止播放音频?我的设置很简单:

// create audio source
var source = audioCtx.createBufferSource();

// play audio from source
source.start();

使用AudioBufferSourceNode.stop()我只能以秒为单位指定此持续时间,但由于某种原因,提供任何非整数将被评估为零,并使音频停止立即

source.stop(0.25); // should be 250 milliseconds, but audio stops immediately

setTimeout不够精确,偶尔出现抖动/漂移,特别是如果UI工作很多,或者其他计算正在其他地方执行。

setTimeout(function () {
    source.stop(); // very inaccurate
}, 250);

是否有一个简单的解决方案可以在一定量的毫秒之后停止播放音频,而不会在工作线程中等待忙碌等待的黑客攻击,或类似的?

1 个答案:

答案 0 :(得分:6)

我认为你误解了stop()的第一个论点是什么。

它表示相对于音频上下文时间的时间量,这意味着在调用stop()时,您需要将该时间添加到它:

source.stop(context.currentTime + 0.25);

由于函数接受double,因此不应将其四舍五入到最接近的秒。根据{{​​3}}:

  

when参数描述声音应停止播放的时间(以秒为单位)。它与AudioContext的currentTime属性在同一时间坐标系。如果为此值传入0或者该值小于currentTime,则声音将立即停止播放。