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

Posted

技术标签:

【中文标题】JavaScript 音频持续时间不适用于 ALAC 文件(HTML 音频持续时间属性)【英文标题】:JavaScript audio duration not working for ALAC files (HTML audio duration property) 【发布时间】:2019-01-04 01:07:19 【问题描述】:

我在一些 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 新手。

谢谢

【问题讨论】:

您使用的是哪个浏览器?它支持 ALAC 编解码器吗? Firefox 没有,Chrome 也没有,Safari 有,而且运行良好。 @Kaiido 我在 Windows 的 Chrome 上。应该是这个原因。 ALAC 程序中的所有其他内容都适用,除了获取长度之外,但由于长度在 JS 中是异步的(我认为?)我在获取长度之后有其余的代码。难怪,这也解释了我目前正在调试的一些问题,因为所有内容(除了长度)都适用于 ALAC 并删除了此代码。由于没有浏览器支持,您有什么想法我怎么可能在没有此实现的情况下获得 ALAC 文件的长度? 【参考方案1】:

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

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

Feature Chrome Edge Firefox Internet Explorer Opera Safari
ALAC support No No No No No Yes

【讨论】:

【参考方案2】:

我认为只有 Safari 能够对 ALAC 编解码器进行本地解码,而且它可以正常工作。

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

ffmpeg 似乎能够对其进行解码并获取其持续时间,因此您可能希望从服务器端获取此信息,或查看旨在将 ffmpeg 移植到 js 的this project。 我自己从来没有尝试过,但它声称已经移植了 mp4 解码器,所以你可能会有一些运气。

【讨论】:

以上是关于JavaScript 音频持续时间不适用于 ALAC 文件(HTML 音频持续时间属性)的主要内容,如果未能解决你的问题,请参考以下文章

HTML5视频获取currentTime不适用于媒体事件javascript addEventListener

AVAssetWritter 不适用于音频

AVMutableAudioMixInputParameters:setVolume() 不适用于 iOS 9 的音频文件

淡入/淡出的简单切换不适用于过渡、不透明度和可见性

音频播放和录制不适用于 iOS 10

SoX 不适用于 Opus 音频文件