【问题标题】:stopping web audio oscillator without clicks无需点击即可停止网络音频振荡器
【发布时间】:2016-06-08 21:43:33
【问题描述】:

执行此代码时,我收到此错误:“未捕获的 TypeError:无法在 'AudioParam' 上执行 'linearRampToValueAtTime':提供的双精度值是非有限的。”

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”错误。也许有人可以解释为什么会这样?谢谢

【问题讨论】:

    标签: javascript web-audio-api


    【解决方案1】:

    没有AudioContext endTime 属性。执行AudioContext.endTime 返回未定义,因此您有undefined-.01 返回NaN,它不是有限的。你会想要像创建振荡器时那样使用currentTime

    function stoposc() {
        gain.gain.linearRampToValueAtTime(0, ac.currentTime + .01);
        osc.stop(ac.currentTime + .02);
    }
    

    【讨论】:

    • 感谢您的回答,但这样点击然后停止。还有其他建议吗?
    猜你喜欢
    • 2020-07-12
    • 2013-09-11
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    相关资源
    最近更新 更多