为什么传递给 AudioWorkletProcessor 的 process() 方法的输出可能包含空数组?

问题描述 投票:0回答:1

背景:在 WebAudio API 中,

AudioWorkletProcessor
的实现必须提供由系统调用的
process(inputs, outputs, parameters)
方法,系统根据连接到处理器的
AudioWorkletNode
的内容构造传入的数组。该文档位于此处:https://developer.mozilla.org/en-US/docs/Web/API/AudioWorkletProcessor/process

问题:为什么

outputs
参数可能只包含一个空数组?在我的
process()
方法中,我的代码如下所示:

process(inputs, outputs, parameters) {
    this.inputs = inputs;
    this.parameters = parameters;
    this.bufferLength = outputs[0][0].length;
    this.checkTimer();
    return this._process(outputs);
}

我收到一个错误,浏览器无法读取

length
undefined
,仔细一看,这是因为
outputs[0]
是一个包含0个元素的数组,所以
outputs[0][0]
是未定义的。据我所知,音频节点is连接到目标节点,因此数据应该在这里流动。但如果我能更好地理解为什么
outputs[0]
是空的,我就能更好地找到问题的真正根源。

注意:我知道我实际上不需要在这里获取缓冲区长度,因为无论如何它总是 128,但

_process(outputs)
方法显然最终需要填充这个数组。

谢谢!

javascript web-audio-api audioworkletprocessor
1个回答
0
投票

我猜你遇到了这个最近出现在基于 Chromium 的浏览器中的 bug/fix 。还有相关的规格讨论

请注意,渲染量子将来可能会多于或少于 128 帧。

https://github.com/WebAudio/web-audio-api/issues/2450

© www.soinside.com 2019 - 2024. All rights reserved.