如何获取mp3文件的大小和持续时间?

时间:2013-12-25 10:39:35

标签: javascript php jquery

我需要计算一个mp3文件的总长度。

目前我正在使用我发现@ http://www.zedwood.com/article/php-calculate-duration-of-mp3

的PHP类

如果同一服务器中的mp3文件,这种方法非常有效。

但如果我有来自其他网站的网址则会抛出错误。请帮帮我。

是否有任何JavaScript J-Query函数来获取mp3文件的长度

<?php include("mp3.class.php");
$f = 'http://cdn.enjoypur.vc/upload_file/5570/5738/5739/7924/Blue%20Eyes%20-%20Yo%20Yo%20Honey%20Singh%20(PagalWorld.com)%20-192Kbps%20.mp3';
$m = new mp3file($f);
$a = $m->get_metadata();

if ($a['Encoding']=='Unknown')
    echo "?";
else if ($a['Encoding']=='VBR')
    print_r($a);
else if ($a['Encoding']=='CBR')
    print_r($a);
unset($a);
?>

6 个答案:

答案 0 :(得分:3)

实际上有一个库可以在客户端运行,试图获取足够的MP3来读取ID3标签:

http://github.com/aadsm/JavaScript-ID3-Reader

尝试

HTML文件API。

http://lostechies.com/derickbailey/2013/09/23/getting-audio-file-information-with-htmls-file-api-and-audio-element/

答案 1 :(得分:2)

也许最简单的解决方案是使用audio html元素获取持续时间并直接从FileReader对象返回的文件中获取大小。这种方法的代码示例如下所示。

此方法和到目前为止提出的所有其他解决方案的一个缺点是,加载大的文件(例如> 200MB文件)时,音频标签的durationchanged事件触发需要10-20秒的延迟。显然,有一种更快的方式来获取此信息,因为当文件以文件:///..URL的形式输入浏览器时,持续时间会立即显示。

function checkMp3SizeAndDuration()
{    
    var files = document.getElementById('upload-file').files;
    var file = files[0];
    if (file.size > MAX_FILE_SIZE) {
        return;
    }

    var reader = new FileReader();
    var audio = document.createElement('audio');
    reader.onload = function (e) {
        audio.src = e.target.result
        audio.addEventListener('durationchange', function() {
            console.log("durationchange: " + audio.duration);
        },false);

        audio.addEventListener('onerror', function() {
            alert("Cannot get duration of this file.");
        }, false);
    };
    reader.readAsDataURL(file);
});

答案 2 :(得分:0)

使用适用于VBR文件的getID3() PHP库。

此链接可以帮助您 sourceforge.net

它在发展方面非常活跃。

答案 3 :(得分:0)

您可以使用的着名和非常SPI MP3 SPI 而且代码也很简单

File file = new File("filename.mp3");
AudioFileFormat baseFileFormat = AudioSystem.getAudioFileFormat(file);
Map properties = baseFileFormat.properties();
Long duration = (Long) properties.get("duration");

答案 4 :(得分:0)

以下是使用Web Audio API获取mp3持续时间的方法:

const mp3file = 'https://raw.githubusercontent.com/prof3ssorSt3v3/media-sample-files/master/doorbell.mp3'
const audioContext = new (window.AudioContext || window.webkitAudioContext)()
const request = new XMLHttpRequest()
request.open('GET', mp3file, true)
request.responseType = 'arraybuffer'
request.onload = function() {
    audioContext.decodeAudioData(request.response,
        function(buffer) {
            let duration = buffer.duration
            console.log(duration)
            document.write(duration)
        }
    )
}
request.send()

答案 5 :(得分:0)

由于无法找到快速且不需要大量额外样板代码的内容,我调整了现有的服务器端javascript实用程序以直接在浏览器中运行。演示代码位于:https://github.com/eric-gilbertson/fast-mp3-duration