Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the size and duration of an mp3 file?

I need to calculate the total length of an mp3 file.

Currently I am using a PHP class which I found @ http://www.zedwood.com/article/php-calculate-duration-of-mp3.

This is working perfectly if the mp3 file in same server.

but if I have a URL from other site it throwing error. Please help me.

Is there any JavaScript J-Query function to get the length of the mp3 file

<?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);
?>
like image 768
Nevin Thomas Avatar asked Dec 25 '13 10:12

Nevin Thomas


2 Answers

Here's how you can get mp3 duration using Web Audio API:

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()
like image 56
Ilyich Avatar answered Nov 03 '22 22:11

Ilyich


Perhaps the simplest solution is to use the audio html element to get the time duration and to obtain the size directly from the file returned by the FileReader object. A code example of this approach is shown below.

One down side of this and all the other solutions presented so far is the 10-20 second delay it takes for the audio tag's durationchanged event to fire when loading large, eg > 200MB files. Clearly there is a faster way to get this info because the duration is shown immediately when the file is entered into the browser as a file:///.... 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);
});
like image 37
eric gilbertson Avatar answered Nov 04 '22 00:11

eric gilbertson