您的位置:首页 > 其它

MP3文件结构及编解码流程

2016-01-01 19:28 344 查看
AGENDA

* MP3简介

* MP3文件结构

——Tag_v2(ID3v2)标签帧

——数据帧

——Tag_v1(ID3v1)标签帧

*MP3编解码流程

*MP3文件的播放流程

一、MP3简介:

MP3全称MPEG 1 audio layer 3,其中MPEG(Moving Picture ExpertsGroup)标准包括视频和音频标准,其中音频标准已制定出 MPEG-1、MPEG-2、MPEG-2AAC和MPEG-4。

MPEG-1和MPEG-2标准使用同一个音频编码解码族—— Layer1、Layer2、Layer3。 它根据压缩质量和编码复杂程度进行划分的,分别对应MP1、MP2、MP3这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG 音频编码的层次越高,编码器越复杂,压缩率也越高

MPEG-2一个新特点是采用低采样率扩展降低数据流量,另一特点是多通道扩展,将主声道增加为5个。

MPEG Audio Layer1、Layer2、Layer3三个层使用相同的滤波器组、位流结构和头信息,采样频率为32KHz、44.1KHz、48KHz。

Layer 1是为数字压缩磁带DCC(Digital CompactCassette)设计的,数据流384kbps;压缩率4:1;

Layer 2在复杂性和性能间作了权衡,数据流量下降到256kbps-192kbps;压缩率6:1-8:1;

Layer 3一开始就为低数据流量而设计,数据流量在128kbps-112kbps,压缩率高达10:1-12:1;

Layer 3增加了MDCT变换,使其频率分辨能力是Layer 2的18倍,Layer 3还使用了与MPEGVideo类似的平均信息量编码(Entropy Coding),减少了冗余信息。MP3绝大部分使用的是MPEG-1标准。

MP3的音频质量取决于它的Bitrate和Samplingfrequency,以及编码器质量。MP3的典型速度介于每秒128到320kb之间(此处有问题)。采样频率也有32,44.1,48kHz三种频率,比较常见的是采用CD采样频率——44.1kHz。常用的编码器是LAME,它完全遵循LGPL的MP3编码器,有着良好的速度和音质。

MP3对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3采取了“感官编码技术”,即它丢掉脉冲编码调制(PCM)音频数据中对人类听觉不重要得数据,从而达到了较高的压缩比,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。

二.整个MP3 文件结构:

MP3文件是由帧(frame)构成,帧是MP3文件的最小组成单位。每帧都包含帧头,并可以计算帧的长度。根据帧的性质不同,文件主要分为三个部分,TAG_V2(ID3V2)标签帧,数据帧和TAG_V1(ID3V1)标签帧。并非每个MP3文件都有ID3v2,但是数据帧和ID3v1帧是必须的。ID3v2在文件头,以字符串“ID3”为标志,包含了演唱者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。ID3v1在文件结尾,以字符串“TAG”为标记,其长度是固定的128个字节,包含了演唱者、歌名、专辑、年份等信息。

1. ID3V2 标签

ID3V2到现在一共有四个版本,但流行的播放软件一般只支持第三版,既ID3V2.3。每个ID3V2.3的标签都有一个标签头和若干个标签帧或一个扩展标签头组成。关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标签头并不是必要的,但每个标签至少要有一个标签帧。标签头和标签帧一起顺序存放在MP3 文件的首部。

标签头

长度为10个字节,位于文件首部,其数据结构如下:

char Header[3];

charVer;

char Revision;

char Flag;

char Size[4]; 标签大小为四个字节,但每个字节只用低7位,最高位不使用,恒为0,其格式如下:

0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx

——标签帧

每个标签帧都有一个10字节的帧头和至少一个字节的不固定长度的内容组成。它们是顺序存放在文件中,由各自特定的标签帧头来标记帧的开始。其帧的结构如下:

char FrameID[4];

char Size[4];

char Flags[2];

常用帧标识:

TIT2:标题

TPE1:作者

TALB:专辑

TRCK: 音轨,格式:N/M,N表示专辑中第几首,M为专辑中歌曲总数

TYER:年份

TCON:类型

COMM:备注,格式:“eng/0备注内容”,其中eng表示所使用的语言

帧大小为四个字节所表示的整数大小。

2.数据帧

数据帧往往有多个,至于有多少,由文件大小和帧大小来决定。每个帧都有一个帧头HEADER,长度是4BYTE(32bit),帧头后面可能有两个字节的CRC 校验,这两个字节的是否存在决定于HEADER信息的第16bit, 为0 则帧头后面无校验,为1 则有校验,校验值长度为2 个字节,紧跟在HEADER 后面,接着就是帧的实体数据,也就是MAIN_DATA了,格式如下:

