MPEG音频文件格式(包括MP3文件格式)详解
MP3 文件是由帧(frame)构成的,帧是MP3 文件最小的组成单位。MP3 的全称应为MPEG1 Layer-3 音频文件,MPEG(Moving Picture Experts Group)在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG 音频文件是MPEG1 标准中的声音部分,也叫MPEG 音频层,它根据压缩质量和编码复杂程度划分为三层,即 Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3 这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG 音频编码的层次越高,编码器越复杂,压缩率也越高,MP1 和MP2 的压缩率分别为4:1 和6:1-8:1,而MP3 的压缩率则高达10:1-12:1,也就是说,一分钟CD 音质的音乐,未经压缩需要10MB的存储空间,而经过MP3 压缩编码后只有1MB 左右。不过MP3 对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3 采取了“感官编码技术”,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3 文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。
一、MPEG音频压缩基础
在众多音频压缩方法中,这些方法在保持声音质量的同时尽量压缩数字音频使之占用更小的存储空间。MPEG压缩是该领域中效果最好的一个。这种压缩是有损压缩,这意味着,当运用这一方法压缩
恰似你的温柔吉他弹唱时肯定会丢失一部分音频信息。但是,由于压缩方法的控制很难发现这种损失。使用几个非常复杂和苛刻的数学算法,使得只有原始音频中几乎听不到的部分损失掉。这就给重要的信息剩下了更多的空间。通过这种方法可以将音频压缩12倍(可以选择压缩率),效果显著。正是应为他的质量,MPEG音频变得流行起来。
那年你十八MPEG-1,MPEG-2和MPEG-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个声道
采样频率为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 Audio Layer1~Layer3后,机会产生了。通过使用MPEG1 Layer3编码技术,制作者得以用大约12∶1的压缩率记录16KHz带宽的有损音乐信号。不过,同CD原声区别不大。人的听力系统具有非常优越的性能,其动态范围超过96dB。你既可以听到扣子掉在地上这样小的声音,也可以听到波音747的强大的轰鸣声。但当我们站在飞机场听着波音747的轰鸣时,你还能分辨出扣子掉在地上的声音吗?不可能。人的听力系统适应声音的动态变化,人们对这种适应及屏蔽特性音质研究后得出对声音压缩非常有用的理论。人们很早以前就知道利用这种特性来为磁带录音降低噪音了(当没有音乐时嘶嘶声很容易听到,而当音乐信号电平很高时嘶嘶声不容易听到)。当声音较强时产生屏蔽效应。在阈值曲线下的噪音或小信号声音无法被人耳听到。在较强信号出现时,允许通过更多的信号。在此时增加被量化过的小信号数据(使用无用的位来携带更多的信息)可以达到一定程度的压缩的目的。通常情况下,MP3压缩器将原始声音通过FFT(快速傅立叶变换)变化到频域,然后通过一定的算法算出何种频率声音可以携带更多的信息。而在还原时解码器所需要做的仅仅是将其从频域再变换回来。
三、整个MP3文件结构:
MP3文件大体分为三部分:TAG_V2(ID3V2),Frame, TAG_V1(ID3V1)just one last dance 歌词
四、MPEG音频帧格式
一个MPEG音频文件是许多的称为帧的较小部分组成的,通常,帧是独立的组成部分。每一帧都拥有自己的头和音频信息。没有文件头。所以,我们可以剪切MPEG文件的任何部分并且能够正常播放(当然要分割到帧的结束处尽管许多程序会处理错误头)。在LayerIII 中就并不是100%正确的。这是因为在MPEG-1LayerIII文件中的数据组织中,帧常常是互相关联的并且不能那样随便裁切。
当你想读取MPEG文件的信息时,通常只到第一帧就足够了,读取它的头信息然后假设其它帧是相
同的就可以。但这也不是所有情况。变比特率的MPEG文件使用使用所谓比特变换,也就是说每一帧的比特率依照具体内容变化。这种方法没有减少声音质量的帧将应用较低的波特率。这样就允许更好的压缩质量的同时又保证了高质量的音质。
帧头由每一帧的前4个字节(32位)组成。帧头的前11比特(或前12个位,见下文关于
帧同步)总是固定的称作“帧同步”。因此,可以在整个文件中查第一个帧同步(即:必须到一个值为255的且其后跟着三到四个最高位置1的字节。)然后读取整个头检查值是否正确。关于头中每一个比特的具体含义应该验证那一个值的有效性可以操看下面的表格,如果存在被定义为保留,无效,损坏或不允许的值表明该头已经损坏。记住,光有这些是不够的,帧同步能在许多二进制文件里面的应用是很广的。而且,MPEG文件可能在开头包含可能有错误同步信息的垃圾,所以我们必须检查两个或者更多一些帧来确定我们现在读取的文件是一个MPEG文件。
帧可能还有CRC校验。如果存在的话,CRC校验紧跟在帧头之后,长为16比特。CRC校验之后是音频数据。计算出帧长度,如果你需要读取其他头或者计算该帧的CRC值,可以使用它比较文件中读出来的帧。验证MPEG头的有效性这是一个非常好的方法。
1、帧头格式
下面是一个头内容图示,使用字符A到M表示不同的区域。在表格中你可以看到每一区域的详细内容。
歌曲红尘有你AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM