帧头
音频区结构
除去头尾的ID3之外,剩下的就是音频数据,这部分数据由跟解码相关的信息及编码组成,整个数据区被分成一帧一帧,每一帧的结构都包括四字节的帧头,跟着的可能是两字节的CRC,之后是边信息,边信息的长度跟版本和层级有关系,并跟单声道和双声道有关。
帧头 | CRC | 边信息 | 缩放因子 | 哈夫曼码 | |
---|---|---|---|---|---|
长度 | 4字节 | 0字节或2字节 | 下文说明 | ||
说明 | 四个字节被分成13个字段,每个字段占不同的bit | CRC是非必要的,帧头有专门的bit指明这段是否存在 | 音频数据编码的时候被分成两个声道,每个声道被分成2个粒度,边信息存放着跟声道,粒度解码的信息 | 帧头和边信息之后,是数据区,前一部分存放的时候缩放因子,后一部分存放的是哈夫曼编码 | 哈夫曼码被分成3个区,第一部分一个码字(hcod)解码得到2个值,称为bigvalue区,第二部分一个码字解码得到4个值,第三部分称为0值区,不需要解码 |
帧头
注意,以下的大小是以bit为单位的,不是字节,一个字节有8个bit
len | 说明 | |
---|---|---|
同步字 | 12 | 有资料说同步字是11bit,1个bit用来做版本index,但是版本index的2bit会指向mpeg2.5版本,这据说是一个民间版本,所有本文采用官方的12bit |
版本index | 1 | 1是mpeg1.0, 0是mpeg2.0 |
层index | 2 | lay = 4 - index |
CRC段index | 1 | 0=yes, 1=no 这bit指明帧头之后,是否接了2字节的CRC校验 |
比特率index | 4 | bit per second 比特率索引,具体比特率需要查表 |
采样率index | 2 | 采样率每秒有多少次样本的采集,一般有44.1k(cd音质)48k等 |
填充空白字index | 1 | 计算每一帧的字节数的时候,如果不是整数,会有填充,这个索引 |
私有标识 | 1 | |
声道模式index | 2 | 0-立体声 1-联合立体声 2-双声道 3-单声道 |
联合立体声模式index | 2 | 如果声道模式是联合立体声,这个index指明联合立体声的模式 |
版本保护 | 1 | 0-no 1-yes |
原版标志 | 1 | 0-no 1-yes |
加重方式 | 2 |
typedef struct frameHead
{ //bits //说明
unsigned int SyncWord; // 11 // 同步信息
unsigned int Version; // 2 // 版本
unsigned int Layer; // 2 // 层
unsigned int ErrorProtection; // 1 // CRC 校正
unsigned int BitRateIndex; // 4 // 位率索引
unsigned int SampleRateIndex; // 2 // 采样率索引
unsigned int Padding; // 1 // 空白字
unsigned int Extension; // 1 // 私有标志
unsigned int ChannelMode; // 2 // 立体声模式
unsigned int ModeExtension; // 2 // 保留
unsigned int CopyRight; // 1 // 版权标志
unsigned int Original; // 1 // 原始媒体
unsigned int Emphasis; // 2 // 强调方式
}FrameHeader;
比特率表
MPEG 1
bitrate index | lay I | layer II | layer III |
---|---|---|---|
0000 | free | free | free |
0001 | 32 | 32 | 32 |
0010 | 64 | 48 | 40 |
0011 | 96 | 56 | 48 |
0100 | 128 | 64 | 56 |
0101 | 160 | 80 | 64 |
0110 | 192 | 96 | 80 |
0111 | 224 | 112 | 96 |
1000 | 256 | 128 | 112 |
1001 | 288 | 160 | 128 |
1010 | 320 | 192 | 160 |
1011 | 352 | 224 | 192 |
1100 | 384 | 256 | 224 |
1101 | 416 | 320 | 256 |
1110 | 448 | 384 | 320 |
1111 | - | - | - |
MPEG 2
bitrate index | lay I | lay II & III |
---|---|---|
0000 | free | free |
0001 | 32 | 8 |
0010 | 48 | 16 |
0011 | 56 | 24 |
0100 | 64 | 32 |
0101 | 80 | 40 |
0110 | 96 | 48 |
0111 | 112 | 56 |
1000 | 128 | 64 |
1001 | 144 | 80 |
1010 | 160 | 96 |
1011 | 176 | 112 |
1100 | 192 | 128 |
1101 | 224 | 144 |
1110 | 256 | 160 |
1111 | - | - |
每帧采样数表
MPEG 1 | MPEG 2 | |
---|---|---|
Layer I | 384 | 384 |
Layer II | 1152 | 1152 |
Layer III | 1152 | 576 |
立体声模式的表忘记了,等我查到资料再补
今晚就到这里吧
2019-7-19