我正在尝试用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);
关于javascript - 为什么js振荡器在使用后停止播放声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63420148/