根据比特率和文件大小计算 Mp3 持续时间

Calculate Mp3 duration based on bitrate and file size

我尝试使用比特率和文件大小来计算 mp3 持续时间,经过一些搜索我发现了这个公式:

(mp3sizeInByte*0.008)/bitrate

我正在使用 mp3sizeInByte*0.008 将字节转换为 Kbits。

但它不是那么准确,结果与实际 mp3 持续时间相比有几秒钟的差异。

我想知道这个正确的公式?

您可以使用以下公式计算尺寸:

x = 歌曲长度(以秒为单位)

y = 比特率,单位为千比特每秒

(x * y) / 8

我们除以 8 得到以千字节 (kb) 为单位的结果。

例如,如果您有一首 3 分钟的歌曲

3 分钟 = 180 秒

128kbps * 180 秒 = 23,040 千比特数据 23,040 kb / 8 = 2880 kb

然后您将除以 1024 转换为兆字节:

2880/1024 = 2.8125 Mb

如果所有这些都是以不同的编码速率完成的,比如说 192kbps,它会看起来像这样:

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

如果其他人在尝试使用网络音频 JavaScript 计算比特率 API 时,我就是这样完成的:

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