2017-01-15 8 views
0

Я пытаюсь создать некую музыку, в которой треки выбираются наугад, причем один идет прямо за другим (и в конечном итоге исчезает вместе, так что один трек накладывается на следующий, делая для морфинга алеаторную музыку, возможно, в конечном итоге несколько самосоздавая, и т. д.)Перемешивание 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(); 
+0

Удалить это: 'audio.src = playlist [0];' – zer00ne

+0

В этом случае звук не воспроизводится. – Tom

+1

Затем добавьте audio.src = playlist [0]; внутри функция readFiles() после перетасовки – vijaykumar

ответ

0

ОК, мне нужно было только перетасовать (плейлист) перед функцией readFiles(). Просто ... Спасибо.

 Смежные вопросы

  • Нет связанных вопросов^_^