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
AVMutableAudioMixInputParameters:setVolume() 不适用于 iOS 9 的音频文件