MPEG音频文件格式(包括MP文件格式)详解

上传人:206****923 文档编号:46547111 上传时间:2018-06-27 格式:PDF 页数:18 大小:246.19KB
返回 下载 相关 举报
MPEG音频文件格式(包括MP文件格式)详解_第1页
第1页 / 共18页
MPEG音频文件格式(包括MP文件格式)详解_第2页
第2页 / 共18页
MPEG音频文件格式(包括MP文件格式)详解_第3页
第3页 / 共18页
MPEG音频文件格式(包括MP文件格式)详解_第4页
第4页 / 共18页
MPEG音频文件格式(包括MP文件格式)详解_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《MPEG音频文件格式(包括MP文件格式)详解》由会员分享,可在线阅读,更多相关《MPEG音频文件格式(包括MP文件格式)详解(18页珍藏版)》请在金锄头文库上搜索。

1、MPEG 音频文件格式音频文件格式(包括包括 MP3 文件格式文件格式)详解详解 MP3 文件是由帧(frame)构成的,帧是 MP3 文件最小的组成单位。MP3 的全称应为 MPEG1 Layer-3 音频文件, MPEG(Moving Picture Experts Group)在汉语中译为活动图像专家 组, 特指活动影音压缩标准, MPEG 音频文件是 MPEG1 标准中的声音部分, 也叫 MPEG 音 频层,它根据压缩质量和编码复杂程度划分为三层,即 Layer-1、Layer2、Layer3,且分别 对应 MP1、 MP2、 MP3 这三种声音文件, 并根据不同的用途, 使用不同层

2、次的编码。 MPEG 音频编码的层次越高, 编码器越复杂, 压缩率也越高, MP1 和 MP2 的压缩率分别为 4: 1 和 6:1-8:1,而 MP3 的压缩率则高达 10:1-12:1,也就是说,一分钟 CD 音质的音乐,未 经压缩需要 10MB 的存储空间,而经过 MP3 压缩编码后只有 1MB 左右。不过 MP3 对音 频信号采用的是有损压缩方式,为了降低声音失真度,MP3 采取了“感官编码技术” ,即编 码时先对音频文件进行频谱分析, 然后用过滤器滤掉噪音电平, 接着通过量化的方式将剩下 的每一位打散排列,最后形成具有较高压缩比的 MP3 文件,并使压缩后的文件在回放时能 够达到比较

3、接近原音源的声音效果。 一、一、MPEG 音频压缩基础音频压缩基础 在众多音频压缩方法中, 这些方法在保持声音质量的同时尽量压缩数字音频使之占用更 小的存储空间。MPEG 压缩是该领域中效果最好的一个。这种压缩是有损压缩,这意味着, 当运用这一方法压缩时肯定会丢失一部分音频信息。 但是, 由于压缩方法的控制很难发现这 种损失。 使用几个非常复杂和苛刻的数学算法, 使得只有原始音频中几乎听不到的部分损失 掉。这就给重要的信息剩下了更多的空间。通过这种方法可以将音频压缩 12 倍(可以选择 压缩率) ,效果显著。正是应为他的质量,MPEG 音频变得流行起来。 MPEG-1,MPEG-2 和 MPE

4、G-4 都是人们熟悉的 MPEG 标准,MP3 只涉及到前两中,另外 还有一个非官方标准 MPEG-2.5 用于扩展 MPEG-2/LSF 到更低的采样率。 MPEG-1 音频(ISO/IEC 11172-3)描述了具有如下属性的三层音频编码: 1 或 2 个声道 采样频率为 32kHz,44.1kHz 或 48kHz 位率从 32kbps 到 448kbps 每一层都有自己的优点。 MPEG-2 音频(ISO/IEC 13818-3)有两个 MPEG-1 的扩展,通常叫做 MPEG-2/LSF 和 MPEG-2/Multichannel MPEG-2/LSF 有如下特点: 1 或 2 个声道

