【发布时间】:2014-06-21 19:01:58
【问题描述】:
在下面的代码中,我希望在每次按下按钮元素时创建一个分配给 o 的新振荡器节点,允许多次按下,从而在 440 处产生多个 1 秒的音调。但是我发现按钮只能按下一次以产生音调,之后它就死了,好像我没有创建新的振荡器节点一样。我正在引导使用 JavaScript,我怀疑它一定是微不足道的。有人有想法吗?
<html>
<body>
<button id='but' label='Button'/>
<script>
function secondContext(){
play([440],0,1);
}
function play(freqs, delay, duration) {
freqs.forEach(function(freq){
o = audio_context.createOscillator();
o.frequency.value = freq;
o.connect(audio_context.destination);
o.start(0);
o.stop(1);
});
}
var audio_context = new (AudioContext || webkitAudioContext);
button_ele = document.getElementById('but')
button_ele.addEventListener('click',function(){secondContext()});
</script>
</body>
</html>
编辑:
刚刚找到解决问题的this question。解决方案是将 audio_context.currentTime() 添加到偏移量,如下所示:
o.start(audio_context.currentTime + 0);
o.stop(audio_context.currentTime + 1);
【问题讨论】: