Mp3原理及文件格式解析(from)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:

1.引言

文件压缩技术的日新月异使得MP3成为时下最烫手的音乐格式,优质的音乐随着0与1的排列迅 速散布到世界各地,撼动人心。何谓MP3?MP3的全称是MPEG Audio Layer 3,它是一种高效的计算机音频编码方案,它以较大的压缩比将音频文件转换成较小的扩展名为.MP3的文件,基本保持原文件的音质。MP3是 ISO/MPEG标准的一部分,ISO/MPEG标准描述了使用高性能感知编码方案的音频压缩,此标准一直在不断更新以满足“质高量小”的追求,现已形成 MPEG Layer 1、Layer 2、Layer 3三个音频编码解码方案。MPEG Layer 3压缩率可达1:10至1:12,1M的MP3文件可播放1分钟,而1分钟CD音质的WAV文件(44100Hz,16bit,双声道,60秒)要占用 10M空间,这样算来,一张650M的MP3光盘播放时间应在10小时以上,而同样容量的一张CD盘播放时间在70分钟左右。MP3的优势是CD难以比拟 的。

2 MP3原理浅析

2.1 MPEG Audio标准

MPEG(Moving Picture Experts Group)是ISO下的一个动态图象专家组,它制定的MPEG标准广泛应用于各种多媒体中。MPEG标准包括视频和音频标准,其中音频标准已制定出 MPEG-1、MPEG-2、MPEG-2 AAC和MPEG-4。

MPEG-1和MPEG-2标准使用同一个音频编码解码族—Layer1、2、3。 MPEG-2一个新特点是采用低采样率扩展降低数据流量,另一特点是多通道扩展,将主声道增加为5个。MPEG-2 AAC(MPEG-2 Advanced Audio Coding)标准是Fraunhofer IIS同AT&T公司于1997年推出的,旨在显著减少数据流量,MPEG-2 AAC采用的MDCT(Modified Discrete Cosine Transform)算法,采样率可在8KHz到96KHz之间,声道数可在1-48之间。

MPEG Audio Layer 1、2、3三个层使用相同的滤波器组、位流结构和头信息,采样频率为32KHz、44.1KHz或48KHz。Layer 1是为数字压缩磁带DCC(Digital Compact Cassette)设计的,数据流量为384kbps,Layer 2在复杂性和性能间作了权衡,数据流量下降到256kbps-192kbps。Layer 3一开始就为低数据流量而设计,数据流量在128kbps-112kbps,Layer 3增加了MDCT变换,使其频率分辨能力是Layer 2的18倍,Layer 3还使用了与MPEG Video类似的平均信息量编码(Entropy Coding),减少了冗余信息。MP3绝大部分使用的是MPEG-1标准。

2.2 音频压缩的目的

MP3格式始于80年代中期,德国Erlangen的Fraunhofer研究所致力于高质 量、低数据率的声音编码。让我们来看一个例子:你想对你喜欢的一首长约4分钟的歌曲采样,将其存储在磁盘上,以CD音质的WAV格式抽样,抽样率为 44.1kHz,即每秒钟接收44100个值,立体声,每次抽样数据为16位(2字节),则这首歌占的空间为:

44100x2声道x2字节x60秒x4分钟=40.4MB

如果从Internet上下载这首歌,假设传输率为56kbps,则下载时间为:

40.4x106x8/56x103x60=96分钟

即使是1M的宽带网也需5分钟以上,由此可见,音频压缩对减少音频数据的存储空间显得尤为重要。

2.3 MP3编码与解码

MP3音频压缩包含编码和解码两个部分。编码是将WAV文件中的数据转换成高压缩率的位流形式,解码是接受位流并将其重建到WAV文件中。

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

2.4 修正的离散余弦变换

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

在压缩音频数据时,先将原始声音数据分成固定的分块,然后做顺向MDCT(Forward MDCT)将每块的值转换为512个MDCT系数,解压时,经反向MDCT(Inverse MDCT)将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本身并不进行数据压缩,它只是把信号映射到另一个域,量化才使数据得到压缩。在对量化后的变换样值进行比特分配时要考虑使整个量化块最小,这就成为有损压缩了。

3 MP3文件格式分析

MP3文件数据由多个帧组成,帧是MP3文件最小组成单位。每个帧又由帧头、附加信息和声音数据组成。每个帧播放时间是0.026秒,其长度随位率的不同而不等。有些MP3文件末尾有些额外字节存放非声音数据的说明信息。MP3文件结构如图2所。

3.1 帧头格式

帧头长4字节,对于固定位率的MP3文件,所有帧的帧头格式一样其数据结构如下:

