您的位置:首页 > 其它

MP3文件格式及编解码流程

2016-10-26 09:17 344 查看
一、MP3简介:

MP3全称MPEG 1 audio layer 3,其中MPEG(Moving Picture Experts Group)标准包括视频和音频

标准,其中音频标准已制定出 MPEG-1、MPEG-2、MPEG-2 AAC和MPEG-4。

MPEG-1和MPEG-2标准使用同一个音频编码解码族—— Layer1、Layer 2、Layer3。 它根据压缩质量

和编码复杂程度进行划分的,分别对应MP1、MP2、MP3 这三种声音文件,并根据不同的用途,使用不同层

次的编码。MPEG 音频编码的层次越高,编码器越复杂,压缩率也越高

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

MPEG Audio Layer 1、Layer2、Layer3三个层使用相同的滤波器组、位流结构和头信息,采样频率为

32KHz、44.1KHz、48KHz。

Layer 1是为数字压缩磁带DCC(Digital Compact Cassette)设计的,数据流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还使用了与MPEG Video

类似的平均信息量编码(Entropy Coding),减少了冗余信息。MP3绝大部分使用的是MPEG-1标准。

MP3的音频质量取决于它的Bitrate和Sampling frequency,以及编码器质量。MP3的典型速度介于


每秒128到320kb之间(此处有问题)。采样频率也有32,44.1,48 kHz三种频率,比较常见的是采用CD

采样频率——44.1kHz。常用的编码器是LAME,它完全遵循LGPL的MP3编码器,有着良好的速度和音质。

MP3 对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3采取了“感官编码技术”,即它

丢掉脉冲编码调制(PCM)音频数据中对人类听觉不重要得数据,从而达到了较高的压缩比,即编码时先对

音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后

形成具有较高压缩比的MP3 文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。

二.整个MP3 文件结构:

MP3文件是由帧(frame)构成,帧是MP3文件的最小组成单位。每帧都包含帧头,并可以计算帧的长度。


并非每个MP3文件都有ID3v2,但是数据帧和ID3v1帧是必须的。ID3v2在文件头,以字符串“ID3”为标志,包含了演唱者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。ID3v1在文件结尾,以字符串“TAG”为标记,其长度是固定的128个字节,包含了演唱者、歌名、专辑、年份等信息。

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


标签头

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

char Header[3]; /* 字符串 “ID3” */

char Ver; /* 版本号ID3V2.3 就记录3 */

char Revision; /* 副版本号此版本记录为0 */

char Flag; /* 存放标志的字节,这个版本只定义了三位,很少用到,可以忽略 */

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

0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx

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


char FrameID[4]; /用四个字符标识一个帧,说明其内容 /

char Size[4]; /* 帧内容的大小,不包括帧头,不得小于1 */

char Flags[2]; /* 存放标志,只定义了6 位,此处不再说明 */

常用帧标识:

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

4 BYTE

0 OR 2 BYTE

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



-----MAIN_DATA:

MAIN_DATA 部分长度是否变化决定于HEADER 的bitrate是否变化,一首MP3 歌曲,它有三个版本:96Kbps(96 千比特位每秒)、128Kbps 和192Kbps。Kbps (比特位速率), 表明了音乐每秒的数据量,Kbps 值越高,音质越好,文件也越大,MP3标准规定,不变的bitrate 的MP3 文件称作CBR,大多数MP3 文件都是CBR 的,而变化的bitrate 的MP3 文件称作VBR, 每个 的长度都可能是变化的。

———— C,LAME标签帧

当你真的打开一个MP3文件的时候,你会发现第一帧并不是真正的数据帧,而是LAME编码的标志帧。

这里牵涉到两个概念:CBR和VBR。它还存放了MP3文件里帧的总个数,和100个字节的播放总时间分段的帧的INDEX,还有其他一些参数;

1)CBR:表示比特率不变,也就是每帧的长度是一致的,它以字符串“INFO”为标记。只要知道文件总长度

和帧长,即可由播放每帧需26ms 计算得出mp3 播放的总时间,也可通过计数帧的个数控制快进、快退

慢放等操作。

2)VBR:VBR是 Variable BitRate的简称,也就是每帧的比特率和帧的长度是变化的,是XING 公司推出的

算法,所以在MP3 的 里会有“XING”这个关键字(现在很多流行的小软件也可以进行VBR 压缩,它们

是否遵守这个约定,那就不得而知了),它存放在MP3 文件中的第一个有效帧里,它标识了这个MP3

文件是VBR 的。同时第一个 里存放了MP3 文件的 帧的总个数,这就很容易获得了播放总时间,同时

还有100 个字节存放了播放总时间的100 个时间分段的帧的INDEX,假设4 分钟的MP3 歌曲,

240S, 分成100 段,每两个相邻INDEX 的时间差就是2.4S, 所以通过这个INDEX,只要前后处理少

数的,就能快速找出我们需要快进的 头。除了INDEX,还有其他的一些参数,这被称为Zone A,传统

Xing VBR标签数据,共120个字节。 在二进制文本编辑器里我们还可看到一个字符串“LAME”,并且

后面清楚地跟着版本号。这就是20个字节的Zone B初始LAME信息,表示该文件是用LAME编码技术。

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

长度由帧头计算得出 :

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

2)数据帧大小:

Size = (((MpegVersion == MPEG1 ? 144 : 72) * Bitrate) / SamplingRate) + PaddingBit

例如: Bitrate = 128000, a SamplingRate =44100, and PaddingBit = 1

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

3.ID3V1


其数据结构如下:

char Header[3]; /* 标签头必须是”TAG”否则认为没有标签 */

char Title[30]; /* 标题 */

char Artist[30]; /* 作者 */

char Album[30]; /* 专集 */

char Year[4]; /* 出品年代 */

char Comment[28]; /* 备注 */

char reserve; /* 保留 */

char track; /* 音轨 */

char Genre; /* 类型 */

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

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

3 MP3编码与解码流程

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


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

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

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

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

四、MP3文件的播放流程

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

存储设备是MP3播放机的重要部分,通常的MP3随身听都是采用半导体存储器(FLASH MEMORY)或者硬盘
(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 编码