【问题标题】:Play multiple audio files with howlerjs使用 howlerjs 播放多个音频文件
【发布时间】:2017-02-19 04:19:54
【问题描述】:

我正在尝试无延迟地按顺序播放多个音频文件,但我尝试了下面的代码,但它不起作用。在实际场景中,我只需要一个按钮,一旦播放音频就会播放和暂停,反之亦然

http://codepen.io/anon/pen/PWrYKw

<button id='play-button'> Play</button>
<button id='pause-button'>Pause</button>
<button id='preset-changer'>Present</button>

(function( $ ) {
'use strict';

jQuery(window).load(function() {
    var sound_files = {
            sound1 : new Howl({
                src: ['http://download.quranicaudio.com/verses/Sudais/mp3/001001.mp3'],
                loop: true
            }),
            sound2 : new Howl({
                src: ['http://download.quranicaudio.com/verses/Sudais/mp3/001002.mp3'],
                loop: true
            }),
            sound3 : new Howl({
                src: ['http://download.quranicaudio.com/verses/Sudais/mp3/001003.mp3'],
                loop: true
            })
        };

    var play_button = $('#play-button'),
        pause_button = $('#pause-button'),
        shift_preset = $('#preset-changer');

    play_button.click(function() {
        //sound_files.play();
          for (var prop in sound_files) {
            if(!sound_files.hasOwnProperty(prop)) continue;
            {sound_files[prop].play();}
          }
        });     

    //});
});

})(jQuery);

不知道我做错了什么,因为我没有看到任何错误消息。

【问题讨论】:

标签: javascript jquery howler.js


【解决方案1】:

试试这个:

play_button.click(function() {
    sound_files.map(function(s) {
        s.play();
    })
});

【讨论】:

  • 没有,连这个都不玩
【解决方案2】:

您在 CodePen 演示中没有正确引用 howler.js 文件。用这个来改变它——https://rawgit.com/goldfire/howler.js/master/dist/howler.js

另一件事,.load() 早就被弃用了。使用.on('load', fn) 更改该行,如下所示:

$(window).on('load', function() {
    ...
});

它适用于上述更改。

编辑#1:您需要利用Howler 对象提供的事件来正确排序曲目。以下是我的做法,但我认为使用更多状态变量可能会更简洁,尤其是因为您想要合并暂停和恢复:

$(window).on('load', function() {
  var isPlaying = false;
  var sound_files = [new Howl({
      src: ['http://download.quranicaudio.com/verses/Sudais/mp3/001001.mp3'],
      loop: false
    }),
    new Howl({
      src: ['http://download.quranicaudio.com/verses/Sudais/mp3/001002.mp3'],
      loop: false
    }),
    new Howl({
      src: ['http://download.quranicaudio.com/verses/Sudais/mp3/001003.mp3'],
      loop: false
    })

  ];

  var play_button = $('#play-button'),
    pause_button = $('#pause-button'),
    shift_preset = $('#preset-changer');

  for (var i = 0; i < sound_files.length - 1; ++i) {
    sound_files[i].on('end',
      (function(i) {
        return function() {
          sound_files[i + 1].play();
        }
      }(i))
    );
  }
  sound_files[i].on('end', function() {
    isPlaying = false;
  })

  play_button.click(function() {
    if (!isPlaying) {
      isPlaying = true;
      sound_files[0].play();
    }
  });

  function playTrack(index) {
    console.log("playing " + index);
    sound_files[index].play();
    sound_files[index].once('end', function() {
      if (index < sound_files.length - 1)
        playTrack(index + 1);
      else
        isPlaying = false;
    });
  }

  //});
});

【讨论】:

  • @SimK 你能用上面给出的代码替换你的 JS 代码,看看是否有帮助?我基本上遍历了每个Howler 对象,并为每个对象添加了一个处理程序,除了最后一个对象以播放下一首曲目。
猜你喜欢
  • 2021-05-19
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多