【问题标题】:Safari slow performance when playing audio over itself multiple times in a short timeSafari 在短时间内多次通过自身播放音频时性能下降
【发布时间】:2019-01-24 21:32:25
【问题描述】:

我正在尝试在 keydown 上播放声音。 为此,我看到解决方案是克隆声音并播放新实例:

var promise = sound.cloneNode(true).play();

在线复制: https://jsfiddle.net/alvarotrigo/up4c6m95/13/

这似乎在 Chrome 和 Firefox 中运行良好。但是在 Safari 中,这会导致性能不佳。

尝试用双手快速打字以重现错误。

请注意,我添加了一个 gif 图像,在快速输入时会出现延迟。 这当然也可以在 Safari 开发工具上注意到,如下图所示:

完整代码在这里:

var sound = new Audio('https://www.w3schools.com/html/horse.mp3');

document.addEventListener('keydown', playSound);


function playSound() {
  //in order to play the same sound over itself
  var promise = sound.cloneNode(true).play();

  //we just dont want to show the console error when autoplay is disabled :)
  if (typeof promise !== undefined) {
    promise.then(function() {
      // Autoplay started!
    }).catch(function(error) {
      //error
    });
  }

}

【问题讨论】:

    标签: javascript html safari webkit html5-audio


    【解决方案1】:

    Safari 每次都会为正在播放的音频文件发出请求,而另一方面,Firefox 和 Chrome 则并非如此,因为它们往往只加载一次。

    在 iOS 上的 Safari 中(适用于所有设备,包括 iPad)...在用户启动数据之前不会加载数据。 这意味着 JavaScript play() 和 load() 方法也处于非活动状态 直到用户开始播放,除非 play() 或 load() 方法 由用户操作触发。

    我认为您无法解决导致每次按键都发出请求的缓慢性能。

    【讨论】:

    • 那么其他html 5游戏如何处理呢?
    • @Alvaro 我在分享我对这个主题可能有限的知识,我不是 HTML5 专家,我会把它留给更有知识的人来回答你的问题 :-)
    • 我也不是专家,但我想很多其他 HTML5 游戏都使用github.com/goldfire/howler.js,它解决了很多与音频相关的问题。
    • @borisdiakur 或移相器 ;) github.com/photonstorm/phaser
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多