文档介绍:MP3功能的设计与实现
MP3解码功能的实现
MP3文件帧头格式:
MP3文件的基本组成单位为帧,每一帧是由帧头和数据构成的相对独立的部分,帧的长度不是固定的,其随位率、采样率和填充位相关,一般为几十到几百字节。帧头由帧的前四个字节(32bits)构成,包含此帧播放时的主要参数,如随位率、采样率等。帧头的前11位为同步码,其值全为‘1’,在MP3文件中可根据此特征来找出每一帧的起始位置,然后读出整个帧头进行检查,因为帧的同步码可能在任何二进制文件内出现,所以并不能只依据同步码来判断一帧的开始,如果帧头内包含的数据符合MPEG LayerIII的定义则表示此32bits为正确的帧头,否则继续对MP3文件进行查找,直至发现正确的帧头,并依据帧头的系统信息来对解码器进行相应的配置,以便对帧内的音乐数据相进行正确的解码。[14]:
31                           24 23                            16 15                           8   7       0
AAAAAAAA D EEEEFFGH IIJJKLMM
MPEG 位
说明
A –同步码
位21-31。前十一位总为 1111 1111 11
B - MPEG ID
位19-20。说明见表1
C - Layer
位17-18。说明见表2
D –校验
位16 。0 数据包含CRC16校验。 1 无CRC16校验
E –位率
位12-15:。说明见表4
F-采样频率
位10-11。说明见表5
G –填充位
位 9。0 帧内无填充位,1帧内有填充位
H –私有
位8。0 非私有, 1 私有
I –模式
位6-7。 00 立体声, 01 联合立体声, 10 双声道, 11 单声道
J-模式扩展
位4-5。只用与联合立体声模式
K –版权
位3。 0 无版权,1 有版权
L –原创
位2。 0 非原创,1 原创
M –加重音调
位1-0。很少使用
DEEEEFFGHIIJJKLMM表示,十一个‘A’表示帧头的同步码,其值为**********B。BB的值为帧的MPEG版本ID号,‘00’为MPEG Version ,‘10’为MPEG Version ,‘11’为MPEG Version ,‘01’为保留值,其中MPEG Version 。如解码器不支持MPEG Version ,则可把前十二位AAAAAAAAAAAB看作同步码,用第十二位来区分版本号,即‘0’为Version ,‘1’为Version ,因AT89C51SND1的解码器不支持Version ,为MPEG的LayerID号,如其值为‘01’则表示LayerIII,‘10’表示LayerII,‘11’表示LayerI,‘00’为保留值。
EEEE为位率(Bitrate)ID号,位率又称码流,是指在音频采样或播放时以位为单位的每通道每秒所需的数据量,MP3位率的典型值为64Kbit/S。采样频率ID、
[14]:
位率ID
MPEG-1
Layer-3
MPEG-2
Layer-3
MPEG-
Layer-3
0000
自由格式
自由格式
自由格式
0001
32
8
8*
0010
40
16
16*
0011
48
24
24
0100
56*
32
32
0101
64*
64*
64*
0110
80*
80
80
0111
96*
56
56
1000
112*
64
64
1001
128*
128
128
1010
160*
160
160
1011
192*
112
112
1100
224*
128
128
1101
256*
256
256
1110
320*
320
320
1111
不允许
不允许
不允许
MPEG所支持的标准位率为位率ID号0010至1110所代表的值,自由格式为自定义值,即其位率为非标准值,由用户自己的应用程序所支持。在本MP3播放系统的实现中不支持自由格式。
采样频率指每通道每秒对音频进行采样的次数,MPEG1支持的频率为44100、48000和32000三种,其