MP3在国内流行已经有很长一段时间了,但始终没见到国产MP3播放软件的蓬勃发展。目前可以见到的比较成型的MP3播放软件只有《超级解霸》软件包中的播放器。笔者通过本文想将一年多来对MP3软件的研究成果介绍给大家,但愿起到抛砖引玉的作用,能推动国内自由软件的开发及MP3编/解码器的开发。同时,笔者希望同国内对此项技术感兴趣的个人/单位展开合作。MP3播放软件具有“麻雀虽小,五脏俱全”的特点,通过开发MP3播放软件,你可以学到许多有关多媒体开发、GUI编程、插件接口控制以及网络编程的知识。
一、MPEG Audio的基础知识
MPEG Audio分为MPEG1和MPEG2两大类。而MPEG1中主要有Layer1、Layer2和Layer3三种。MPEG1 Audio编码方式之间的主要区别从外部看来主要是对音频文件的压缩率和要求播放媒体提供数据的速率不同,并且内部采取的算法也有很大的不同,基本上是随Layer数增大而越来越复杂。经Layer1编码的音频文件后缀为MP1,另外两种分别为MP2和MP3。
二、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解码器的实现
笔者根据德国Fraunhofer IIS 公布的MPEG Audio解码程序进行简化后编写了一个最简MP3解码程序。有兴趣的读者可以参考对应的源程序。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。