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