- 1、本文档共71页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
目录
一:MP3代码的总体框架 3
1:Mp3解码过程了解 3
2:MP3解码主程序段直观了解 4
二:MP3主程序代码详析 8
1:比特流分解代码分析 8
2:霍夫曼解码代码分析 12
3:程序其他解码代码分析 13
三:程序中子函数代码详析 15
一 比特流分解函数分析 15
1:函数open_bit_stream_r分析 15
2:函数end_bs分析 16
3:函数seek_sync分析 16
4:函数getbits分析 17
5:函数refill_buffer 分析 19
6:函数decode_info 分析 19
7:函数hdr_to_frps 分析 20
8:函数buffer_CRC分析 20
9:函数III_get_side_info分析 20
10:函数main_data_slots分析 22
11:函数hputbuf分析 23
12:函数III_get_scale_factors分析 23
二 霍夫曼解码函数分析 24
1:函数III_hufman_decode分析 24
2:函数initialize_huffman分析 27
3:函数read_decoder_table分析 27
4:函数huffman_decoder分析 29
三 反量化函数分析 32
四 立体声处理函数分析 34
五 数据重排列函数分析 40
四:附录 41
1:霍夫曼解码表文件内容: 41
2:全部源程序 43
一:MP3代码的总体框架
1:Mp3解码过程了解
Mp3的解码总体上可分为9个过程:比特流分解,霍夫曼解码,逆量化处理,立体声处理,频谱重排列,抗锯齿处理,IMDCT变换,子带合成,pcm输出。
为了解上述9个过程的由来,简要描述mp3的压缩流程。声音是一个模拟信号,对声音进行采样,量化,编码将得到PCM数据。PCM又称为脉冲编码调制数据,是电脑可以播放的最原始的数据,也是MP3压缩的源。为了达到更大的数据压缩率,MPEG标准采用子带编码技术将PCM数据分成32个子带,每个子带都是独立编码的(参考《数字音频原理与应用》221页)。然后将数据变换到频域下分析,MPEG采用的是改进的离散余弦变换,也可以使用傅利叶变换(参考《数字音频原理与应用》225)Mp3的解码可以通过公式实时进行数据的解码,但往往采用的是通过查表法实现解码(节省了CPU时间资源)。(这部分是mp3解码工作量中最大的一部分,也是代码理解中的难点)。
逆量化处理只是几个公式的操作,代码理解中不难
立体声处理:这部分的处理也只是对几个公式的操作,代码理解不难,但原理上理解有些难度(**参考:了解下面的部分可以较好地理解代码中的立体声处理函数Joint Stereo 是一种立体声编码技巧,主要分为 Intensity Stereo(IS)和 Mid/Side (M/S) stereo 两种。 IS 的是在比较低流量时使用,利用了人耳对于低频讯号指向性分辨能力的不足,将音讯资料中的低频分解出来合成单声道资料,剩余的高频资料则合成另一个单声道资料,并另外纪录高频资料的位置资讯,来重建立体声的效果。例如钢琴独奏的录音就可以利用这种方法在有限的资料流量中减少音场资讯却大幅增加音色资讯。Mid/Side (M/S) stereo 在左右声道资料相似度大时常被用到,纪录方式是将左右声道音讯合并 (L+R) 得到新的一轨,再将左右声道音讯相减 (L-R) 得到 另外一轨,然后再将这两轨资料用上面提到听觉心理学模型与滤波器处理。Mid/Side (M/S) stereo 与 IS 一样的是利用部分相位 (phase) 资讯的损失来换得较高的音色纪录资讯。一般的 MP3 是 Mid/Side stereo 和 Intensity Stereo 交替使用的)
频谱重排列,抗锯齿处理,IMDCT变换,子带合成:这4个过程都是对若干公式的操作代码易懂,至于为什么要用这些公式,估计需要对MPEG编码有个了解才行。
PCM的输出是与c语言对文件的处理相关的。对文件的处理在比特流分解和霍夫曼解码中最先接触到。看到了上述的两个环节,这一部分难度为0。
综上,对代码的理解难点集中在前两个环节,一是比特流分解,二是霍夫曼解码。比特流的分解难点在于c语言编程知识的应用。通过这部分的学习可以进一步熟悉c语言的应用,和一些算法的精短描述(很简约但是有些不好懂)。霍夫曼解码部分的学习可以掌握霍夫曼的查表解码方法,很有学习价值的…… -_-
2:MP3解码主程序段直观了解
以下罗列一份最简单的MP3解码的主程序段代码,目的是对MP3解码主程序极其大致的结构有个直观的认识。
#include stdio.h
#include stdlib.h
#include common.h
#include deco
文档评论(0)