如何解决为什么js振荡器在使用后停止播放声音?
我正在尝试用js制作一架简单的钢琴,但是我不想使用音频样本,而是想以编程方式生成声音。要播放单一声音,我正在使用此博客https://marcgg.com/blog/2016/11/01/javascript-audio/
中的代码var context = new AudioContext()
var o = context.createOscillator()
var g = context.createGain()
o.connect(g)
g.connect(context.destination)
o.start(0)
g.gain.exponentialRampToValueAtTime(0.00001,context.currentTime + 5)
我发现,播放超过50次后,此方法停止工作。运行此代码时没有声音播放,context.currentTime
不变且保持为0。如何在不停止已经播放声音的情况下进行修复?
解决方法
不要为每个笔记创建新的AudioContext
;创建一个并将其用于所有这些对象。这样不仅可以节省资源;如果您决定要在正确的时间播放多个音符,这也将有所帮助。
您还正在累积仍然非常安静的振荡器。您需要有时停止它们。好消息是,Web Audio API设计为make it easy to do this:
// stop after 5 seconds from now
o.stop(context.currentTime + 5);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。