Я использую кнопку mp3-плеера Soundmanager2 для воспроизведения ссылок на 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 можно найти по этой ссылке < / а>

1
SaidbakR 22 Мар 2013 в 18:03

1 ответ

Лучший ответ

Изменить: подход к работе с встроенным проигрывателем кнопок SoundManager

В параметрах настройки в mp3-player-button.js в разделе config, где находится playNext : true|false (строка 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)
    }
  }
 },
...

Таким образом, когда начинается песня, мы проверяем, есть ли следующая песня; если есть, мы извлекаем его id из массива звуков, который был создан при создании экземпляра SoundManager. В данном случае SoundManager - это sm, поэтому мы просто передаем id нашей следующей песни в функцию sm.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({...
        })
    }
});
2
couzzi 31 Мар 2013 в 00:29
Что ж, как я могу реализовать ваше решение с помощью демонстрации кнопки mp3-плеера schillmania.com/projects/soundmanager2/demo/mp3-player-button/…
 – 
SaidbakR
30 Мар 2013 в 14:29
1
Я обновил ответ для работы с schillmania.com/projects/soundmanager2/ демо / mp3-плеер-кнопка
 – 
couzzi
31 Мар 2013 в 00:29