Soundmanager2 mp3播放器按钮预加载下一个声音

时间:2013-03-22 14:03:39

标签: javascript jquery soundmanager2

我使用Soundmanager2的mp3播放器按钮在我的网站上播放mp3链接。我在播放当前的mp3时使用了以下修改来预加载下一个mp3。

play: function() {
sm.load('basicMP3Sound'+(1*this._data.oLink.title)+1);
      //mycode end
      pl.removeClass(this._data.oLink,this._data.className);
      this._data.className = pl.css.sPlaying;
      pl.addClass(this._data.oLink,this._data.className);

},

在上面的示例中,您可能会注意到 this._data.oLink.title 中的标题标记,我将其添加到mp3链接以便以简单的方式处理文件,例如:

<a href="/quran/assets/audio/Menshawi_16kbps/002001.mp3" class="sm2_button" title="0">/002001.mp3</a>

但是,我注意到在播放当前mp3时没有预加载下一个mp3链接。这是因为下一首mp3没有被连续播放或者在播放完之前的mp3后开始播放。换句话说,下载需要一些时间或延迟。

我的代码中有什么问题吗?或者你的建议是什么?

  

注意此mp3图层的生活演示是found in this link

1 个答案:

答案 0 :(得分:2)

编辑:使用SoundManager inline button player

的方法

mp3-player-button.js config下的设置参数playNext : true|false下,找到... this.config = { // configuration options playNext: true, // stop after one sound, or play through list until end autoPlay: false, // start playing the first sound right away preloadNext : true // preload next sound when previous sound starts to play }; ... (第39行),将其更新为如下所示:

this.events

然后,在play对象(第96行)下面,修改... this.events = { // handlers for sound events as they're started/stopped/played play: function() { pl.removeClass(this._data.oLink,this._data.className); this._data.className = pl.css.sPlaying; pl.addClass(this._data.oLink,this._data.className); if (pl.config.preloadNext) { var nextLink = (pl.indexByURL[this._data.oLink.id]+1); if (nextLink<pl.links.length) { sm.load(nextLink) } } }, ... 函数以预加载下一个声音:

id

总之,当一首歌开始时,我们检查是否有下一首歌;如果有,我们从实例化SoundManager时创建的声音数组中拉出sm。在这种情况下,SoundManager为id,因此我们只需将下一首歌的sm.load()传递给onplay函数。

这是live demo: http://plnkr.co/edit/mpBkfDIrLNduMAWJjRfN


<击> 尝试这种方法:

使用createSound methodonfinishfirstSound事件,您可以链接相互委派的系列文件。

明确告诉var firstSound = soundManager.createSound({ id: 'firstSound', url: 'path/to/your/firstSound.mp3' }); var secondSound = soundManager.createSound({ id: 'secondSound', url: 'path/to/your/secondSound.mp3' }); // Kickoff first sound firstSound.load(); // Define the chain of events firstSound.play({ onplay: function () { // When `firstSound` starts, preload `secondSound` secondSound.load(); }, onfinish: function () { // Repeat, with next sound secondSound.play({... }) } }); :“当你开始播放时,预加载下一个声音,当你完成播放时,播放下一个声音”

的JavaScript

{{1}}

<击>