javascript - 为什么js振荡器在使用后停止播放声音?

标签 javascript google-chrome audio

我正在尝试用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/

相关文章:

javascript - 为什么更改 XMLHttpRequest 会破坏 FB?

google-chrome - 在 Chrome 上伪造 USB 设备

javascript - 获取 API 产生 "TypeError: failed to fetch"

android - 通过自己的IP通过RTP进行Android实时音频流传输

ios - 未知的音频驱动程序错误

javascript - HTML5检测进入全屏

javascript - mouseenter JavaScript 不工作

javascript 函数说未定义

angular - Chrome 不在 CrossSide 上发送原始标题

android - Android通知-setSound不起作用