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

如何在AudioWorkletProcessor内部访问AudioContext?

解决AudioWorkletProcessor中获取createBuffer的问题

核心思路

AudioWorklet内部无法直接访问主上下文的createBuffer,但可以通过传递采样率+使用OfflineAudioContext来实现需求,避免Float32Array缺少采样率导致的音高错误。

具体步骤

  1. 将主上下文的采样率传入Worklet
    在实例化AudioWorklet时,通过processorOptions把主AudioContext的采样率传递进去:

    new AudioWorklet(audioContext, 'worklet-name', {
      processorOptions: { sampleRate: audioContext.sampleRate }
    });
    

    在AudioWorkletProcessor的构造函数中读取该采样率:

    class MyWorkletProcessor extends AudioWorkletProcessor {
      constructor(options) {
        super(options);
        // 保存采样率供后续使用
        this.sampleRate = options.processorOptions.sampleRate;
      }
    
      // ... 其他逻辑
    }
    
  2. 在Worklet内部用OfflineAudioContext创建AudioBuffer
    AudioWorkletGlobalScope允许使用OfflineAudioContext,它提供了createBuffer方法,用传入的采样率初始化即可:

    // 在Worklet内部的处理逻辑中
    const offlineCtx = new OfflineAudioContext(1, 1, this.sampleRate);
    // 创建指定通道数、帧数、采样率的AudioBuffer
    const audioBuffer = offlineCtx.createBuffer(2, 44100, this.sampleRate);
    

    这样创建的AudioBuffer采样率和主上下文一致,不会出现音高偏差。

关键说明

  • 无需传递整个AudioContext,仅传递采样率即可,减少数据开销
  • OfflineAudioContext是Worklet环境中合法可用的API,专门用于离线音频处理操作

内容的提问来源于stack exchange,提问作者kr094

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:10:28