Calculate Mp3 duration based on bitrate and file size

If anyone else comes across trying to calculate bitrate in JavaScript with Web Audio API this is how I accomplished it:

<input type="file" id="myFiles" onchange="parseAudioFile()"/>
function parseAudioFile(){
  const input = document.getElementById('myFiles');
  const files = input.files;
  const file = files && files.length ? files[0] : null;
  if(file && file.type.includes('audio')){
    const audioContext = new (window.AudioContext || window.webkitAudioContext)();
    const reader = new FileReader();
    reader.onload = function(e){
      const arrayBuffer = e.target.result;
      audioContext.decodeAudioData(arrayBuffer)
        .then(function(buffer){
          const duration = buffer.duration || 1;
          const bitrate = Math.floor((file.size * 0.008) / duration);
          // Do something with the bitrate
          console.log(bitrate);
        });
    };
    reader.readAsArrayBuffer(file);
  }
}

You can calculate the size using the following formula:

x = length of song in seconds

y = bitrate in kilobits per second

(x * y) / 8

We divide by 8 to get the result in kilobytes(kb).

So for example if you have a 3 minute song

3 minutes = 180 seconds

128kbps * 180 seconds = 23,040 kilobits of data 23,040 kilobits / 8 = 2880 kb

You would then convert to Megabytes by dividing by 1024:

2880/1024 = 2.8125 Mb

If all of this was done at a different encoding rate, say 192kbps it would look like this:

(192 * 180) / 8 = 4320 kb / 1024 = 4.21875 Mb

Tags:

Mp3