Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取mp3文件的大小和持续时间?_Javascript_Php_Jquery - Fatal编程技术网

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

Javascript 如何获取mp3文件的大小和持续时间?,javascript,php,jquery,Javascript,Php,Jquery,我需要计算mp3文件的总长度 目前我正在使用一个我发现@的PHP类 如果mp3文件在同一台服务器上,这是完美的工作 但如果我有一个来自其他网站的URL,它就会抛出错误。请帮帮我 是否有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%20Ho

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

目前我正在使用一个我发现@的PHP类

如果mp3文件在同一台服务器上,这是完美的工作

但如果我有一个来自其他网站的URL,它就会抛出错误。请帮帮我

是否有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);
?>

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

试一试

HTML文件API

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

此链接可帮助您


它在开发中非常活跃。

您可以使用的一种著名且非常实用的SPI 代码也非常简单

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

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

const mp3file='0https://raw.githubusercontent.com/prof3ssorSt3v3/media-sample-files/master/doorbell.mp3'
const audioContext=new(window.audioContext | | window.webkitadiocontext)()
const request=new XMLHttpRequest()
request.open('GET',mp3file,true)
request.responseType='arraybuffer'
request.onload=函数(){
audioContext.decodeAudioData(请求.响应,
功能(缓冲区){
let duration=buffer.duration
console.log(持续时间)
文件写入(持续时间)
}
)
}

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

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

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);
});

由于找不到快速且不需要一堆额外样板代码的东西,我调整了现有的服务器端javascript实用程序,使其直接在浏览器中运行。演示代码位于:

是否有可能快速解决wav问题的方法?MP3文件的持续时间通常存储在ID3标签中,必须通过扫描所有音频帧来计算。