我似乎无法创建两个具有独立增益包络的振荡器。
下面的代码创建了两个按钮,每个按钮都以不同的音高播放正弦音。当我单击第一个按钮时,我听到音量按应有的增长。但是,当我单击第二个按钮时,音调的反应就好像它连接到第一个音调的增益一样。例如,如果我在第一个音调的音量为 1 时单击第二个按钮(打开第二个音调),则第二个音调将以音量 1 进入,即使它应该在整个过程中从 0 到 1 到 0 包络10 秒。
每个音频上下文只能有一个增益节点吗?或者是否有其他原因可以连接这些振荡器的增益?另外,我弹了一次之后,就不能再弹了,这让我特别觉得自己做错了什么。:)
谢谢。链接在下面,代码在下面。这是我在这里的第一篇文章,所以如果您需要其他任何内容,请告诉我。此代码必须在支持网络音频 api 的 Chrome 或 Safari 版本中运行。
http://whitechord.org/just_mod/poly_test.html
WAAPI 测试
<button onclick="play()">play one</button>
<button onclick="play2()">play two</button>
<script>
var context;
window.addEventListener('load', initAudio, false);
function initAudio() {
try {
context = new webkitAudioContext();
} catch(e) {
onError(e);
}
}
function play() {
var oscillator = context.createOscillator();
var gainNode = context.createGainNode();
gainNode.gain.value = 0.0;
oscillator.connect(gainNode);
gainNode.connect(context.destination);
oscillator.frequency.value = 700;
gainNode.gain.linearRampToValueAtTime(0.0, 0); // envelope
gainNode.gain.linearRampToValueAtTime(0.1, 5); // envelope
gainNode.gain.linearRampToValueAtTime(0.0, 10); // envelope
oscillator.noteOn(0);
}
function play2() {
var oscillator2 = context.createOscillator();
var gainNode2 = context.createGainNode();
gainNode2.gain.value = 0.0;
oscillator2.connect(gainNode2);
gainNode2.connect(context.destination);
oscillator2.frequency.value = 400;
gainNode2.gain.linearRampToValueAtTime(0.0, 0); // envelope
gainNode2.gain.linearRampToValueAtTime(0.1, 5); // envelope
gainNode2.gain.linearRampToValueAtTime(0.0, 10); // envelope
oscillator2.noteOn(0);
}
/* error */
function onError(e) {
alert(e);
}
</script>
</body>
</html>