怎么做重启AudioBufferSourceNode?

时间:2014-07-23 14:33:00

标签: javascript html5 html5-audio web-audio

我无法在WebAudio API(http://webaudio.github.io/web-audio-api/)中找到重启AudioBufferSourceNode的方法。 “循环”模式不合适,因为我需要在结束之前重新启动节点。

我试图通过以下方式实现它:

  1. 停止
  2. 从缓冲区重新创建节点
  3. 启动
  4. 然而,有一小部分时间没有声音使转换不顺利。

    重新启动AudioBufferSourceNode的最佳方式是什么?

2 个答案:

答案 0 :(得分:3)

1)您无法重新启动buffersourcenode。他们是一次性的交易 - 一旦他们停止,你需要扔掉他们并创建一个新的(指向相同的AudioBuffer)。

2)您需要提前计划,以便在您停止播放的同时重新开始播放。 Javascript不是实时语言,因此播放发生在不同的线程上。

3)如果你只是想靠近但仍然重叠,你可能想把信封放在结尾处并开始平滑过渡 - 例如使用setTargetAtTime来增加(在开始时)和向下(在停止时间)增益值。

答案 1 :(得分:0)

  

“循环”模式不合适,因为我需要在结束之前重新启动节点

AudioBufferSourceNode实际上有loopEndloopStart属性,因此可以在节点结束前重启节点。

// say you want to restart node every time it reaches 2.3 seconds
var node = audioCtx.createBufferSource();
node.buffer = getSomeAudioBuffer('someSound.mp3');
node.connect(audioCtx.destination);
node.loopEnd = 2.3;
node.loop = true;
node.start();

JSFiddle