HEADER

CRC(free)

MAIN_DATA

4BYTE

0 OR 2 BYTE

----帧头HEADER的详细结构为:

表1 MP3帧头字节使用说明
名称
位长
说 明
同步信息11第1、2字节所有位均为1,第1字节恒为FF。
版本200-MPEG2.5 01-未定义 10-MPEG2 11-MPEG 1
200-未定义 01-Layer 3 10-Layer2 11-Layer 1
CRC校验10-校验 1-不校验
位率4第3字节取样率,单位是kbps,例如采用MPEG-1 Layer 3,64kbps是,值为0101。

bitsV1,L1V1,L2V1,L3V2,L1V2,L2V2,L3
0000freefreefreefreefreefree
000132323232(32)32(8)8 (8)
001064484064(48)48(16)16 (16)
001196564896(56)56(24)24 (24)
01001286456128(64)64(32)32 (32)
01011608064160(80)80(40)64 (40)
01101929680192(96)96(48)80 (48)
011122411296224(112)112(56)56 (56)
1000256128112256(128)128(64)64 (64)
1001288160128288(144)160(80)128 (80)
1010320192160320(160)192(96)160 (96)
1011352224192352(176)224(112)112 (112)
1100384256224384(192)256(128)128 (128)
1101416320256416(224)320(144)256 (144)
1110448384320448(256)384(160)320 (160)
1111badbadbadbadbadbad
V1 - MPEG1 V2 - MPEG 2and MPEG 2.5

L1 - Layer1 L2 - Layer2 L3 - Layer 3

"free" 表示位率可变 "bad" 表示不允许值

采样频率2采样频率,对于MPEG-1: 00-44.1kHz 01-48kHz 10-32kHz 11-未定义

对于MPEG-2: 00-22.05kHz 01-24kHz 10-16kHz 11-未定义

对于MPEG-2.5: 00-11.025kHz 01-12kHz 10-8kHz 11-未定义

帧长调节1用来调整文件头长度,0-无需调整,1-调整,具体调整计算方法见下文。
保留字1没有使用。
声道模式2第4字节表示声道, 00-立体声Stereo 01-JointStereo 10-双声道 11-单声道
扩充模式2当声道模式为01是才使用。

Value强度立体声MS立体声
00offoff
01onoff
10offon
11onon
版权1文件是否合法,0-不合法 1-合法
原版标志1是否原版, 0-非原版 1-原版
强调方式2用于声音经降噪压缩后再补偿的分类,很少用到,今后也可能不会用。

00-未定义 01-50/15ms 10-保留 11-CCITT J.17

2. MAIN_DATAMAIN_DATA部分长度是否变化决定于 FRAMEHEADER 的 bitrate 是否变化,一首 MP3 歌曲,它有三个版
本:96Kbps(96千比特位每秒)、128Kbps 和 192Kbps。Kbps(比特位速率),表明了音乐每秒的数据量,

Kbps值越高,音质越好,文件也越大,MP3 标准规定,不变的 bitrate 的 MP3 文件称作 CBR,大多数 MP3

文件都是 CBR 的,而变化的bitrate 的 MP3 文件称作 VBR,每个 FRAME 的长度都可能是变化的。下面是 CBR

和 VBR的不同点:

1)CBR:固定位率的FRAME 的大小是固定的(公式如上所述),只要知道文件总长度,和帧长即可由播放每帧需 26ms 计算得出 mp3播放的总时间,也可通过计数帧的个数控制快进、快退慢放等操作。注:有些时候,并不是所有的帧都是等长的,有的帧可能多一个或几个字节。

2)VBR:VBR 是XING 公司推出的算法,所以在 MP3 的 FRAME 里会有“XING"这个关键字(现在很多流行的

小软件也可以进行 VBR压缩,它们是否遵守这个约定,那就不得而知了),它存放在 MP3 文件中的第一个有效 FRAME 里,它标识了这个 MP3 文件是VBR 的。同时第一个 FRAME 里存放了 MP3 文件的 FRAME 的总个数,这就很容易获得了播放总时间,同时还有 100个字节存放了播放总时间的 100 个时间分段的 FRAME 的 INDEX,假设 4 分钟的 MP3 歌曲,240S,分成 100段,每两个相邻 INDEX 的时间差就是 2.4S,所以通过这个 INDEX,只要前后处理少数的FRAME,就能快速找出我们需要快进的
FRAME 头。

