Я пытаюсь создать некую музыку, в которой треки выбираются наугад, причем один идет прямо за другим (и в конечном итоге исчезает вместе, так что один трек накладывается на следующий, делая для морфинга алеаторную музыку, возможно, в конечном итоге несколько самосоздавая, и т. д.)Перемешивание Array Audio всегда начинается с 0?
Я «рандомизирую» дорожки, помещая аудиофайлы в массив, а затем перетасовывая массив. Однако каждый раз, когда я загружаю страницу, хотя массив перетасовывается, первый выбор в массиве всегда равен # 1. Другими словами, если мой массив [1,3,4,7,9], и я запускаю сценарий три раза, треки будут играть [1,3,7,4,9], затем [1,4,7, 9,3], затем [1,3,9,7,4], где первый трек всегда равен 1. Я хотел бы, чтобы первая дорожка была случайной. Какие-либо предложения?
var audio = new Audio(),
i = 0;
var playlist = new Array('TRACKS/1.ogg', 'TRACKS/2.ogg', 'TRACKS/3.ogg', 'TRACKS/4.ogg', 'TRACKS/5.ogg', 'TRACKS/6.ogg', 'TRACKS/7.ogg', 'TRACKS/8.ogg', 'TRACKS/9.ogg');
audio.addEventListener('timeupdate', function(){
var buffer = .8
if(this.currentTime > this.duration - buffer){
i = ++i < playlist.length ? i : 0;
console.log(i)
audio.src = playlist[i];
readFiles()
}}, false);
audio.volume = 0.3;
audio.loop = false;
audio.src = playlist[0];
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
function readFiles(){
playlist = shuffle(playlist);
for(var i = 0; i < playlist.length; ++i){
audio.play();
}
readFiles(); //to read undefinitly
}
readFiles();
Удалить это: 'audio.src = playlist [0];' – zer00ne
В этом случае звук не воспроизводится. – Tom
Затем добавьте audio.src = playlist [0]; внутри функция readFiles() после перетасовки – vijaykumar