【问题标题】:Using the WebAudio API, how to modulate a signal?使用 WebAudio API,如何调制信号?
【发布时间】:2014-03-13 01:21:01
【问题描述】:

使用 Web Audio API,我想使用一个信号来调制另一个信号。我发现调制的行为不像预期的那样。下面的示例代码创建了两个振荡器,一个在 440Hz,一个在 1Hz,并使用 1Hz 的振荡器通过增益节点的增益 AudioParam 调制 440Hz 的增益。

预期行为:振荡器输出值从 -1 到 +1。因此,增益应该在 -1 和 +1 之间振荡,每秒一次,即增益应该每秒两次为零(无声音)。

实际行为:相反,它每秒只静默一次。似乎增益值正在重新映射,因此范围 (-1, +1) 映射到 (0, +1)。

问题:为什么会发生这种重新映射?如果我将增益设置为单个浮点值,则不会发生这种情况——+1 表示 +1,0 表示 0。我可以关闭此重新映射,以便调制信号中的零导致零振幅声音?

编辑:澄清一下,我的目标是使用任意包络 E(其值在 0 和 1 之间变化)来调制载波 C 的幅度,以便输出为 C*E,使得 C* E=0时E的幅值=0,E=1时C*E的幅值=1。

window.AudioContext = ( window.AudioContext || window.webkitAudioContext );
var context = new AudioContext();

var gain = context.createGain();
gain.connect(context.destination);

var osc = context.createOscillator();
osc.connect(gain);
osc.start(0);

var mod = context.createOscillator();
mod.frequency.value = 1;
mod.connect(gain.gain);
mod.start(0);

【问题讨论】:

  • "振荡器输出值从 -1 到 +1。因此,增益应该在 -1 和 +1 之间振荡,每秒一次,即增益应该每秒两次为零(无声音) 。” ...尝试想象如果增益设置为 -1 和 0 之间的值的一半时间会发生什么。您最终只会听到一半的沉默。
  • Kevin:增益是一个乘数,因此增益 = -1 对应于信号的反转。因此,当增益通过零时,信号应该只是短暂的静默。
  • 嗯。只是仔细检查了规格,你是绝对正确的。我没有意识到你可以消极和反转相位。我很抱歉。

标签: javascript web-audio-api


【解决方案1】:

这根本不是重新映射。发生的事情是 gain.value 默认为 1,并且连接到增益的音频速率信号正在与该默认值相加 - 所以信号在 (1 - 1) 和 (1 + 1) 之间振荡:是,介于 0 和 2 之间。

只需设置 gain.gain.value=0;在您上面的示例中,它应该可以按您的预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-15
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2014-05-21
    • 1970-01-01
    相关资源
    最近更新 更多