为何AudioWorkletProcessor的process()方法输出参数为空数组?
为什么AudioWorkletProcessor的outputs参数是空数组?
可能的原因及解决办法
输出通道配置不匹配
创建AudioWorkletNode时,如果没有明确指定outputChannelCount,或者该配置与下游节点的输入通道数不兼容,浏览器会关闭输出通道,导致outputs[0]为空。解决时要明确设置输出通道数,同时确保和下游节点兼容:const myProcessorNode = new AudioWorkletNode(audioContext, 'custom-processor', { outputChannelCount: [1] // 按需设置单声道/立体声等 });音频图未正确激活或连接
首先确认AudioContext已经通过用户交互(比如点击事件)调用过resume(),未激活的上下文不会分配实际的输出缓冲区。其次要确保你的AudioWorkletNode最终连接到了audioContext.destination,如果只是连接到中间节点但该节点没有后续输出,浏览器会优化掉输出通道。process方法返回值异常
如果_process方法返回了false,会告诉浏览器该节点无需继续处理,后续调用process时会停止分配输出通道。要确保_process在节点需要运行时始终返回true。节点连接被意外断开
检查代码中是否有调用disconnect()的逻辑,或者其他修改节点连接状态的操作,导致输出通道被关闭。
临时容错处理
为避免报错,可以在访问outputs前增加安全校验:
process(inputs, outputs, parameters) { this.inputs = inputs; this.parameters = parameters; // 先校验输出通道是否有效 if (!outputs[0] || outputs[0].length === 0) { return true; // 返回true维持节点活跃状态 } this.bufferLength = outputs[0][0].length; this.checkTimer(); return this._process(outputs); }
内容的提问来源于stack exchange,提问作者Mauro Braunstein
相关产品推荐
相关产品推荐