typedef FrameHeader{

unsigned int sync:11;//同步信息

unsigned int version:2;//版本

unsigned int layer:2;//层

unsigned int protection:1;// CRC校验

unsigned int bitrate:4;//位率

unsigned int frequency:2;//频率

unsigned int padding:1;//帧长调节

unsigned int private:1;//保留字

unsigned int mode:2;//声道模式

unsigned int mode extension:2;//扩充模式

unsigned int copyright:1;// 版权

unsigned int original:1;//原版标志

unsigned int emphasis:2;//强调模式

}HEADER, *LPHEADER;

帧头4字节使用说明见表1。

表1 MP3帧头字节使用说明

名称 长度(位) 说 明

同步

信息 11 第1、2字节 所有位均为1,第1字节恒为FF。

版本 2 00-MPEG 2.5 01-未定义

10-MPEG 2 11-MPEG 1

层 2 00-未定义 01-Layer 3

10-Layer 2 11-Layer 1

CRC

校验 1 0-校验 1-不校验

位率 4 第3字节 取样率,单位是kbps,例如采用MPEG-1 Layer 3,64kbps是,值为0101。

频率 2 采样频率,对于MPEG-1:

00-44.1kHz 01-48kHz

10-32kHz 11-未定义

帧长

调节 1 用来调整文件头长度,0-无需调整,1-调整,具体调整计算方法见下文。

保留字 1 没有使用。

声道

模式 2 第4字节 表示声道,

00-立体声 01-Joint Stereo

10-双声道 11-单声道

扩充

模式 2 当声道模式为01是才使用。

版权 1 文件是否合法,0-不合法 1-合法

原版

标志 1 是否原版, 0-非原版 1-原版

强调

方式 2 用于声音经降噪压缩后再补偿的分类,很少用到,今后也可能不会用。

00-未定义 01-50/15ms

10-保留 11-CCITT J.17

MP3帧长取决于位率和频率,计算公式为:

帧长= 144×bitrate∕frequency+padding

例如:位率为64kbps,频率为44.1kHz,padding为1时,帧长为210字节。帧头后面是可变长度的附加信息,对于标准的MP3文件来说,其长度是32字节,紧接其后的是压缩的声音数据,当解码器读到此处时就进行解码了。

对于固定位率(CBR,Constant Bitrate)的MP3文件,并不是所有的帧都是等长的,有的帧可能多一个或几个字节。还有一种可变位率(VBR, Variable Bitrate)的MP3文件,是为了使MP3文件长度最小同时又保证声音质量,与CBR文件相比,除了第一帧不同外,其余的都一样。VBR的第一帧不包 含声音数据,其长度是156个字节,用来存放标准的声音帧头(4字节)、VBR文件标识、帧数、文件字节数等信息,具体结构说明见表2。

表2 VBR文件第一帧结构

字 节 说 明

1-4 与CBR相同的标准声音帧头

5-40 存放VBR文件标识“Xing”(58 69 6E 67),此标识具体位置视采用的MPEG标准和声道模式而定。标识的前后字节没有使用。

36-39 MPEG-1和非单声道(常见)

21-24 MPEG-1和单声道

21-24 MPEG-2和非单声道

13-16 MPEG-2和单声道

41-44 标志,说明是否存储了帧数、文件长度、目录表和VBR规模信息,如果存储了,则01 02 04 08。

45-48 帧数(包括第一帧)

49-52 文件长度

53-152 目录表,用来按时间进行字节定位。

153-156 VBR规模,用于位率变动

3.2 ID3标准

MP3帧头中除了存储一些象private、copyright、original的简单音 乐说明信息以外,没有考虑存放歌名、作者、专辑名、年份等复杂信息,而这些信息在MP3应用中非常必要。1996年,FricKemp在“Studio 3”项目中提出了在MP3文件尾增加一块用于存放歌曲的说明信息,形成了ID3标准,至今已制定出ID3 V1.0,V1.1,V2.0,V2.3和V2.4标准。版本越高,记录的相关信息就越丰富详尽。

ID3 V1.0标准并不周全,存放的信息少,无法存放歌词,无法录入专辑封面、图片等。V2.0是一个相当完备的标准,但给编写软件带来困难,虽然赞成此格式的 人很多,在软件中真正实现的却极少。绝大多数MP3仍使用ID3 V1.0标准。此标准是将MP3文件尾的最后128个字节用来存放ID3信息,这128个字节使用说明见表3。

表3 ID3 V1.0文件尾说明

字节 长度

(字节) 说 明

1-3 3 存放“TAG”字符,表示ID3 V1.0标准,紧接其后的是歌曲信息。