表2 VBR文件第一帧结构
字节说 明
1-4与CBR相同的标准声音帧头
5-40存放VBR文件标识“Xing”(58 69 6E67),此标识具体位置视采用的MPEG标准和声道模式而定。标识的前后字节没有使用。
36-39MPEG-1和非单声道(常见)
21-24MPEG-1和单声道
21-24MPEG-2和非单声道
13-16MPEG-2和单声道
41-44标志,说明是否存储了帧数、文件长度、目录表和VBR规模信息,如果存储了,则01 02 04 08。
45-48帧数(包括第一帧)
49-52文件长度
53-152目录表,用来按时间进行字节定位。
153-156VBR规模,用于位率变动
除了INDEX,还有其他的一些参数,这被称为Zone A,传统Xing VBR标签数据,共120个字节。在二进制文本编辑器里我们还可看到一个字符串“LAME”,并且后面清楚地跟着版本号。这就是20个字节的ZoneB初始LAME信息,表示该文件是用LAME编码技术。

接下来一直到该帧结束就是Zone C-LAME标签。

长度由帧头计算得出 :

1)每帧的播放时间:无论帧长是多少,每帧的播放时间都是26ms;

2)数据帧大小: Size = (((MpegVersion == MPEG1 ? 144 : 72) * Bitrate) /SamplingRate) + PaddingBit

例如: Bitrate = 128000, aSamplingRate =44100, and PaddingBit = 1

Size = (144 * 128000) / 44100 + 1 = 417 bytes

3.ID3V1

其数据结构如下:

charHeader[3];

charTitle[30];

charArtist[30];

charAlbum[30];

charYear[4];

charComment[28];

charreserve;

chartrack;

charGenre;

其实,关于最后31个字节还存在另外一个版本,就是30个字节的Comment和一个字节的Genre.

有了上述的这些信息,我们就可以自己写代码,从MP3文件中抓取信息以及修改文件名了。但是,如果真的想写一个播放软件,还是需要读它的数据帧,并进行解码。

三.MP3编码与解码流程

MP3音频压缩包含编码和解码两个部分。编码是将WAV文件中的数据转换成高压缩率的位流形式,解码是接受位流并将其重建到WAV文件中。MP3采用了感知音频编码(Perceptual AudioCoding)这一失真算法。人耳感受声音的频率范围是20Hz-20kHz,MP3截掉了大量的冗余信号和无关的信号,编码器通过混合滤波器组将原始声音变换到频率域,利用心理声学模型,估算刚好能被察觉到的噪声水平,再经过量化,转换成Huffman编码,形成MP3位流。解码器要简单得多,它的任务是从编码后的谱线成分中,经过反量化和逆变换,提取出声音信号。

MP3的解码总体上可分为9个过程:比特流分析,霍夫曼编码,逆量化处理,立体声处理,频谱重排列,抗锯齿处理,IMDCT变换,子带合成,PCM输出。

简要描述一下MP3的压缩流程:声音是一个模拟信号,对声音进行采样,量化,编码将得到PCM数据。PCM又称为脉冲调制数据,是计算机可以播放的最原始数据,也是mp3压缩的源,为了达到更大的数据压缩率,MPEG表针采用了子带编码技将PCM数据分成32个子带,每个子带都是独立编码的,然后将数据变换到频域下分析,MPEG采用的是改进的离散余弦变换,也可以使用傅里叶变换,再下来为了重建立体声进行了频域按特定规则的排列,随后立体声处理,处理后的数据按照协议定义进行量化。为了达到更大的压缩,再进行霍夫曼编码。最后将一些系数与主信息融合形成MP3文件。

解码是编码的反过程大概如下:

所谓比特流分解是指将mp3文件以二进制方式打开,然后根据其压缩格式的定义,依次从这个mp3文件中取出头信息,边信息,比例因子信息等。这些信息都是后面的解码过程中需要的。霍夫曼编码是一种无损压缩编码,属于熵编码[平均信息量编码(EntropyCoding)]。Mp3的解码可以通过公式实时进行数据的解码,但往往采用的是通过查表法实现解码(节省了CPU时间资源)。

MP3的技术亮点--MDCT (修正的离散余弦变换):

修正的离散余弦变换(MDCT)是指将一组时域数据转换成频域数据,以得知时域变化情况。MDCT是对DCT算法的改进。早期的快速算法是快速付立叶变换(FFT),但FFT有复数运算,MDCT都是实数运算,便于编程。

