我正在尝试用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。如何在不停止已经播放声音的情况下进行修复?
答案 0 :(得分:1)
不要为每个笔记创建新的AudioContext
;创建一个并将其用于所有这些对象。这样不仅可以节省资源;如果您决定要在正确的时间播放多个音符,这也将有所帮助。
您还正在累积仍然非常安静的振荡器。您需要有时停止它们。好消息是,Web Audio API设计为make it easy to do this:
// stop after 5 seconds from now
o.stop(context.currentTime + 5);