您好,欢迎访问三七文档
目录目录目录目录一:MP3代码的总体框架..............................................................................................................21:Mp3解码过程了解............................................................................................................22:MP3解码主程序段直观了解............................................................................................3二:MP3主程序代码详析..............................................................................................................71:比特流分解代码分析.........................................................................................................72:霍夫曼解码代码分析.......................................................................................................113:程序其他解码代码分析...................................................................................................12三:程序中子函数代码详析.........................................................................................................15一比特流分解函数分析.......................................................................................................151:函数open_bit_stream_r分析...................................................................................152:函数end_bs分析.....................................................................................................153:函数seek_sync分析................................................................................................164:函数getbits分析......................................................................................................175:函数refill_buffer分析............................................................................................186:函数decode_info分析............................................................................................197:函数hdr_to_frps分析.............................................................................................198:函数buffer_CRC分析.............................................................................................209:函数III_get_side_info分析.....................................................................................2010:函数main_data_slots分析.....................................................................................2211:函数hputbuf分析..................................................................................................2312:函数III_get_scale_factors分析.............................................................................23二霍夫曼解码函数分析.......................................................................................................241:函数III_hufman_decode分析.................................................................................242:函数initialize_huffman分析...................................................................................263:函数read_decoder_table分析..................................................................................274:函数huffman_decoder分析...................................................................................29三反量化函数分析...............................................................................................................31四立体声处理函数分析.......................................................................................................34五数据重排列函数分析.......................................................................................................39四:附录.........................................................................................................................................411:霍夫曼解码表文件内容:...............................................................................................412:全部源程序.......................................................................................................................422一一一一::::MP3代码的总体框架代码的总体框架代码的总体框架代码的总体框架1::::Mp3解码过程了解解码过程了解解码过程了解解码过程了解Mp3的解码总体上可分为9个过程:比特流分解,霍夫曼解码,逆量化处理,立体声处理,频谱重排列,抗锯齿处理,IMDCT变换,子带合成,pcm输出。为了解上述9个过程的由来,简要描述mp3的压缩流程。声音是一个模拟信号,对声音进行采样,量化,编码将得到PCM数据。PCM又称为脉冲编码调制数据,是电脑可以播放的最原始的数据,也是MP3压缩的源。为了达到更大的数据压缩率,MPEG标准采用子带编码技术将PCM数据分成32个子带,每个子带都是独立编码的(参考《数字音频原理与应用》221页)。然后将数据变换到频域下分析,MPEG采用的是改进的离散余弦变换,也可以使用傅利叶变换(参考《数字音频原理与应用》225)。再下来为了重建立体声进行了频谱按特定规则的排列,随后立体声处理,处理后的数据按照协议定义进行量化。为了达到更大的压缩,再进行霍夫曼编码。最后将一些系数与主信息融合形成mp3文件。解码是编码的反过程大概如下:所谓比特流分解是指将mp3文件以二进制方式打开,然后根据其压缩格式的定义,依次从这个mp3文件中取出头信息,边信息,比例因子信息等。这些信息都是后面的解码过程中需要的。(这部分是代码理解中的难点)。霍夫曼编码是一种无损压缩编码,属于熵编码。Mp3的解码可以通过公式实时进行数据的解码,但往往采用的是通过查表法实现解码(节省了CPU时间资源)。(这部分是mp3解码工作量中最大的一部分,也是代码理解中的难点)。逆量化处理只是几个公式的操作,代码理解中不难立体声处理:这部分的处理也只是对几个公式的操作,代码理解不难,但原理上理解有些难度(**参考:了解下面的部分可以较好地理解代码中的立体声处理函数JointStereo是一种立体声编码技巧,主要分为IntensityStereo(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/Sidestereo和IntensityStereo交替使用的)频谱重排列,抗锯齿处理,IMDCT变换,子带合成:这4个过程都是对若干公式的操作代码易懂,至于为什么要用这些公式,估计需要对MPEG编码有个了解才行。PCM的输出是与c语言对文件的处理相关的。对文件的处理在比特流分解和霍夫曼解码中最
本文标题:Mp3的解码流程
链接地址:https://www.777doc.com/doc-3698166 .html