如何通过将方波乘以音调来产生节拍?

时间:2019-05-14 10:11:00

标签: javascript audio web-audio synthesizer

请参见下面的代码。我如何理解事情:

  • beat是在-1和1之间振荡的方波。

  • beat连接到multiplier.gainbeat的方波添加到默认增益1。结果是增益在0到2之间振荡。

  • tone连接到multiplier时,我希望听到440Hz的声音持续2秒钟,然后停顿2秒钟,然后再听到声音,依此类推。 / p>

但是,在我希望增益为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>

1 个答案:

答案 0 :(得分:1)

问题在于,“正方形”类型实际上并未在-1和1之间振荡。范围从-0.848到0.848或多或少。将GainNode的增益AudioParam设置为此值应该可以。

npm link

要查看振荡器的实际输出,可以使用Canopy。它可以运行Web Audio代码,然后可视化结果。

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

multiplier.gain.value = 0.848;

我希望这会有所帮助。