使用WebAudio API,如何调制信号?

时间:2014-03-12 15:57:26

标签: javascript web-audio

使用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 个答案:

答案 0 :(得分:4)

这根本不是重新映射。发生的事情是gain.value默认为1,连接到增益的音频信号正在使用该默认值进行SUMMED - 因此信号在(1 - 1)和(1 + 1)之间振荡:是,介于0和2之间。

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