如何重新启动AudioBufferSourceNode

how to do restart a AudioBufferSourceNode?

本文关键字:AudioBufferSourceNode 重新启动      更新时间:2023-09-26

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

我试着这样做来实现它:

  1. 从缓冲区重新创建节点

但随后有一小段时间没有声音,使得过渡不顺利。

重启AudioBufferSourceNode的最佳方法是什么?

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

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

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

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

AudioBufferSourceNode中实际上有loopEnd和loopStart属性,所以可以在结束之前重新启动节点。

// 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

相关文章:
  • 没有找到相关文章