不递归随机播放音轨

Play audio tracks randomly without recursion

我在页面上有多个音频元素,这些元素是根据用户使用复选框的选择 javascript 创建的。当用户单击“播放”按钮时,我想播放随机选择的音轨,曲目之间的延迟可由用户调整,直到他们单击“停止”按钮。我有这个代码

function loopmusic(){
  if (!looping){
    alert('exiting loopmusic()');
    return 0;
  }
  var audioElements = document.getElementsByTagName('audio');
  var index = Math.floor(Math.random() * audioElements.length);
  //audioElements[index].volume=0.5;    
  $(audioElements[index]).bind("ended", function(){
    audioElements[index].pause()
    loopmusic()    
  });  
  setTimeout(audioElements[index].play(), delayms);
}

该代码改编自我在这里阅读的内容:

现在事件侦听器似乎没有按我预期的方式运行,曲目之间没有延迟,并且同时播放多个曲目。我想要任何关于如何解决这个问题的指示,如果我可以在没有递归的情况下做到这一点,那将是更可取的。这可能会 运行 一段时间,我想避免它占用大量内存。

Right now the event listener doesn't appear to be acting the way I expected, there is no delay between tracks, and multiple tracks play at the same time.

您正在调用 .play() 而不是引用 .play;尝试在 setTimeout 调用中删除 .play() 之后的 ()。此外,似乎没有必要在 ended 事件中调用 .pause()。不确定 delayms 在哪里定义?

setTimeout(audioElements[index].play, delayms);