5、 采样频率为 MPEG-1 的一半 波特率从 8kbps256kbps MPEG-2/Mutichannel 有如下特点: 多达 5 个声道和 1 个 LFE-通道(低频增强 不是重低音) 同 MPEG-1 一样的采样频率 5.1 的最高波特率可能达到 1Mbps 二、二、MPEG Layer3 编编/解码的基本原理解码的基本原理 音乐 CD 具有 44.1KHz 16Bits 立体声的音频质量, 一张 CD 可以存储 74 分钟的歌曲(大约 15 首左右)。如何将这些歌曲无损或基本无损地进行压缩,以使在同样的媒体上存储更多 的歌曲,一直困扰着软件业。当 MPEG 协会提出 MPEG Audi

6、o Layer1Layer3 后,机会产生 了。通过使用 MPEG1 Layer3 编码技术,制作者得以用大约 121 的压缩率记录 16KHz 带 宽的有损音乐信号。不过,同 CD 原声区别不大。人的听力系统具有非常优越的性能,其动 态范围超过 96dB。你既可以听到扣子掉在地上这样小的声音,也可以听到波音 747 的强大 的轰鸣声。但当我们站在飞机场听着波音 747 的轰鸣时,你还能分辨出扣子掉在地上的声音 吗?不可能。 人的听力系统适应声音的动态变化, 人们对这种适应及屏蔽特性音质研究后得 出对声音压缩非常有用的理论。 人们很早以前就知道利用这种特性来为磁带录音降低噪音了 (当没有音乐时

7、嘶嘶声很容易听到,而当音乐信号电平很高时嘶嘶声不容易听到)。当声音较 强时产生屏蔽效应。 在阈值曲线下的噪音或小信号声音无法被人耳听到。 在较强信号出现时, 允许通过更多的信号。在此时增加被量化过的小信号数据(使用无用的位来携带更多的信息) 可以达到一定程度的压缩的目的。 通常情况下,MP3 压缩器将原始声音通过 FFT(快速傅立叶 变换)变化到频域,然后通过一定的算法算出何种频率声音可以携带更多的信息。而在还原 时解码器所需要做的仅仅是将其从频域再变换回来。 三、整个三、整个 MP3 文件结构:文件结构: MP3 文件大体分为三部分:TAG_V2(ID3V2),Frame, TAG_V1(I

8、D3V1) 四、四、MPEG 音频帧格式音频帧格式 一个 MPEG 音频文件是许多的称为帧的较小部分组成的,通常,帧是独立的组成部分。 每一帧都拥有自己的头和音频信息。没有文件头。所以,我们可以剪切 MPEG 文件的任何 部分并且能够正常播放 (当然要分割到帧的结束处尽管许多程序会处理错误头) 。 在 LayerIII 中就并不是 100%正确的。 这是因为在 MPEG-1LayerIII 文件中的数据组织中, 帧常常是互相 关联的并且不能那样随便裁切。 当你想读取 MPEG 文件的信息时,通常只找到第一帧就足够了,读取它的头信息然后 假设其它帧是相同的就可以。但这也不是所有情况。变比特率的

9、MPEG 文件使用使用所谓 比特变换, 也就是说每一帧的比特率依照具体内容变化。 这种方法没有减少声音质量的帧将 应用较低的波特率。这样就允许更好的压缩质量的同时又保证了高质量的音质。 帧头由每一帧的前 4 个字节(32 位)组成。帧头的前 11 比特(或前 12 个位,见下文关于帧同步)总是固定的称作“帧同步” 。因此,可以在整个文件中查找第一个帧同步(即:必 须找到一个值为 255 的且其后跟着三到四个最高位置 1 的字节。 )然后读取整个头检查值是 否正确。关于头中每一个比特的具体含义应该验证那一个值的有效性可以操看下面的表格, 如果存在被定义为保留,无效,损坏或不允许的值表明该头已经损

10、坏。记住,光有这些是不 够的,帧同步能在许多二进制文件里面的应用是很广的。而且,MPEG 文件可能在开头包含 可能有错误同步信息的垃圾, 所以我们必须检查两个或者更多一些帧来确定我们现在读取的 文件是一个 MPEG 文件。 帧可能还有 CRC 校验。如果存在的话,CRC 校验紧跟在帧头之后,长为 16 比特。CRC 校 验之后是音频数据。计算出帧长度,如果你需要读取其他头或者计算该帧的 CRC 值,可以 使用它比较文件中读出来的帧。验证 MPEG 头的有效性这是一个非常好的方法。 1、帧头格式、帧头格式 下面是一个头内容图示,使用字符 A 到 M 表示不同的区域。在表格中你可以看到每一区域 的

