【发布时间】:2017-12-21 00:18:45
【问题描述】:
此应用会根据数字播放声音。我有多个非常短的 mp3 音频文件。正如问题所说,我希望它依次播放所有声音,一个接一个,但只有最后一个声音(数字)正在播放,我在控制台上收到错误消息:
“未捕获(承诺中)DOMException:play() 请求被新的加载请求中断。”
我遗漏了一些东西,或者这可能是不可能的。任何帮助表示赞赏。
function playSound(note){
var currentPlayer;
var player = document.getElementById("player");
var isPlaying = player.currentTime > 0 && !player.paused && !player.ended
&& player.readyState > 2;
if (!isPlaying){
player.src = "sounds/"+note+".mp3";
player.play();
}else{
player.pause();
player.currentTime = 0;
currentPlayer = player;
}
}
//variable with numbers where each number should load a sound and play
var numString = "0934590042529689108538569377239609480456034083552";
for(i = 0; i < numString.length; i++){
switch (parseInt(numString[i])){
case 1:
playSound("C");
break;
case 2:
playSound("D");
break;
case 3:
playSound("E");
break;
case 4:
playSound("F");
break;
case 5:
playSound("G");
break;
case 6:
playSound("A");
break;
case 7:
playSound("B");
break;
case 8:
playSound("C2");
break;
case 9:
playSound("D2");
break;
case 0:
playSound("silence");
break;
}
HTML:
<audio controls id="player" style="display: none">
<source src="#"></source>
</audio>
【问题讨论】:
-
该循环在几毫秒内完成。在设置下一个
src之前,它不会等待每个声音完成。你需要一个递归函数,使用一个声音的结尾来设置下一个