如何通过将方波与音调相乘来创建节拍?

How to create beat by multiplying square wave with tone?

查看下面的代码。我是如何理解的:

然而,在我预计增益为 0 的地方,我仍然听到了一个音调,只是静音了。 我做错了什么?

我在 Windows 10 上使用 Chrome 74 和 Firefox 66 进行了测试。

代码:

<!doctype html>
<meta charset=utf-8>
<script>
  var context = new window.AudioContext();
  var tone = context.createOscillator();

  var beat = context.createOscillator();
  beat.frequency.value = 0.25;
  beat.type = "square";

  var multiplier = context.createGain();
  tone.connect(multiplier);
  beat.connect(multiplier.gain);
  multiplier.connect(context.destination);

  tone.start();
  beat.start();
</script>
<button onclick="context.resume()">Play</button>

问题是 'square' 类型并没有真正在 -1 和 1 之间振荡。范围大约在 -0.848 到 0.848 之间。将 GainNode 的增益 AudioParam 设置为此值应该有效。

multiplier.gain.value = 0.848;

要查看振荡器的实际输出,例如可以使用 Canopy。它可以 运行 网络音频代码,然后可视化结果。

例如,如果您执行以下代码片段,它会显示相应的波形。

var osc = new OscillatorNode(context);

osc.type = "square";

osc.connect(context.destination);
osc.start();

希望对您有所帮助。