11、详细内容。 AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM 关于读取帧头我使用了下面的方法 定义一个结构体 typedef struct frameHeader unsigned int sync1:8; /同步信息 1 unsigned int error_protection:1; /CRC 校验 unsigned int layer:2; /层 unsigned int version:2; /版本 unsigned int sync2:3; /同步信息 2 unsigned int extension:1; /版权 unsigned int padding:1;

12、 /填充空白字 unsigned int sample_rate_index:2; /采样率索引 unsigned int bit_rate_index:4; /位率索引 unsigned int emphasis:2; /强调方式 unsigned int original:1; /原始媒体 unsigned int copyright:1; /版权标志 unsigned int mode_extension:2; /扩展模式,仅用于联合立体声 unsigned int channel_mode:2; /声道模式 FHEADER, *pFHEADER; 请注意我的同步信息分成了两个部分, 而

13、且其他的位的顺序也和上表列出的有所差别, 这个 主要是因为 c 语言在存取数据时总是从低位开始,而这个帧头是需要从高位来读取的。 读取方式如下 FHEADER header; fread( /这里假设文件已打开,读取位置已经指向帧 头所在的位置 这样一次就可以读入帧头的所有信息了。 2、如何计算帧长度、如何计算帧长度 我们首先区分两个术语:帧大小和帧长度。帧大小即每帧采样数表示一帧中采样的个数,这 是恒定值。其值入下表所示 帧长度是压缩时每一帧的长度,包括帧头。它将填充的空位也计算在内。LayerI 的一个空位 长 4 字节,LayerII 和 LayerIII 的空位是 1 字节。当读取 M

14、PEG 文件时必须计算该值以便找 到相邻的帧。 注意:因为有填充和比特率变换,帧长度可能变化。 从头中读取比特率,采样频率和填充, LyaerI 使用公式: 帧长度(字节) = ( 每帧采样数 / 8 * 比特率 ) / 采样频率 ) + 填充 * 4 LyerII 和 LyaerIII 使用公式: 帧长度(字节)= ( 每帧采样数 / 8 * 比特率 ) / 采样频率 ) + 填充 例: LayerIII 比特率 128000,采样频率 44100,填充 0 =帧大小 417 字节 3、每帧的持续时间、每帧的持续时间 之前看了一些文章都说 mp3 的一帧的持续时间是 26ms,结果在实际程序

15、的编写中发现无法 正确按时间定位到帧,然后又查了一些文章才知道,所谓 26ms 一帧只是针对 MPEG1 Layer III 而且采样率为 44.1KHz 来说是对的,但 mp3 文件并不都是如此,其实这个时间也是可以 通过计算来获得,下面给出计算公式 每帧持续时间(毫秒) = 每帧采样数 / 采样频率 * 1000 这样通过计算可知 MPEG1 Layer III 采样率为 44.1KHz 的一帧持续时间为 26.12.不是整 数,不过我们权且认为它就是 26 毫秒吧。 如果是 MPEG2 Layer III 采样率为 16KHz 的话那一帧要持续 36 毫秒, 这个相差还是蛮大的, 所以还

16、是应该通过计算来获的,当然可以按 MPEG 版本,层数和采样率来建一个表,这样 直接查表就可以知道时间了。 4、CRC 校验校验 如果帧头的校验位为 0,则帧头后就有一个 16 位的 CRC 值,这个值是 big-endian 的值,把 这个值和该帧通过计算得出的 CRC 值进行比较就可以得知该帧是否有效。 关于 CRC 校验下面给出我找到的英文原文,我的英文水平不高,翻译的不行。 If the protection bit in the header is not set, the frame contains a 16 bit CRC (Cyclic Redundancy Checksum). This checksum directly follows the frame header and is a big-endian WORD. To verify this checksum you

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号