如何在网络音频上下文中更改源

How do you change source in a web audio context

我正在制作一款游戏,它会根据正在播放的音乐改变某些对象。每首歌曲结束后,我希望我的音频上下文加载到一个新的源中并对其进行分析。但是,每当我尝试这样做时,我都会收到无法调用两次音频对象或缓冲区的错误。

经过一些研究,我了解到 ctx.createMediaElementSource(MyHTML5AudioEl) 允许您创建一个从 HTML5 对象获取源的 sourceNode。这样我就可以循环播放不同的歌曲了。

但是对于我的游戏,我需要 play/analyze 30 秒 "remote url" 来自 Spotify API。我可能是错的,但 ctx.createMediaElementSource(MyHTML5AudioEl) 不允许您分析远程站点上的源。

此外,该游戏需要在手机 Chrome 上运行,createMediaElementSource(MyHTML5AudioEl) 似乎无法运行。

我可能走错了路,但我的主要问题是: 如何在网络音频中切换远程歌曲 URL api。它与手机兼容 chrome.

谢谢!

首先,正如您所发现的,您无法为 AudioBufferSource 再次设置缓冲区。解决方案是创建一个新的。 AudioBufferSource 旨在成为您可以轻松创建和使用的 light-weight objects。

其次,在 Chrome 42 及更高版本中,createMediaElementSource 需要适当的 CORS 访问权限,因此您必须确保远程 url 发送适当的 headers 并且您设置crossOrigin 属性适当。

最后,移动 Chrome 当前不通过 createMediaElementSource 传递来自音频元素的数据。