mp3文件解码- 帧头结构

帧头

音频区结构

除去头尾的ID3之外,剩下的就是音频数据,这部分数据由跟解码相关的信息及编码组成,整个数据区被分成一帧一帧,每一帧的结构都包括四字节的帧头,跟着的可能是两字节的CRC,之后是边信息,边信息的长度跟版本和层级有关系,并跟单声道和双声道有关。

帧头CRC边信息缩放因子哈夫曼码
长度4字节0字节或2字节下文说明
说明四个字节被分成13个字段,每个字段占不同的bitCRC是非必要的,帧头有专门的bit指明这段是否存在音频数据编码的时候被分成两个声道,每个声道被分成2个粒度,边信息存放着跟声道,粒度解码的信息帧头和边信息之后,是数据区,前一部分存放的时候缩放因子,后一部分存放的是哈夫曼编码哈夫曼码被分成3个区,第一部分一个码字(hcod)解码得到2个值,称为bigvalue区,第二部分一个码字解码得到4个值,第三部分称为0值区,不需要解码

帧头

注意,以下的大小是以bit为单位的,不是字节,一个字节有8个bit

len说明
同步字12有资料说同步字是11bit,1个bit用来做版本index,但是版本index的2bit会指向mpeg2.5版本,这据说是一个民间版本,所有本文采用官方的12bit
版本index11是mpeg1.0, 0是mpeg2.0
层index2lay = 4 - index
CRC段index10=yes, 1=no 这bit指明帧头之后,是否接了2字节的CRC校验
比特率index4bit per second 比特率索引,具体比特率需要查表
采样率index2采样率每秒有多少次样本的采集,一般有44.1k(cd音质)48k等
填充空白字index1计算每一帧的字节数的时候,如果不是整数,会有填充,这个索引
私有标识1
声道模式index20-立体声 1-联合立体声 2-双声道 3-单声道
联合立体声模式index2如果声道模式是联合立体声,这个index指明联合立体声的模式
版本保护10-no 1-yes
原版标志10-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 indexlay Ilayer IIlayer III
0000freefreefree
0001323232
0010644840
0011965648
01001286456
01011608064
01101929680
011122411296
1000256128112
1001288160128
1010320192160
1011352224192
1100384256224
1101416320256
1110448384320
1111---

MPEG 2

bitrate indexlay Ilay II & III
0000freefree
0001328
00104816
00115624
01006432
01018040
01109648
011111256
100012864
100114480
101016096
1011176112
1100192128
1101224144
1110256160
1111--

每帧采样数表

MPEG 1MPEG 2
Layer I384384
Layer II11521152
Layer III1152576

立体声模式的表忘记了,等我查到资料再补
今晚就到这里吧
2019-7-19

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值