mp3文件解码- 缩放因子

缩放因子信息

边信息之后,就是缩放因子区(也称增益因子),紧跟着的是哈夫曼编码区。
帧头+边信息+缩放因子+哈夫曼码 形成一个数据帧,这个存储的数据帧,包含若干个pcm采样的哈夫曼码,解码出来的音频帧,每帧每声道需要576个值。

长块

这576个值代表576条频率线上的值,它们是时域中576个pcm值经过时频变换的结果。这576条频率线从低到高分为32个子带,每个子带包含18条频率线。解出来的这576个值是整数,需要进行反量化变成浮点数,反量化的过程并不是一条频率线为单位进行的,而是若干条频率线为单位进行的,这若干条频率线组成了频带(band),叫做缩放因子频带(scalefactorband),顾名思义,在一个缩放因子频带内的频率线在反量化时共用缩放因子。

scalefactor bandwidth of bandindex of startindex of end
0403
1447
24811
341215
441619
542023
662429
763035
883643
984451
10105261
11126273
12167489
132090109
1424110133
1528134161
1634162195
1742196237
1850238287
1954288341
2076342417
短块

这576个值代表192条频率线上的值,这192条频率线从低到高分为32个子带,每个子带包含6条频率线。每一条频率线上有三个值,分别属于三个窗(window0、window1和window2)。这192条频率线被划分为若干缩放因子频带。
短块 44.1

scalefactor bandwidth of bandindex of startindex of end
0403
1447
24811
341215
461621
582229
6103039
7124051
8145265
9186683
102284105
1130106135
混块

在这种情况下,按先后顺序解出来的576个值分为两部分,第一部分(前36个值)是长块部分,故它们代表36条频率线,这36条频率线划分为8个缩放因子频带;
第二部分(后540个值)是短块部分,它们代表180个频率线,每个频率线上有三个值,分别属于window0、window1和window2,这180个频率线划分为9个缩放因子频带。
以上三个块缩放因子带的描述引用:博文

在44.1K采样率下,长块需要解码21个缩放因子,短块需要解码12 * 3个缩放因子,混快需要解码 8+ 9*3个缩放因子。缩放因子的长度是不固定的,需要查表获得slen。

//长块slen1表示0-10缩放因子带的长度,slen2表示11-20的缩放因子带的因子长度
//短块slen1表示0-5缩放因子带的因子长度,slen2表示6-11缩放因子带的因子长度
//混快长块部分sfb0-sfb7和短块部分sfb3-sfb5所用到的缩放因子长度相同,为slen1,短块部分sfb6-sfb11所用用到的缩放因子长度相同,为slen2 
int slen[2][16]={
	{0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4},
	{0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3}
};

int scalefac_l[GR][CH][lSFB];	//长块缩放因子
int scalefac_s[GR][CH][SSFB][WINDOW];	//短块缩放因子

slen[][]中,第一个index =0 取长块slen, =1,取短块 slen。第二个index为边信息中的ScalefacCompress。取出对应N个slen bits放到scalefac_l和scalefac_s中,混块前8个放在scalefac_l,后面的放在scalefac_s[][][6+i][]。

长块的粒度1可能会使用粒度0(gr)的缩放因子,边信息共有的4个缩放因子选择信息(Scfsi)指示了粒度1是否共用粒度0的缩放因子,如果共用,则无需从码流中提取对应的缩放因子。
在边信息解码中,存放着每声道4bits的缩放因子选择信息,每一个bit指示了粒度1若干个缩放因子带共用粒度0的缩放因子。

scfsi_bandscalefactor bands (see Annex B,Table3-B.8)
00,1,2,3,4,5
16,7,8,9,10
211…15
316…20

若block_type的值为0、1或3:slen1表示缩放带0-10的缩放因子的长度;slen2表示缩放带11-20的缩放因子的长度。//长块
若block_type的值为2且mixed_block_flag的值为0:slen1表示缩放带0-5的缩放因子的长度:slen2表示表示缩放带6-11的缩放因子的长度。//短块
若block_type的值为2且mixed_block_flag的值为1:由于mixed_block_flag的值为1,所以该粒度由长窗和短窗混合组成,//混快
对于长窗部分,slen1表示0-7缩放带的缩放因子的长度;
对于短窗部分,slen1表示3-5缩放带的缩放因子的长度,slen2表示缩放带6-11的缩放因子的长度。
–《MP3软件解码器的研究与实现》李箐箐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值