4-33 30 歌名

34-63 30 作者

64-93 30 专辑名

94-97 4 年份

98-127 30 附注

128 1 MP3音乐类别,共147种。

3.3 文件实例

在VC++中打开一个名为test.mp3文件,其内容如下:

000000 FF FB 52 8C 00 00 01 49 09 C5 05 24 60 00 2A C1

000010 19 40 A6 00 00 05 96 41 34 18 20 80 08 26 48 29

000020 83 04 00 01 61 41 40 50 10 04 00 C1 21 41 50 64

……

0000D0 FE FF FB 52 8C 11 80 01 EE 90 65 6E 08 20 02 30

0000E0 32 0C CD C0 04 00 46 16 41 89 B8 01 00 08 36 48

0000F0 33 B7 00 00 01 02 FF FF FF F4 E1 2F FF FF FF FF

……

0001A0 DF FF FF FB 52 8C 12 00 01 FE 90 58 6E 09 A0 02

0001B0 33 B0 CA 85 E1 50 01 45 F6 19 61 BC 26 80 28 7C

0001C0 05 AC B4 20 28 94 FF FF FF FF FF FF FF FF FF FF

……

001390 7F FF FF FF FD 4E 00 54 41 47 54 45 53 54 00 00

0013A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

……

0013F0 00 00 00 00 04 19 14 03 00 00 00 00 00 00 00 00

001400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

001410 00 00 00 00 00 00 4E

该文件长度1416H(5.142K),帧头为:FF FB 52 8C,转换成二进制为:

11111111 11111011

01010010 10001100

对照表1可知,test.mp3帧头信息见表4。

表4 test.mp3文件帧头信息

名称 位值 说 明

同步信息 11111111111 第1字节恒为FF,11位均为1。

版本 11 MPEG 1

层 01 Layer 3

CRC校验 1 不校验

位率 0101 64kbps

频率 00 44.1kHz

帧长调节 1 调整,帧长是210字节。

保留字 0 没有使用。

声道模式 10 双声道

扩充模式 00 未使用。

版权 1 合法

原版标志 1 原版

强调方式 00 未定义

第1397H开始的三个字节是54 41 47,存放的是字符“TAG”,表示此文件有ID3 V1.0信息。

139AH开始的30个字节存放歌名,前4个非00字节是54 45 53 54,表示“TEST”;

13F4H开始的4个字节是04 19 14 03,存放年份“04/25/2003”;

最后1个字节是4E,表示音乐类别,代号为78,即“Rock&Roll”;

其它字节均为00,未存储信息。

4 结束语

声音作为一类重要的多媒体数据,人们总是在不断寻求更高效率的压缩方法和新的声音文件格式。 MP3文件中使用了MDCT变换,它是一种结构简单、易于编程的准最佳变换,,避免了最佳变换(K-L)难以求解协方差矩阵特征值及特征向量的困扰。通过 对MP3文件格式的分析,不难发现它的欠缺。MP3文件每个帧都有4字节的相同帧头,对于一个含有大量帧的MP3文件来说,需要一定的空间开销。ID3存 放音乐说明信息,帧头中的private、copyright等信息也是说明信息,音乐的说明信息有些零乱的感觉。

无论如何,MP3的发展势不可挡,MP3已成为公认的声音数据格式,MP3正与JPEG图像、PDF文档成为多媒体信息处理领域的热点。




本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/archive/2010/03/12/1684743.html,如需转载请自行联系原作者

相关文章
|
9天前
|
存储 缓存 算法
HashMap深度解析:从原理到实战
HashMap,作为Java集合框架中的一个核心组件,以其高效的键值对存储和检索机制,在软件开发中扮演着举足轻重的角色。作为一名资深的AI工程师,深入理解HashMap的原理、历史、业务场景以及实战应用,对于提升数据处理和算法实现的效率至关重要。本文将通过手绘结构图、流程图,结合Java代码示例,全方位解析HashMap,帮助读者从理论到实践全面掌握这一关键技术。
48 13
|
27天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
61 1
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
76 2
|
4天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
27 1
|
1月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
42 3
|
1月前
|
运维 持续交付 虚拟化
深入解析Docker容器化技术的核心原理
深入解析Docker容器化技术的核心原理
47 1
|
28天前
|
存储 供应链 算法
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景
55 0
|
1月前
|
JavaScript 前端开发 API
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
57 0
|
1月前
|
API 持续交付 网络架构
深入解析微服务架构:原理、优势与实践
深入解析微服务架构:原理、优势与实践
33 0
|
1月前
|
存储 供应链 物联网
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景

热门文章

最新文章

推荐镜像

更多