在 压缩音频数据时,先将原始声音数据分成固定的分块,然后做顺向MDCT(ForwardMDCT)将每块的值转换为512个MDCT系数,解压时,经反向MDCT(InverseMDCT)将512个系数还原成原始声音数据,前后的原始声音数据是不一致的,因为在压缩过程中,去掉了冗余和不相关数据。FMDCT变换公式为:

k=0,1,…,N/2-1

式中N是转换视窗长度,即每块样本点数,N=8,16,…,1024,2048。

n0=(N/2+1)/2,X(n)为时域值,X(k)为频域值。若N取1024点,则转换成512个频域值。

IMDCT变换公式为:

n=0,1,…,N-1

MDCT本身并不进行数据压缩,它只是把信号映射到另一个域,量化才使数据得到压缩。在对量化后的变换样值进行比特分配时要考虑使整个量化块最小,这就成为有损压缩了。

四、MP3文件的播放流程

一个完整MP3播放机要分几个部分:中央处理器、解码器、存储设备、主机通讯端口、音频DAC和功放、显示界面和控制键。其中中央处理器和解码器是整个系统的核心。这里的中央处理器我们通常称为MCU(单片微处理器),简称单片机。它运行MP3的整个控制程序,也称为fireware(或者固件程序)。控制MP3的各个部件的工作:从存储设备读取数据送到解码器解码;与主机连接时完成与主机的数据交换;接收控制按键的操作,显示系统运行状态等任务。解码器是芯片中的一个硬件模块,或者说是硬件解码(有的MP3播放机是软件解码,由高速中央处理器完成)。它可以直接完成各种格式MP3数据流的解码操作,并输出PCM或I2S格式的数字音频信号。

存储设备是MP3播放机的重要部分,通常的MP3随身听都是采用半导体存储器(FLASHMEMORY)或者硬盘(HDD)作为储存设备的。它通过接受储存主机通讯端口传来的数据(通常以文件形式),回放的时候MCU读取存储器中的数据并送到解码器。数据的存储是要有一定格式的,众所周知,PC管理磁盘数据是以文件形式,MP3也不例外,最常用的办法就是直接利用PC的文件系统来管理存储器,微软操作系统采用的是FAT文件系统,这也是最广泛使用的一种。播放机其中一个任务就是要实现FAT文件系统,即可以从FAT文件系统的磁盘中按文件名访问并读出其中的数据。

主机通讯端口是MP3播放机与PC机交换数据的途径,PC通过该端口操作MP3播放机存储设备中的数据,拷贝、删除、复制文件等操作。目前最广泛使用的是USB总线,并且遵循微软定义的大容量移动存储协议规范,将MP3播放机作为主机的一个移动存储设备。这里需要遵循几个规范:USB通信协议、大容量移动存储器规范和SCSI协议。

音频DAC是将数字音频信号转换成模拟音频信号,以推动耳机、功放等模拟音响设备。这里要介绍一下数字音频信号。数字音频信号是相对模拟音频信号来说的。我们知道声音的本质是波,人说能听到的声音的频率在20Hz到20kHz之间,称为声波。模拟信号对波的表示是连续的函数特性,基本的原理是不同频率和振幅的波叠加在一起。数字音频信号是对模拟信号的一种量化,典型方法是对时间坐标按相等的时间间隔做采样,对振幅做量化。单位时间内的采样次数称为采样频率。这样一段声波就可以被数字化后变成一串数值,每个数值对应相应抽样点的振幅值,按顺序将这些数字排列起来就是数字音频信号了。这是ADC(模拟-数字转换)过程,DAC(数字-模拟转换)过程相反,将连续的数字按采样时候的频率顺序转换成对应的电压。MP3解码器解码后的信息属于数字音频信号(数字音频信号有不同的格式,最常用的是PCM和I2S两种),需要通过DAC转换器变成模拟信号才能推动功放,被人耳所识别。

MP3播放机的显示设备通常采用LCD或者OLED等来显示系统的工作状态。控制键盘通常是按钮开关。键盘和显示设备合起来构成了MP3播放机的人机交互界面。

MP3播放机的软件结构跟硬件是相对应的,即每一个硬件部分都有相应的软件代码,这是因为大多数的硬件部分都是数字可编程控制的。

总结一下,最简化的MP3的工作原理我们可以概括如下:首先将MP3歌曲文件从内存中取出并读取存储器上的信号→到解码芯片对信号进行解码→通过数模转换器将解出来的数字信号转换成模拟信号→再把转换后的模拟音频放大→低通滤波后到耳机输出口,输出后就是我们所听到的音乐了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: