Web音频API: outputChannelCount不工作时,我从AudioWorkletProcessor继承.&



我有下面的例子。我尝试通过调用super(...)来传递options参数。当我这样做时,我没有得到我指定的2个输出通道,而是只得到1个输出通道。

class Processor extends AudioWorkletProcessor {
constructor() {
super({outputChannelCount: [2]});
}
process(inputs, outputs, parameters) {
console.log("output channels: ", outputs[0].length);
return true;
}
}
registerProcessor('processor', Processor);

当我尝试同样的传递optionsAudioWorkletNode时,就像下面的例子一样,它像预期的那样工作。

let audioContext = new AudioContext();
(async () => {
await audioContext.audioWorklet.addModule('processor.js');
audioWorkletNode = new AudioWorkletNode(audioContext, 'processor', {outputChannelCount: [2]});
audioWorkletNode.connect(audioContext.destination);
})();

这在我尝试的任何浏览器中都无法工作。

我做错了什么吗?这是臭虫吗?是否有一些在Web音频API规范,我在这里失踪?

我认为你所描述的是意料之中的。AudioWorkletProcessor的构造函数不接受IDL定义中定义的任何参数:

https://webaudio.github.io/web-audio-api/AudioWorkletProcessor

在主线程上传递给AudioWorkletNode构造函数的选项被存储为pending processor construction data。它们是自动应用的,无法从处理器内部更改它们。

我想这是为了确保AudioWorkletNode及其相应的AudioWorkletProcessor始终具有相同的配置。如果您可以更改处理器内的配置,则AudioWorkletNode将不同步,直到信息再次传输回来。

相关内容

最新更新