繁体   English   中英

Web音频振荡器无法创建新的振荡器

[英]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,则声音将立即开始播放。 开始只能调用一次,并且必须在停止之前调用。

http://webaudio.github.io/web-audio-api/#widl-AudioBufferSourceNode-start-void-double-when-double-offset-double-duration

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM