2011-09-24 16 views

Odpowiedz

1

Istnieje przykład, jak to zrobić w documentation (patrz Demo 4a). Metoda play przyjmuje obiekt jako argument. Ten obiekt zawiera zestaw opcji. Jedną z tych opcji jest funkcja onfinish zwrotna:

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

Opcja multiShotEvents musi być ustawiony na true spowodować zdarzenie onfinish na ogień po zakończeniu każdego dźwięku. Domyślnie uruchamia się tylko po zakończeniu dźwięków.

Możesz umieścić w kolejce tyle dźwięków, ile naprawdę chcesz.

+0

Jak zrobić to z jak 10 piosenek lub ponad 2? – averbaher

1

Zajęło mi jak 3 godziny, aby dowiedzieć się .. ale tutaj jest:

soundManager.play('sound1',{ 
    multiShotEvents: true, 
    onfinish:function() { 
    soundManager.play('sound2',{ 
     multiShotEvents: true, 
     onfinish:function() { 
     soundManager.play('sound3'); 
     } 
    }); 
    } 
}); 
+0

-1 jak nie następuje DRY principal, rekursywna funkcja kolejki (patrz [powyższa odpowiedź] (http://stackoverflow.com/a/10911630/1095883) dla metody) powinny być użyte. –

6
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]) 

Wyb.tacę rekurencji, jedyny problem może wystąpić, gdy w tablicy można umieścić sam dźwięk dwukrotnie (łańcuch być nieskończoność)

1

Oprócz odpowiedzi Ashot i wszyscy inni, można ustawić funkcję onfinish podczas tworzenia dźwięku, nie tylko wtedy, gdy go zagrać, na przykład:

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

... a jeśli trzeba zmienić onfinish funkcję raz dźwięk jest już odtwarzany, można to zrobić tak:

demo2Sound._onfinish = function(){ 
    //now this function will override the previous handler 
}; 
+0

Dobra uwaga, że ​​należy do 'createSound()'. – user1063287

Powiązane problemy