1

Soundmanager2 の mp3 プレーヤー ボタンを使用して、Web サイトの 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);

},

上記の例では、ファイルの順序を簡単な方法で処理するために mp3 リンクに追加したthis._data.oLink.titleのタイトル タグに気付くかもしれません。次に例を示します。

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

ただし、現在の mp3 の再生中に次の mp3 リンクがプリロードされないことに気付きました。これは、次の mp3 が連続して再生されないか、前の mp3 の再生が終了した後に再生が開始されないためです。つまり、ダウンロードに時間がかかるか、遅延が発生します。

私のコードに何か問題がありますか? またはあなたの提案は何ですか?

このmp3レイヤーのライフ デモがこのリンクにあります。

4

1 に答える 1

2

編集:SoundManagerインラインボタンプレーヤーを操作するアプローチ

mp3-player-button.jsの下の setup params でconfigplayNext : true|falseis が見つかった場所 (39 行目) で、次のように更新します。

...
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
};
...

次に、オブジェクトの下this.events(96 行目) でplay、次のサウンドをプリロードするように関数を変更します。

...
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)
    }
  }
 },
...

要約すると、曲が始まると、次の曲があるかどうかを確認します。存在する場合は、idSoundManager をインスタンス化したときに作成されたサウンドの配列から取得します。この場合、SoundManager はであるため、次の曲の を関数にsm渡すだけです。idsm.load()

ここにライブデモがあります: http://plnkr.co/edit/mpBkfDIrLNduMAWJjRfN .


このアプローチを試してください:

メソッドonplayのおよびonfinishイベントを使用して、互いにデリゲートする一連のファイルをチェーンできます。createSound

明示的に言うとfirstSound、「再生を開始したら次のサウンドをプリロードし、再生が終了したら次のサウンドを再生する」

JavaScript

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({...
        })
    }
});

于 2013-03-28T03:50:15.550 に答える