请参阅下面的代码。我如何理解事物:
beat
是在 -1 和 1 之间振荡的方波。将
beat
连接到multiplier.gain
将beat
的方波添加到默认增益 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/