我有下面的例子。我尝试通过调用options传递super(...)参数。当我这样做时,我不会得到我指定的2个输出通道,而是只得到一个输出通道。
class Processor extends AudioWorkletProcessor {
constructor() {
super({outputChannelCount: [2]});
}
process(inputs, outputs, parameters) {
console.log("output channels: ", outputs[0].length);
return true;
}
}
registerProcessor('processor', Processor);当我尝试将options传递给AudioWorkletNode时(如下面的示例所示),它会像预期的那样工作。
let audioContext = new AudioContext();
(async () => {
await audioContext.audioWorklet.addModule('processor.js');
audioWorkletNode = new AudioWorkletNode(audioContext, 'processor', {outputChannelCount: [2]});
audioWorkletNode.connect(audioContext.destination);
})();这在我尝试过的任何浏览器中都不起作用。
我做错了什么吗?这是个虫子吗?在Web规范中是否有我在这里遗漏的东西?
发布于 2022-05-23 19:16:50
我想你所描述的一切都是意料之中的。AudioWorkletProcessor的构造函数在这里不接受IDL定义定义的任何参数:
https://webaudio.github.io/web-audio-api/#AudioWorkletProcessor
在主线程上传递给AudioWorkletNode构造函数的选项被存储为称为pending processor construction data的东西。它们被自动应用,无法从处理器内部更改它们。
我想这是为了确保AudioWorkletNode及其相应的AudioWorkletProcessor始终具有相同的配置。如果您可以更改处理器内部的配置,AudioWorkletNode将失去同步,直到信息再次返回。
https://stackoverflow.com/questions/72346766
复制相似问题