【发布时间】: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 对应于信号的反转。因此,当增益通过零时,信号应该只是短暂的静默。
-
嗯。只是仔细检查了规格,你是绝对正确的。我没有意识到你可以消极和反转相位。我很抱歉。