编辑: Mckel0ve 2019-07-07

3、MP3 播放器原理 根据德国 Fraunhofer IIS (http://www.iis.fhg.de/amm/ )公布的 MPEG Audio 解码程序进行 简化后编写了一个最简MP3 解码程序.有兴趣的读者可以参考对应的源程序(http://www.see.online.sh.cn/ch/sw/self/rainplay/layer3.zip). MP3 文件由多个帧组成,也就是说帧是 MP3 音乐文件的最小组成单位.每个帧又由帧 头和帧数据组成.每个帧头长

4 字节.其数据结构如下: typedef struct _tagHeader { unsigned int sync:12;

//同步信息 unsigned int version:1;

//版本 unsigned int layer:2;

//层unsigned int error_protection:1;

//CRC 校正 unsigned int bit_rate_index:4;

//位率索引 unsigned int sample_rate_index:2;

//采样率索引 unsigned int padding:1;

//空白字 unsigned int extension:1;

//私有标志 unsigned int channel_mode:2;

//立体声模式 unsigned int mode extension:2;

//保留 unsigned int copyright:1;

//版权标志 如果您在阅读过程中发现疏漏和错误,请您尽快和编者取得联系 [email protected] [email protected] 中国科学技术大学电子工程与信息科学系 多媒体通信实验室(Copyright 2002) unsigned int original:1;

//原始媒体 unsigned int emphasis:2;

//强调方式 } HEADER, *LPHEADER;

其中帧同步标记为 0xFFF. 在帧头后边是 Side Info(姑且称之为通道信息).对标准的立体声 MP3 文件来说其长度 为32 字节.通道信息后面是 Scale factor(增益因子)信息.当解码器在读到上述信息后,就 可以进行解码了. 当MP3 文件被打开后,播放器首先试图对帧进行同步,然后分别读取通道信息及增益 因子等数据,再进行霍夫曼解码,至此我们已经获得解压后的数据.但这些数据仍然不能进 行播放,它们还处于频域,要想听到歌曲还要将它由频域通过特定的手段转换到时域.接下 来的处理分别为立体化处理;

抗锯齿处理;

IMDCT 变换;

IDCT 变换及窗口化滑动处理.

4、mp3PRO 的编码原理 我们通常收听的 mp3 音乐文件一般都以 128kbps 的比特率压缩而成的.但如果采用更 低的比特率 (如96kbps 或64kbps) , 我们可以非常明显的感觉到声音的高频部分丢失现象明 显,严重时声音还会产生扭曲现象.这其中的原因在于,以这些低比特率压缩而成的 mp3 在编码时无法对声音的整个频带进行压缩,从而丢失了高频段一些重要的声音信息. 为了能够在低比特率下获得更高音质的 mp3 文件,一项称作 SBR(Spectral Band Replication) 的技术被用于新的 mp3PRO 编码中, 其主要的用处在于保留了声音中的高频音, 使得以低比特率压缩的 mp3 文件音质得到显著的增强. mp3PRO 在进行编码时,mp3PRO 编码器将音频的录音分成两个部分:mp3 部分和 PRO 部分.mp3 部分分析低频段(Low Frequency Band)信息,并将其编码成通常的 mp3 文件数据 流.这就使得编码器能够集中编码更少的有用信息,获得更佳品质的编码效果.同时,这也 保证了 mp3PRO 文件同老的 mp3 播放器的兼容性.PRO 部分分析的则是高频段(High Frequency Band)信息,并将其编码成 mp3 数据流的一部分,而这些通常在老的 mp3 解码 器里是被忽略的.新的 mp3PRO 解码器会有效地利用这部分数据流,将两段(高频段和低 频段)合并起来产生完全的音频带,达到增强音质的效果.

5、在线 mp3 播放

三、实验内容

1、 根据实验室提供的示例代码编写自己的 mp3 文件播放器;

2、 编写一个可以支持播放网络 mp3 音乐的播放器.

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题