如何在javascript中从输入声音生成负音频波?

问题描述 投票:0回答:1

我发现一个 JavaScript 可以捕获当前的麦克风输入,然后再次将其发送出去。你可以在这里看到:

https://codepen.io/MyXoToD/pen/bdb1b834b15aaa4b4fcc8c7b50c23a6f?editors=1010(仅适用于https)。

我想知道如何生成捕获的声音的“负”波。就像“噪音消除”的作用一样。因此,脚本会检测我周围的当前噪音,每当有波上升时,我就想生成一个下降的波以相互抵消。有没有办法在 JavaScript 中做到这一点?

因此输出当前录制的声音:

var input = audio_context.createMediaStreamSource(stream);
volume = audio_context.createGain();
volume.gain.value = 0.8;
input.connect(volume);
volume.connect(audio_context.destination);

问题是如何产生该声音的负值并输出它。

javascript audio microphone getusermedia
1个回答
2
投票

您已经通过网络音频链传输信号。您需要做的是在输入和输出节点之间链接一个 AudioWorklet 节点(在增益节点之后或之前,并不重要)。该工作集的脚本将是一个非常简单的符号反转。

await audio_context.audioWorklet.addModule("negate.js")
const negateNode = new AudioWorkletNode(audio_context, "negate")
input.connect(negationNode)
negateNode.connect(volume)

工作集(“negate.js”):

class AudioNegator extends AudioWorkletProcessor {
  process([input], [output]) {
    for (let channel = 0; channel < input.length; channel++)
      for (let i = 0; i < 128; i++)
        output[channel][i] = -input[channel][i]
    return false
  }
}
registerProcessor("negate", AudioNegator)
© www.soinside.com 2019 - 2024. All rights reserved.