Java 脚本 - 当尝试按顺序一个接一个地播放音频时(通过 for 循环),一次播放所有音频

Posted

技术标签:

【中文标题】Java 脚本 - 当尝试按顺序一个接一个地播放音频时(通过 for 循环),一次播放所有音频【英文标题】:Java script -All audio plays at once when attempting to play audio one by one in a sequence (through a for loop) 【发布时间】:2017-06-22 18:28:28 【问题描述】:

这是我的项目https://codepen.io/RajTheSHow/pen/vZZPqZ的代码笔链接 当您按下错误的按钮时,它应该播放序列(按顺序按音频和按钮)。但是实际发生的是,当您按下错误的按钮时,它会播放所有音频并立即更改颜色并且不执行睡眠功能是什么。你可以在笔中看到问题。

按下错误按钮时运行序列的函数如下 cal 是存储顺序的位置。

   //plays the sequence
function callBut()
  onr=0;
for(i=0;i<cal.length;i++)
   // or eval ("s"+cal[i])
   window["s"+cal[i]].play();

   // set the but# to Clicked Color Ccol# then after 1 sec go back to normal color
     $("[but="+cal[i]+"]").css("background",window["Ccol"+cal[i]])
 sleep(500).then(() => 
// set the button# to Standard color Scol#
    $("[but="+cal[i]+"]").css("background",window["Scol"+cal[i]])

);



【问题讨论】:

寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及重现它所需的最短代码在问题本身。没有明确的问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example。 这个问题可能会对你有所帮助***.com/questions/21471116/… 【参考方案1】:

你期待什么?循环不会等待音频完成。最好使用递归来播放下一首歌曲。

let arr = cal.map(element => window[`s$element`]); // asuming 'cal' is something significant

let index = 0;
playAudio(arr[index]);

function playAudio(audio) 
   if (!audio || !(audio instanceof Audio)) return;

   audio.addEventListener('ended', function() 
      index++;
      playAudio(arr[index]);
   )
   audio.play();

【讨论】:

【参考方案2】:

这是正确和预期的行为。 您想要实现的需要等待结束事件,然后才在下一个剪辑上调用播放。 这可以通过正确处理您可以在线查找的音频事件并“链接”它们一次播放一个来实现,就像这样:

var nextSound;

function playNext()

  var audio;

  if (nextSound >= cal.length)
  
    return;
  

  audio = $(window["s"+cal[nextSound++]]);
  audio.on("ended", playNext);
  audio[0].play();


nextSound = 0;
playNext();

【讨论】:

以上是关于Java 脚本 - 当尝试按顺序一个接一个地播放音频时(通过 for 循环),一次播放所有音频的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何流畅地按顺序播放视频而不会出现故障和延迟?

使用 JavaScript 按顺序播放 MP3 文件,无需 HTML5 音频

快速按顺序播放音频文件

按顺序运行多个Powershell脚本 - 在文件夹上 - 将脚本合并到主脚本中

使用java JSch库一个接一个地执行多个命令

Web:如何无延迟地一个接一个地播放音频文件?