You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将录音场景下的ScriptProcessor逻辑转换为AudioWorklet实现

ScriptProcessor 转 AudioWorklet 实现方案

以下实现完全对齐原有逻辑:单输入单输出1通道,采集麦克风输入的第一通道数据发送给Worker,支持音频直通到输出设备。

步骤1:创建独立的AudioWorklet处理器文件

新建mic-processor.js文件,内容如下:

class MicProcessor extends AudioWorkletProcessor {
  process(inputs, outputs) {
    // 提取第一输入的第一通道音频数据,与原有逻辑一致
    const input = inputs[0];
    if (input.length > 0) {
      const channelData = input[0];
      // 发送音频数据到主线程
      this.port.postMessage(channelData);
    }

    // 音频直通逻辑:如果不需要输出到扬声器可删除以下这段
    const output = outputs[0];
    for (let channel = 0; channel < output.length; channel++) {
      input[channel] && output[channel].set(input[channel]);
    }

    // 返回true表示处理器持续运行
    return true;
  }
}

// 注册处理器
registerProcessor('mic-processor', MicProcessor);

步骤2:替换主线程原有逻辑

将原有ScriptProcessor相关代码替换为以下内容:

const context = new AudioContext();
const microphone = context.createMediaStreamSource(stream);

// 加载AudioWorklet模块后初始化节点
context.audioWorklet.addModule('mic-processor.js')
  .then(() => {
    // 初始化Worklet节点,参数对齐原createScriptProcessor配置
    const processorNode = new AudioWorkletNode(context, 'mic-processor', {
      numberOfInputs: 1,
      numberOfOutputs: 1,
      channelCount: 1
    });

    // 监听Worklet返回的音频数据,转发到你的业务Worker
    processorNode.port.onmessage = (e) => {
      const array = e.data;
      realTimeWorker.postMessage({cmd: 'encode', buf: array});
      // 可选优化:开启零拷贝传输,减少内存占用
      // realTimeWorker.postMessage({cmd: 'encode', buf: array}, [array.buffer]);
    };

    // 节点连接逻辑与原有逻辑完全一致
    microphone.connect(processorNode);
    processorNode.connect(context.destination);
  });

注意事项

  • 若不需要将麦克风音频输出到扬声器,可删除processorNode.connect(context.destination)这行代码
  • AudioWorklet文件需要通过HTTP/HTTPS协议访问,本地file协议无法正常加载
  • 所有AudioContext相关初始化逻辑必须放在用户交互事件(如按钮点击)的回调中执行,符合浏览器自动播放限制要求

内容的提问来源于stack exchange,提问作者Sound in Worship

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 14:54:05