为了账号安全,请及时绑定邮箱和手机立即绑定

在 AudioWorkletProcessor 中设置输出通道数

在 AudioWorkletProcessor 中设置输出通道数

白板的微信 2022-12-02 16:31:15
如果我创建一个音频上下文,目标节点有 2 个通道(用于立体声输出)并且 AudioWorkletNode 似乎有 2 个通道:var audioContext = new AudioContext()console.log(audioContext.destination.channelCount); // 2 channelsaudioContext.audioWorklet.addModule('testworker.js').then(()=>{   var node = new AudioWorkletNode(audioContext, 'test');   console.log("channel count", node.channelCount); // also 2 channels?   node.connect(audioContext.destination);});但是,在过程函数中,输出只有 1:testworker.js:class Test extends AudioWorkletProcessor {   process(inputs, outputs, parameters) {      console.log("output channels: ", outputs[0]); // Array [ Float32Array(128) ] (1 channel)      return false;   }}registerProcessor("test", Test);有没有办法指定音频 worklet 处理器的输出通道数?使用现已弃用的脚本处理器系统,您可以在构造函数中指定输入/输出的数量:audioContext.createScriptProcessor(bufferSize, inputCount, outputCount) 但我不知道如何使用音频工作集来做到这一点
查看完整描述

3 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

由于您没有举例说明您要做什么,因此很难提供好的建议。但是您应该从查看AudioWorkletNodeOptions开始,关于配置通道的描述是一个很好的起点。



查看完整回答
反对 回复 2022-12-02
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

要获得立体声输出,我必须使用:


    workerNode = new AudioWorkletNode(ctx, "audio-proc", {

        numberOfOutputs : 2, 

        outputChannelCount : [2, 2]

    });


查看完整回答
反对 回复 2022-12-02
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

我已经做过类似的事情并且弄清楚了如何去做。


代码注释解释了您需要添加的内容。


该代码在 Atom 实时服务器上运行,因此在此处运行时可能无法正常工作,但它确实会使用 2 个声道产生立体声。


registerProcessor('noise-generator',class extends AudioWorkletProcessor {

  process(inputs, outputs) {

    for (let i=0;i<outputs[0][0].length;++i){

      outputs[0][0][i]=2*Math.random()-1  //ouputs sound to left side

      outputs[0][1][i]=2*Math.random()-1 //outputs sound to right side, added extra output and set 2nd channel to 1

  }

    return true

  }

})

<button onclick="context.resume()">Start</button>

<script>

  let context= new AudioContext()

  context.audioWorklet.addModule('basicnoise.js').then(() => {

    let myNoise = new AudioWorkletNode(context,'noise-generator', {outputChannelCount : [2]}) //added 2 output channels

    myNoise.connect(context.destination)

  })

  console.log(context.sampleRate); 

</script>


查看完整回答
反对 回复 2022-12-02
  • 3 回答
  • 0 关注
  • 426 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信