我有一个交互式音乐排序应用程序,使用以下设置:
在WebWorker中使用计时器比只使用setInterval更可靠,但是在主线程处理消息之前仍然会有延迟,从而导致音频故障。
似乎理想的解决方案是在WebWorker中执行第3步,但在工人不支持AudioContext中执行。因此,这使得AudioWorklet成为唯一的低延迟网络音频API。但是它是图中的一个节点,而我正在寻找一种管理整个事情的方法。除了重写整个系统以在AudioWorkletProcessor中运行(大量的工作)之外,是否有一种方法可以使用处理器进行精确的调度,但保留现有的图形结构?
发布于 2020-06-22 03:34:43
AudioContext有自己的时钟,使用它。
AudioBufferSourceNode.start(delay)方法的第一个参数:node1.start( ctx.currentTime + 1 ); // in one second
node2.start( ctx.currentTime + 2 ); // in two seconds
node3.start( ctx.currentTime + 3 ); // in three secondsonended事件侦听器:node.onended = (evt) => startANewNode();const duration = 1000;
let expected = ctx.currentTime + duration;
function loop() {
const drift = expected - ctx.currentTime;
startANewNode();
setTimeout( loop, duration - drift );
}
setTimeout( loop, duration );当然,你甚至可以结合所有这些点,一起创建你自己的计时器,完全基于AudioContext的时钟。
https://stackoverflow.com/questions/62505257
复制相似问题