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

停止web音频振荡器而不单击

郭凡
2023-03-14

执行此代码时,我会得到这样的错误:“Uncattle TypeError:Failed to execute'linear ramptoValueAtTime'on'AudioParam':The provided double value is non-finite”。

var ac = new window.AudioContext() || new window.webkit.AudioContext();
var osc;
var gain = ac.createGain();

function playosc() {
    osc = ac.createOscillator();
    osc.frequency.value = 440;
    osc.connect(gain);
    gain.connect(ac.destination);
    gain.gain.setValueAtTime(0, ac.currentTime);
    gain.gain.linearRampToValueAtTime(0.3, ac.currentTime + 0.01);
    osc.start();
}

function stoposc() {
    gain.gain.linearRampToValueAtTime(0, ac.endTime - 0.01);
    osc.stop(ac.endTime);
}

&如果替换ac.endTime只是endTime-“endTime未定义”,则发生错误。也许有人能解释为什么会这样?谢谢

共有1个答案

艾敏学
2023-03-14

没有AudioContextEndTime属性。执行audiocontext.endtime返回未定义,因此您有undefined-.01返回的nan不是有限的。您将希望像创建振荡器时那样使用currenttime

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

  • 在下面的代码中,我希望在每次按下按钮元素时创建一个分配给o的新振荡器节点,允许多次按下,从而在440处产生多个1秒音调。然而,我发现这个按钮只能按一次以产生一个音调,之后它就会消失,就好像我没有创建新的振荡器节点一样。我正在学习JavaScript,我怀疑它一定是一些微不足道的东西。有人有主意吗? 编辑: 刚找到这个问题解决了这个问题。解决方案是将audio_context.currentTime

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

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

  • 这里有一个超级简单的例子,我正在尝试在Chrome的iphone上运行。其他的web音频API示例,比如这个http://alxgbsn.co.uk/wavepad/work,但不包括我的:( 知道怎么了吗? 编辑 总结一下答案: 启动音频以响应用户交互 检查静音开关是否关闭

  • 在使用Opera44.0时,我正在摆弄音频API,并尝试了一个简单的示例: 它按预期工作,声音播放2秒,然后停止。 然后我试着往上走一点,当一个按钮被点击时播放一个声音: 不管用.单击按钮时调用函数(我在函数中使用进行了检查),但不播放任何声音。我尝试刷新页面,重新启动浏览器..什么都没有。 经过一些研究,我发现当调用时,振荡器会被丢弃,因此每次都必须创建一个新的振荡器。我发现的几乎所有示例都围绕