当前位置: 首页 > 知识库问答 >
问题:

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

郭和硕
2023-03-14

在下面的代码中,我希望在每次按下按钮元素时创建一个分配给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);

共有1个答案

柯建修
2023-03-14

正如您提到的,start()stop()方法的第一个参数是一个基于时钟维护的AudioContext.CurrentTime的时间戳。

如果时间戳小于当前时间,则立即执行start/stop方法。否则,当时钟与时间戳同时时,将执行这些方法(分别启动或停止振荡器)。

when参数描述声音应该在什么时间(以秒为单位)开始播放。它与AudioContext的currentTime属性处于同一时间坐标系中。如果为该值传入0或该值小于currentTime,则声音将立即开始播放。start只能调用一次,并且必须在STOP之前调用....

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

 类似资料:
  • 我正在尝试添加AnalyserNode并将输出声音可视化到我制作的web音频示例中,但我不知道如何实现。我想我没有将正确的源传递给分析器(?) 完整代码如下:https://jsfidle.net/kepin95043/1ub0sjo3/ 谁能帮我找出我做错了什么?提前感谢! PS:用火狐打开吧。对我来说在基于Chromium的浏览器上不起作用。 下面是一个工作示例:https://codepen

  • 在执行此代码时,我会得到这样的错误:“Uncattle TypeError:Failed to execute'linear ramptoValueAtTime'on'AudioParam':The provided double value is non-finite”。 &如果替换ac.endTime只是endTime-“endTime未定义”,则发生错误。也许有人能解释为什么会这样?谢谢

  • 仅仅是我,还是振荡器即使在0.5增益下也听起来疯狂的响亮?我不能增加我的电脑的体积超过5%。 现在,当我将增益设置为0.001时,音量似乎“归一化”了,但这不对?我希望能有一些关于控制振荡器音量的见解。

  • 本节,我们将探讨第三大类型的运动——振荡运动。弹簧上悬挂的重物,振荡的气泡,来回摆动的摆钟,都是振荡运动的例子。 图5-4 创建振荡运动 操作步骤 按照以下步骤,让盒子来回摆动: 1. 链接到Animation类: <head> <script src="animation.js"> </script> 2. 实例化一个Animation对象,并获取画布上下文对象: <script> wind

  • 当使用web audio API制作振荡器时,我总是听到当停止它时的咔嗒声。我四处寻找,但没有一个解决办法对我有效。我尝试了所有的实现从我如何避免这种‘咔哒’声音时,我停止播放一个声音?和更多 我读到一个解决方案是等待下一个零振幅值,然后立即停止播放。有没有一种方法可以使用web audio API做到这一点? 我正在考虑为我的项目切换到Tone.js,因为声音不需要点击就可以播放。他们是如何解决

  • 这一节,让我们试着制造一些声音,我们将需要完成以下任务: 创建Web Audio API context 在context中创振荡器节点 选择波形类型 设定频率 把振荡器连接到目标上 启动振荡器 让我们把这些步骤写成代码 var context = new (window.AudioContext || window.webkitAudioContext)(); var oscillator