【问题标题】:How to play an audio randomly from an array of mp3 using javascript如何使用javascript从mp3数组中随机播放音频
【发布时间】:2020-12-19 23:00:18
【问题描述】:

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

这适用于单个 mp3 文件,但我想添加更多歌曲以进行变化。

我不想让它成为一个复杂的音乐播放器。只需一个按钮即可播放/暂停音乐,当 bg1 完成后,播放数组中的下一个。

另外,我希望播放的音乐可以随机选择吗?

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

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>

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

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 文件的数组,这可能会导致加载时间过长。可以制作成直到轮到它才加载。有点像lazy loading 用于音频文件?

我真的很感激。提前非常感谢!

【问题讨论】:

  • 问题是什么?您只需更改&lt;audio /&gt; 元素的.src(+ 一些“等待...”,直到浏览器能够实际播放文件。
  • “有点像音频文件的延迟加载?” - 它的工作方式与图像相同。
  • 谢谢,但这只是一个额外的问题。我的主要问题是如何制作 mp3 文件数组?
  • 这将是第三个问题。不,您的“主要问题”是标题中的问题。至少 SO 是这样工作的;)

标签: javascript html audio


【解决方案1】:

我会按照以下方式解决它。

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>

【讨论】:

  • 嗨@Jozef,我刚试过这个,效果很好!我就想问一首歌唱完怎么自动播放下一首歌?
  • 我不知道autoplay 属性在您更改音频源时是否有效。你可以随时打电话给play(),对吧?
  • 好的,我稍后再调查。谢谢你的代码,这对我来说好多了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 2014-02-25
  • 2011-01-27
相关资源
最近更新 更多