提问者:小点点

如何使用javascript从mp3阵列中随机播放音频


我这里有一个按钮,如果用户按下它,将播放背景音乐。如果再次按下,它将暂停音乐。

这工作很好的单一mp3文件,但我想增加更多的歌曲的变化。

我不想让它成为一个复杂的音乐播放器。只需一个按钮,播放/暂停音乐,当bg1完成时,播放阵列中的下一个。

还有,我希望播放的音乐可以是随机选择的?

请看一下我的代码到目前为止是什么样子的:

null

var myAudio = document.getElementById("myAudio");
    var isPlaying = false;

    function togglePlay() {
      isPlaying ? myAudio.pause() : myAudio.play();
    };
    
    myAudio.onplaying = function() {
      isPlaying = true;
    };
    myAudio.onpause = function() {
      isPlaying = false;
    };
<audio id="myAudio" src="bg1.mp3" preload="auto" loop></audio>

<a href="#" onclick="togglePlay()">Play Music</a>

null

这是我的array试用脚本,但我自己无法完成

let musicPlayer=[

`bg1.mp3`,
`bg2.mp3`,
`bg3.mp3`,
`bg4.mp3`

];

function playMusic(){

    let index=Math.floor(Math.random()*musicPlayer.length);
    
    let div=document.querySelector('#music');

最后,我计划制作一个大约70个mp3文件的阵列,这可能会导致长的加载时间。它能不能被制造成在轮到它之前不会装货。有点儿像音频文件的

我会非常感激的。提前多谢!


共1个答案

匿名用户

我会用下面的方法来解决它。

null

const audio = document.querySelector('#audio');
const audioButton = document.querySelector('#audioButton');

const audioUrls = [
"https://file-examples-com.github.io/uploads/2017/11/file_example_MP3_700KB.mp3"
];

const randomAudio = () => {
  const index = Math.floor(Math.random() * audioUrls.length);
  const audioUrl = audioUrls[index];
  
  return audioUrl;
}

audioButton.addEventListener("click", () => {
  audio.addEventListener("ended", () => {
    const audioUrl = randomAudio();
    
    const temp = new Audio();
    
    temp.addEventListener("loadeddata", () => {
      audio.src = audioUrl;
  });
    
    temp.src = audioUrl;
  })
  
  const audioUrl = randomAudio();
  
  audio.addEventListener("loadeddata", () => {
      audio.play();
  });
  
  audio.src = audioUrl;
  
})
<audio id="audio" src="" preload="auto" loop></audio>

<a id="audioButton" href="#">Play Music</a>