Как запустить звук после звука в soundmanager2 - PullRequest
7 голосов
/ 24 сентября 2011

Как я могу запустить звук за звуком в soundmanager2, я имею в виду, когда заканчивается первый звук, начинается второй звук, а когда заканчивается второй, начинается третий звук и т. Д., И т. Д.

Ответы [ 4 ]

6 голосов
/ 06 июня 2012
var soundArray = ['sound1', 'sound2', ...];
var chain = function (sound) {
soundManager.play(sound, { 
    multiShotEvents: true,
    onfinish: function () {
        var index = soundArray.indexOf(sound);
        if (soundArray[index + 1] !== undefined) {
            chain(soundArray[index + 1]);
        }
    }});
};

chain(soundArray[0])

рекурсия использования лотка, единственная проблема может возникнуть, когда в массив вы помещаете один и тот же звук дважды (цепочка будет бесконечность)

1 голос
/ 14 октября 2013

Помимо ответа Ашота и всех остальных, вы можете установить функцию onfinish при создании звука, а не только при его воспроизведении, например:

var demo2Sound = soundManager.createSound({
 url: '../mpc/audio/CHINA_1.mp3',
 onfinish: function() {
   soundManager._writeDebug(this.id + ' finished playing');
 }
});

... и если вам нужно изменить функцию onfinish, когда звук уже воспроизводится, вы можете сделать это следующим образом:

demo2Sound._onfinish = function(){ 
  //now this function will override the previous handler 
};
1 голос
/ 07 апреля 2012

Мне понадобилось 3 часа, чтобы понять ... но вот оно:

soundManager.play('sound1',{
  multiShotEvents: true,
  onfinish:function() {
    soundManager.play('sound2',{
      multiShotEvents: true,
      onfinish:function() {
        soundManager.play('sound3');
      }
    });
  }
});
1 голос
/ 24 сентября 2011

Пример того, как это сделать, приведен в документации (см. Демонстрацию 4а). Метод play принимает объект в качестве аргумента. Этот объект содержит набор параметров. Одна из этих опций - функция обратного вызова onfinish:

soundManager.play('firstSound',{
    multiShotEvents: true,
    onfinish:function() {
        soundManager.play('secondSound');
    }
});

Параметр multiShotEvents должен быть установлен на true, чтобы событие onfinish срабатывало после завершения каждого звука. По умолчанию он будет срабатывать только после завершения звуков.

Вы можете поставить в очередь столько звуков, сколько захотите, таким образом.

...