我创建了这个小音频播放器,它播放随机的前奏、歌曲的中间部分,然后是随机的结尾。现在它被硬编码为一首歌曲。每首歌有 3 个前奏、一个中段和 3 个结尾。我希望能够有一个随机选择的歌曲列表(比如从数组中随机选择),因此脚本将选择一首歌曲并相应地更改脚本(前奏和结尾以及中段)。我考虑了不同的方法来做到这一点,但我不希望脚本中的每首歌都有大量的数组。我将如何设计这样的系统?www.saradio.tk/dev.html上的演示(音频计时仅在 Chrome-ACTIVE-TAB AFAIK 中正常工作)
代码:
<body onload="checkdif(), loadintro(), loadoutro()">
<audio id="intro" src="" controls preload autoplay></audio>
<audio id="mid" src="radio/Barracuda-mid.ogg" controls preload></audio>
<audio id="outro" src="" controls preload></audio>
<br>
<br>
<button onclick="resetradio()">RESET</button> <span id="timeleft"> n/a </span>
<script>
var intros = [
"radio/Barracuda-intro1.ogg",
"radio/Barracuda-intro2.ogg",
"radio/Barracuda-intro3.ogg"];
var outros = [
"radio/Barracuda-outro1.ogg",
"radio/Barracuda-outro2.ogg",
"radio/Barracuda-outro3.ogg"];
function loadintro() {
document.getElementById("intro").src = intros[Math.floor(Math.random() * intros.length)];
document.getElementById("intro").load();
document.getElementById("intro").play();
}
function loadoutro() {
document.getElementById("outro").src = outros[Math.floor(Math.random() * outros.length)];
document.getElementById("outro").load();
}
x = document.getElementById('intro');
y = document.getElementById('mid');
done = false;
done2 = false;
function checkdif() {
if (done) return;
setTimeout('checkdif()', 5);
document.getElementById('timeleft').innerHTML = x.duration - x.currentTime;
if (x.duration - x.currentTime <= 0.09) {
document.getElementById('mid').play();
done = true;
checkdif2();
}
}
function checkdif2() {
if (done2) return;
setTimeout('checkdif2()', 5);
document.getElementById('timeleft').innerHTML = y.duration - y.currentTime;
if (y.duration - y.currentTime <= 0.09) {
document.getElementById('outro').play();
done2 = true;
}
}
function resetradio() {
done = false;
done2 = false;
document.getElementById('mid').pause();
document.getElementById('mid').currentTime = 0;
loadintro();
loadoutro();
checkdif();
}
document.getElementById("outro").addEventListener('ended', resetradio, false)
</script>
</body>
PS:我也考虑过设计系统,以便它从列表中删除刚刚播放的歌曲,因此它永远不会播放同一首歌曲,直到它循环通过所有其他可能。所以它会从一系列歌曲中挑选,当它挑选时让我们说“歌曲 x”,它将从数组中删除“歌曲 x”,以进行下一次随机挑选。只是一个想法...
更新:这是我对该系统的最终实现:http: //saradio.tk/new.html
如果您查看源代码并观察控制台,您会看到它从阵列中随机抽取一首歌曲,然后从阵列中删除该歌曲。这样,在播放完所有歌曲之前,它不会重复歌曲。一旦循环到达最后一首歌曲,数组就会恢复到原始状态。