最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Is there a way to indicate audio download progressbuffer when using Howler.js? - Stack Overflow

programmeradmin3浏览0评论

I'm using Howler.js and trying to acplish something like this:

However, Howler doesn't seem to have support for audio "progress" events. Anybody know how I could work around this?

I'm using Howler.js and trying to acplish something like this:

However, Howler doesn't seem to have support for audio "progress" events. Anybody know how I could work around this?

Share Improve this question edited May 23, 2017 at 12:25 CommunityBot 11 silver badge asked Jun 11, 2016 at 23:59 Brian FitzGeraldBrian FitzGerald 3,1193 gold badges30 silver badges39 bronze badges 1
  • Any resolve to this issue? – Papa De Beau Commented Jun 1, 2018 at 0:38
Add a ment  | 

1 Answer 1

Reset to default 8

You'll need to bind to Howler's non-public API to achieve this, at least until this feature is implemented (if ever).

const audio = new Howl({
  src: 'https://howlerjs./assets/howler.js/examples/player/audio/rave_digger.webm',
  html5: true,
  preload: false,
});

const handleLoad = () => {
  const node = audio._sounds[0]._node;
  // const node:HTMLAudioElement = (audio as any)._sounds[0]._node; // For Typescript
  node.addEventListener('progress', () => {
    const duration = audio.duration();

    // https://developer.mozilla/en-US/Apps/Fundamentals/Audio_and_video_delivery/buffering_seeking_time_ranges#Creating_our_own_Buffering_Feedback
    if (duration > 0) {
      for (let i = 0; i < node.buffered.length; i++) {
        if (node.buffered.start(node.buffered.length - 1 - i) < node.currentTime) {
          const bufferProgress = (node.buffered.end(node.buffered.length - 1 - i) / duration) * 100;
          // do what you will with it. I.E - store.set({ bufferProgress });
          break;
        }
      }
    }
  }
};

audio.on('load', handleLoad);

Original answer can be found here in goldfire/howler.js

发布评论

评论列表(0)

  1. 暂无评论