根据 公式 4.3 “XING头位置” 定位到XING头所在位置。上式中:
如果没有ID3 V2这类的信息的话,那么MPEG头位置就是文件的最开始,即0的位置。
固定的32 bit = 4字节,所以加4.
对应Layer III,根据MPEG的版本,查下表可得,单位为字节:
如果对应XING头的位置有对应的” Xing”字符,那就说明是Xing头。
那么就可以解析Xing头,找到对应的我们所需要的一些值,尤其是总的帧数。
然后用之前介绍的公式 4.2 “VBR MP3总的时长(VBR Duration)”去计算VBR的播放时间。
其中:
可以通过解析XING头,找出里面总帧数(Frames),这个字段,一般都是存在的。
根据前面解析MPEG,找到MPEG的版本,基于属于哪个Layer,然后根据表 3.4 “MPEG帧的采样数索引表(单位:个/帧)”查得每帧的采样个数,得到每一帧有多少个采样。
而对于MP3(MPEG-1,Layer III)此处肯定是对应的1152。
根据前面解析MPEG,找到2比特大小的采样率索引 ,然后根据表 3.3 “MPEG帧的采样率索引表(单位:Hz)”找到对应的采样率。
此处,也就是找到我们前面所说的,总的帧数,加上另外两个参数:帧的采样数和帧的采样率(都是通过解析第一帧的帧头,即可算出对应的值),然后我们就可以算出VBR的MP3文件的总的播放时间长度了。
计算出VBRI的位置,如果该位置找到“VBRI”字符,那么说明是VBRI头。
然后解析VBRI,找到对应的总的帧数,然后和XING头算法类似,用上面的公式计算出VBR的播放时间即可。
如果连VBRI头也没找到,即,Xing和VBRI都没有,那么则是CBR。
然后用公式 4.1 “CBR播放时间(CBR Duration)”计算出播放时间长度。
其中:
文件大小 = 总文件大小 – 头信息大小
这里的头信息,指的是ID3 V1或ID3 V2之类的头信息。
而总文件大小,这个不用多解释,就是整个MP3的大小。
两者单位都是字节。
通过解析第一帧的MPEG,即可得到比特率的索引值,然后查表 3.2 “MPEG比特率索引表(单位:Kbit/s)”,即可得到此MP3的比特率大小。
然后套用上面的公式,即可算出CBR的MP3的播放时间长度了。