cbr的文章很多,不累述了。这里主要讲的是mp3, vbr的文件结构。
对vbr的文件来说,第一包不是音频数据,而是这个文件的vbr 信息。
0-3 byte mp3的每包音频数据头,内涵各种audio info. 如FF, FB, 90,04.
4-39 byte 在这里面有4个bytes为"Xing"(58, 69, 6e, 67),这个是vbr的标识,如果没有就是cbr, 如果有在的位置不同代表不一样的格式和channel,具体如下:
36-39 "Xing": mpeg1, channel!=mono (大多数情况,都是这种)
21-24 "Xing": mpeg2, channel==mono
21-24 "Xing": mpeg2, channel!=mono
(这2种情况肯定有项是错误的,但是原始spec上这么写,我目前还没碰到过类似文件,有待验证)
40-43 byte: &0x1, frame总数有没有储存。
&0x2, 文件大小,byte为单位。
&0x4, TOC flag. (table of contents)
&0x8, VBR scale flag
44-47 byte: frame 总数
48-51 byte: 文件大小,byte为单位
52-151 byte:TOC,100个index. (TOC[i]/256)*fileLenInBytes.
比如:240秒的歌,我希望跳到第30秒,文件总大小为8888888bytes.
第30秒的offset就是(TOC[30/240*100]/256)*8888888
152-155 byte: 不知道做撒的,谁知道请留言。
vbr的总时间:
druation = (total_frame*32*MAD_NSBSAMPLES(layer, flag)/samplerate)