Oui, j'ai joué un peu. merci pour cette question intéressante. Cela recherchera avec jQuery dans votre DOM pour une liste de fichiers mp3 et crée playList
qui est joué en cliquant sur un bouton de démarrage.
<script>
var playList = new Array();
$(document).ready(function() {
var soundFileList = new Array();
$('ol#list2 li a').each(function() { // find soundfiles in <li><a data='*'>
$('ol#list2 li a').css('color','#000');
soundFileList.push(this.getAttribute('data'));
});
var newpl = { // create a selfmade playList object
nextSongNumber: 0, // track number with which the player starts
playLength: 7012, // milliseconds to play each track
idScheme: 'pl2_', // a given scheme as 'soundID+songNumber'
songUrl: './', // url where your files are
songList: soundFileList,
fadeIn: 2000, // fadeIn in milliseconds
fadeOut: 1000 // fadeOut in milliseconds
}
playList.push(newpl); // push it to our preset playlist
$('#startbutton').on('click',function(){
// call list 0 in playList[]
playThisPlayList(0, playList);
});
});
soundManager.setup({
url: './soundmanager2/swf/',
// preferFlash: false,
//flashPollingInterval: 4 , //in ms, overrules useFastPolling & useHighPerformance
useFastPolling: true,
useHighPerformance: true,
onready: function() {
function SkipThruPlayList(pl) {
if (pl.nextSongNumber+1 > pl.songList.length) {
//will be called after the last song in playList
pl.nextSongNumber=0; //needed for replay the playList
return;
} else {
if(songObject){ songObject.destruct(); }
var songObject = soundManager.createSound({
id: pl.idScheme + pl.nextSongNumber,
url: pl.songUrl + pl.songList[ pl.nextSongNumber ],
multishot: false
});
songObject.play({
from: 0,
to: pl.playLength,
stream: true,
autoPlay: false, //true if starting with pageload
onplay: function() {
$('ol#list2 li:nth-child('+pl.nextSongNumber+') a').css('color','#f00');
//console.log('now play:',this.url, 'songid:',this.id, 'laptime:', this.duration);
},
onstop: function() {
//console.log('songid:',this.id, ', songend was at:',this.position);
// check your console, songend-positions are not stable values
this.destruct(); //free memory from old song, necessary?
SkipThruPlayList(pl); // start over, create & play next songObject
},
whileplaying: function(){
//this is a fadeIn/fadeOut mechanism
var now=this.position;
var mainVolume = 100; //we could set this up with playList
if (now <= pl.fadeIn) {
//fadeIn
this.setVolume(parseInt((now/pl.fadeIn)*mainVolume));
} else if (now >= (pl.playLength-pl.fadeOut)) {
//fadeOut
this.setVolume(parseInt(((pl.playLength-now)/pl.fadeOut)*mainVolume));
} else {
//play normal Volume between fadeIn and fadeOut
this.setVolume(mainVolume);
}
}
});
pl.nextSongNumber++;
}
}
function playThisPlayList(i, playList) {
var count= playList[i].songList.length;
if (count > 0) {
//console.log('we have:',count,' songs to play');
SkipThruPlayList(playList[i]);
} else {
//console.log('no songs in this songlist');
return;
};
}
//playThisPlayList(0, playList);
window.playThisPlayList = playThisPlayList; //Broadcast function into BOM
}
});
</script>
<button id="startbutton">start</button>
<ol id="list2">
<li><a href="#" data="./test0.mp3">test0.mp3</a></li>
<li><a href="#" data="./test1.mp3">test1.mp3</a></li>
<li><a href="#" data="./test2.mp3">test2.mp3</a></li>
</ol>
Il ya encore quelque chose qui pourrait être plus intelligent, mais cela fonctionne. Dans l'exemple, que se passe-t-il si une piste est plus courte que 4096ms, peut-être que vous devriez vérifier cela. J'espère que cela aide.
salutations de berlin