[英]Web Audio Oscillator unable to create new oscillator
在下面的代码中,我希望在每次按下按钮元素时创建一个分配给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>
编辑:
刚刚发现了这个问题 ,其解决了上述问题。 解决方案是将audio_context.currentTime()添加到偏移量,如下所示:
o.start(audio_context.currentTime + 0);
o.stop(audio_context.currentTime + 1);
如您所提到的, start()
和stop()
方法的第一个参数是基于时钟的时间戳,该时钟由audioContext.currentTime
维护。
如果时间戳小于当前时间,则立即执行start / stop方法。 否则,当时钟与时间戳同时时,将执行这些方法(分别启动或停止振荡器)。
when参数描述声音应在何时开始播放(以秒为单位)。 它与AudioContext的currentTime属性位于同一时间坐标系中。 如果为此值传入0或该值小于currentTime,则声音将立即开始播放。 开始只能调用一次,并且必须在停止之前调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.