javascript - 如何通过方波与音调相乘来产生节拍?

标签 javascript audio web-audio-api synthesizer

请参阅下面的代码。我如何理解事物:

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

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

  • 由于 tone 连接到 multiplier,我希望听到 440Hz 的提示音两秒,然后暂停两秒,然后再次提示音等等。

但是,当我预计增益为 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();

我希望这会有所帮助。

关于javascript - 如何通过方波与音调相乘来产生节拍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56127982/

相关文章:

javascript - 如何更改谷歌地图上的标记位置?

javascript - Angular force 在 url 中出现不需要的感叹号

c# - C#在关闭表单之前播放声音

javascript - Node.js - 让 Node.js/Express 与 Web 音频 API 配合使用

javascript - 父指令中的angularjs函数没有从嵌入的html中调用

javascript - 如何为每个 jquery 同级创建添加/子值的单击事件

c - 适用于 Linux 的 Windows Beep()

actionscript-3 - 将帧同步到音频和 channel.position 精度

javascript - 网络音频 : total oscillator count and performance (Javascript)

javascript - 使用 getUserMedia() 同时从多个麦克风录制音频