Javascript 线性斜坡不与增益节点线性作用
编辑:找到修复程序。我缺少Javascript 线性斜坡不与增益节点线性作用,javascript,web-audio-api,sound-synthesis,Javascript,Web Audio Api,Sound Synthesis,编辑:找到修复程序。我缺少g.gain.setValueAtTime(0,现在)行前 在下面设置攻击斜坡。g.gain.value=0在添加后也是多余的 所以我有一个奇怪的问题。让我给出一些背景信息:我正在实现一个合成音合成器,在这个合成器中,音符是以一种一次性的方式创建和播放的——每次触发一个键时都会创建一个新的振荡器 我首先在全球范围内实施了音量封套,但当触发新的音符时,这会影响到过去音符的衰减/释放,但单声道上,攻击、衰减和释放封套都按预期工作 因此,我的解决方案是在触发关键点时动态创建振
g.gain.setValueAtTime(0,现在)代码>行前
在下面设置攻击斜坡。g.gain.value=0代码>在添加后也是多余的
所以我有一个奇怪的问题。让我给出一些背景信息:我正在实现一个合成音合成器,在这个合成器中,音符是以一种一次性的方式创建和播放的——每次触发一个键时都会创建一个新的振荡器
我首先在全球范围内实施了音量封套,但当触发新的音符时,这会影响到过去音符的衰减/释放,但单声道上,攻击、衰减和释放封套都按预期工作
因此,我的解决方案是在触发关键点时动态创建振荡器和封套。这很好地解决了一点奇怪的问题:衰变和释放都像以前一样工作,具有独特的注释卷包络的优点,但攻击包络不是线性渐变的。相反,它会延迟指定的任何攻击时间,并一次触发所有攻击
有人能理解为什么攻击包线会延迟并立即行动,而不是像它应该做的那样线性地修改增益吗
以下是相关功能:
synth.prototype.playNote = function(i, freq) {
// create oscillator
var o = this.context.createOscillator();
o.frequency.value = freq * Math.pow( 2, this.osc[i].oct-4 );
o.type = this.osc[i].type; o.start( 0 );
// create envelope node and connect
var g = this.context.createGainNode(); g.gain.value = 0;
o.connect( g ); g.connect( this.master_gain );
// enveloping
now = this.context.currentTime;
// the line below delays for the attack time at 0 gain and
// shoots to volume 1 after (now + this.amp_env.attack) rather than curving linearly
g.gain.linearRampToValueAtTime(1, now + this.amp_env.attack );
g.gain.linearRampToValueAtTime(this.amp_env.decay, now + this.amp_env.attack + this.amp_env.decay + this.amp_env.release );
g.gain.linearRampToValueAtTime(0, now + this.amp_env.attack + this.amp_env.decay + this.amp_env.release );
// kill note after envelopes are done;
o.stop( now + this.amp_env.attack + this.amp_env.release + this.amp_env.release );
}
不清楚你在问什么:标题应该是一个问题。对此很抱歉-修复。欢迎来到StackOverflow。你应该把你的修正作为一个答案贴在下面,这样周围有同样问题的人就可以很容易地找到它。