mp3文件解码- 边信息结构

边信息

帧头之后,可能是2个字节的CRC,据说是用于网络传输时校验用的,见的不多,解码时可以直接把这两个字节忽略。
之后就是边信息了,刚接触位流,遇到边信息直接懵13,根本不知道如何下手,用了最蠢笨的方法,用excel一个bit一个bit的拿图表示出来
用来分析边信息的表格

边信息结构

从整体上看,mpeg 1的单声道的边信息占用138bits,合17个字节,双声道的边信息占256bits,合32字节。是否为单声道,在帧头的mode位指明的四种模式中,除了0x11之外,都可以看作是双声道,立体声是有专门的立体声处理环节的。
mpeg 2的双声道占17字节,单声道占9字节,因为针对mp3文件,它是基于mpeg1 layer III的,所以暂不对mpeg2的边信息进行支持。

双声道边信息结构

名称 变量 切窗为1 切窗位0 说明
主数据指针 mainDataBegin 9bits 9bits 因为哈夫曼编码是不定长编码,并且由于长短窗技术和心理声学模型技术等,使每一个样本的数据,编码成不相同的长度,这些数据被放在长度相同的帧,有的样本数据就会横跨2个以上的帧,所以需要一个指针来告诉下一个帧,前一帧还有多少数据是属于下一帧的。
保留字 privateBit 3bits 3bits
scfsi选择子 scfsi 4 * 1bit 4 * 1bit 声道0
scfsi选择子 scfsi 4 * 1bit 4 * 1bit 声道1
以下是粒度部分
part23Length 12 12
bigValues 9 9
globalGain 8 8
scalefacCompress 4 4
windowSwitchFlag 1 1
blockType 2 0
mixedBlockFlag 1 0
tableSelect 2 *5 3*5
subBlockGain 3*3 0
region0Count 0 4
region1Count 0 3
preFlag 1 1
scalefacScale 1 1
count1 1 1
part23Length 12 12
bigValues 9 9
globalGain 8 8
scalefacCompress 4 4
windowSwitchFlag 1 1
blockType 2 0
mixedBlockFlag 1 0
tableSelect 2 *5 3*5
subBlockGain 3*3 0
region0Count 0 4
region1Count 0 3
preFlag 1 1
scalefacScale 1 1
count1 1 1

上表的粒度部分只列出了一个声道的两个粒度的信息,下一个声道与上表粒度部分一样,一个双声道的边信息,共有4个粒度信息,每个粒度信息占59bits,两个声道共占236bits,加上共用的20bits,一个256bits,合32字节。

共用部分 gr[0]ch[0] gr[0]ch[1] gr[1]ch[0] gr[1]ch[1] 合计
双声道 20bits 59bits 59bits 59bits 59bits 256bits
单声道 18bits 59bits - 59bits - 136bits

单声道跟双声道共用部分的区别就是双声道的保留字长度是5bits,单声道的保留字3bits。

你可能感兴趣的:(mp3decode)