GainNode中跨浏览器的HowlerJS和Web Audio失真? AudioBufferSourceNode?

时间:2019-03-23 01:09:49

标签: javascript html5 audio web-audio howler.js

我正在尝试了解Web音频GainNodeAudioBufferSourceNode可能会导致持续的音频失真,就像音频文件或加载的数据缓冲区损坏一样

仅使用PIXI和咆哮来开发HTML5游戏,并且在Safari和Microsoft Edge中遇到了音频失真。

今天和昨天:阅读HowlerJS code,阅读W3 spec for Web Audio API,并运行许多受控测试。

游戏具有BGM循环,并且在游戏事件中播放许多半秒至几秒的声音效果,有时效果非常快。另外,无关紧要的是,BGM会定期暂停和恢复。

当前统计数据:

  1. 自然运行游戏。在数十种测试中,音频在Safari中大约在7分钟左右开始出现失真,正负1分钟开始出现失真。在许多测试中,以前在Edge中进行3分钟正负30秒,但在进行更多测试和(显然与音频无关)优化之后,Edge中的测试现在也要在失真发生前约7分钟运行。
  2. 测试源数据损坏:
    • 当当前的BGM通过失真的GainNode播放时,.play()使用相同的cache [key]数据源在Howl对象上创建一个新的GainNode,同时以失真的声音播放。
    • 稍后,使用ID暂停/恢复每个声音,从相同源数据中新建的GainNode可以完美播放。这个问题也可能在AudioBufferSourceNode中,但我无法确定。
  3. 名为Howler.masterGain的GainNode保持不变。
  4. 所有音频文件均为44100,正在台式机上进行测试。
  5. 在Safari中,如果我将另一个窗口拖到Safari窗口上方50-90%的位置,循环失真的音频将变得清晰,这使我离开了一段时间。
  6. 该问题会定期在Safari和Edge中触发,但从未在Chrome中看到过。

所以我想知道是否有一个内部缓冲区,缓冲区数据被复制到该缓冲区,并且该缓冲区已损坏,甚至是碎片化,但是我已经没有足够的想法了。

这是处理Web Audio的已知问题,是否可以解决?

0 个答案:

没有答案