JavaScript音频持续时间不适用于ALAC文件(HTML音频持续时间属性)

时间:2019-01-04 01:07:20

标签: javascript audio html5-audio

我正在某些JS代码中使用以下实现方式来获取音频文件的持续时间:http://jsfiddle.net/derickbailey/s4P2v/(摘自https://lostechies.com/derickbailey/2013/09/23/getting-audio-file-information-with-htmls-file-api-and-audio-element/。)

即使使用createObjectURL,我的实现也是相同的。它可以与MP3,AAC(.m4a)和FLAC兼容,但不适用于ALAC(也为.m4a)。

let length = 0;
let url = URL.createObjectURL(file);
let audio = new Audio(url);
audio.addEventListener('loadeddata', function () {
    length = audio.duration;
}

有人知道我如何使用纯JavaScript获得 ALAC 文件的持续时间吗?我没有使用任何框架,对JS还是陌生的。

谢谢

2 个答案:

答案 0 :(得分:2)

在 MDN 上的文章 Web audio codec guide 中,它仅在 ALAC 编解码器的浏览器支持部分显示了 Safari。

这是该文章中完整的浏览器兼容性表:

<头>
功能 边缘 火狐 Internet Explorer 歌剧 Safari
ALAC 支持 没有 没有 没有 没有 没有

答案 1 :(得分:0)

我认为只有Safari才能本地解码ALAC编解码器,并且可以正常工作。

但是在所有其他浏览器中,由于它们无法解码,因此无法为您提供正确的持续时间。

ffmpeg似乎能够对其进行解码并获得其持续时间,因此您可能希望从服务器端获取此信息,或者看看this project旨在将ffmpeg移植到js。
我从来没有亲自尝试过,但是它声称已经移植了mp4解码器,因此您可能会遇到麻烦。