【发布时间】:2020-03-22 21:35:53
【问题描述】:
假设您使用 Web Audio API 播放纯音:
ctx = new AudioContext();
src = ctx.createOscillator();
src.frequency = 261.63; //Play middle C
src.connect(ctx.destination);
src.start();
但是,稍后您决定要停止声音:
src.stop();
从现在开始,src 完全没用了;如果你尝试重新启动它,你会得到:
src.start()
VM564:1 Uncaught DOMException: Failed to execute 'start' on 'AudioScheduledSourceNode': cannot call start more than once.
at <anonymous>:1:5
如果您正在制作一个小型在线键盘,那么您会不断地打开和关闭音符。从音频节点图中删除旧对象,创建一个全新的对象,然后connect() 将其放入图中,(然后稍后丢弃该对象)似乎真的很笨重,而只打开和关闭它会更简单需要时。
Web Audio API 做这样的事情有什么重要原因吗?或者有什么更简洁的方法可以重新启动音频源?
【问题讨论】:
-
为什么停止后无法重新启动是一个有趣的问题。但是,如果您正在制作键盘或乐器,我会考虑使用 developer.mozilla.org/en-US/docs/Web/API/AudioParam/…
标签: javascript web audio