我找了个CBR的MP3,用千千静听去查看其播放时间,推断出,其用的是第一种方法计算的。
具体推断过程如下:
(此处为了方便计算,忽略了MP3的Tag的大小,而把整个文件大小看作是MP3的所有帧的总大小)
该MPEG 1- Layer III的MP3:
文件大小=11777537 字节
采样个数:1152
采样率:44100Hz
比特率:96kbps
【方法一】
总时长
= 11777537 × 8 ÷(96 × 1000)
= 981.46
【方法二】
总时长
= 11777537÷(4 + (1152÷44100)×(96×1000÷8) )×(1152÷44100)
= 11777537÷(4 + 313.47)×0.02612
≈11777537÷(4 + 314)×0.02612
= 11777537÷318×0.02612
= 967.48
即,方法二,是精确的MP3的总时长,为967.48,而方法一,计算出来的是有误差的981.46,误差为 (981.46-967.48)/ 967.48=1.34%,即大概为1%。
而千千静听查看到此MP3的播放时间为:16:20.454 = 980.454秒,
考虑到我们上面用方法一算出来的MP3的播放时间是981.46秒,是把MP3的Tag也算进去了,所以去掉Tag的大小,就是千千静听上看到的980.454秒了。
【总结】
因此,虽然方法二计算出来的播放时间更准确,但是实际上,为了更简便的计算,往往采用了误差大概只有1%,(一般用户也可以接受此误差),的第一种方法:
CBR播放时间
= 文件大小(字节)× 8比特/字节 ÷(比特率 千比特/秒 ×1000 比特/千比特)