从多个音频文件中提取“持续时间”元数据

时间:2018-10-14 06:58:39

标签: javascript audio metadata duration

我是一个新手,试图用JavaScript做一些我认为很简单的事情,但是我在计时方面遇到了很多问题。我有一个音轨列表(在本示例中为3个,但可以是任意数量),我想从每个文件中提取“持续时间”元数据。我需要最终的代码以适合现有的“ for”循环,该循环正在处理与每种音频有关的其他数据。

在实验中,我可以获取单个音频文件的持续时间,如日志所示:-

loading track1.mp3  
Meta data for audio 1 loaded  
duration of audio 1 = 390.321633 seconds  

但是,如果我将代码包装在“ for”循环中,则只会得到列表中最后一个文件的持续时间,而这种情况发生在for循环完成执行之后。

loading track1.mp3  
loading track2.mp3  
loading track3.mp3  
Meta data for audio 4 loaded  
duration of audio 4 = 286.171429 seconds  

我已经尝试过使用函数的各种排列,嵌套函数以及对回调的尝试(我仍然难以理解),但我无可救药地迷失了。

任何人都可以提供仅JavaScript的解决方案(最好提供注释以帮助我了解正在执行的操作)吗?我不想使用Jquery,这样我就不会试图同时理解和学习两件事,但是如果使用它是唯一的解决方案,那就去吧。

这是我的代码

<body>
<div id="div1"></div>
<script>
var aud1 = document.createElement("audio");
aud1.id="audio1";
document.getElementById("div1").appendChild(aud1);
aud1.controls=true;
aud1.onloadedmetadata = function() {
  console.log("Meta data for audio "+a+" loaded");
  var d = document.getElementById("audio1");
  console.log("duration of audio " + a + " = " + d.duration + " seconds");
}
for (a=1;a<4;a++) {
  console.log("loading track" + a + ".mp3")
  aud1.src="track"+a+".mp3";
}
</script>
</body>

1 个答案:

答案 0 :(得分:0)

解决了。 用简单的计数器替换了for循环,该计数器在事件处理程序中进行了更新。

<body>
<div id="div1"></div>
<script>
var a=0;
var aud1 = document.createElement("audio");
document.getElementById("div1").appendChild(aud1);
aud1.onloadedmetadata = function() {
    console.log("Meta data for audio "+a+" loaded");
    var d = document.getElementById("audio1");
    console.log("duration of audio "+a+" = " + d.duration + " seconds");
    a++
if(a===3)return
console.log("loading track"+a+".mp3");
aud1.src="track"+a+".mp3";
};
aud1.id="audio1";
aud1.controls=true;
aud1.autoplay = false;
console.log("loading track"+a+".mp3");
aud1.src="track"+a+".mp3";
</script>
</body>

现在给出正确的顺序:-

loading track0.mp3  
Meta data for audio 0 loaded  
duration of audio 0 = 390.321633 seconds  
loading track1.mp3  
Meta data for audio 1 loaded  
duration of audio 1 = 303.882449 seconds  
loading track2.mp3  
Meta data for audio 2 loaded  
duration of audio 2 = 286.171429 second  
相关问题