现在的位置: 首页 > 综合 > 正文

(一)用JAVA编写MP3解码器——前言

2018年01月30日 ⁄ 综合 ⁄ 共 1530字 ⁄ 字号 评论关闭

  【内容提要】 《用JAVA编写MP3解码器》系列文章将对JAVA实现MP3解码的技术细节作介绍,本着开源的精神,文中给出完整的MPEG 1.0/2.0/2.5 Audio Layer I/II/III 解码的JAVA源代码。在哈夫曼解码、逆量化和重排序、多相合成滤波等模块中采用了卓有成效方法来提高程序运行效率;采用了IMDCT、DCT经典的快速算法,根据自己对算法的理解编写代码,对快速算法有详细的推导和说明;整个程序采用模块化设计,程序结构比较清晰。即使你之前对JAVA语言不太熟悉,由于JAVA的语法类似于C语言,也是很容易看懂的。

  对解码规范理解不到位导致的错误和疏漏之处再所难免,欢迎批评指正。

 

mp3的解码主要经过下面几个过程

 

  【许可协议】   文中给出的MPEG 1.0/2.0/2.5 Audio Layer I/II/III 解码的JAVA源代码是一个自由软件,你可以重新发布和(或)修改,必须遵守GPL v3.0(GNU Lesser General Public License version 3)协议。发布这一程序的目的是希望它有用,但不提供任何担保;甚至不包括用于商业的和为特殊目的在内的任何保证。你可以从“GNU公用通用许可3.0版”或者通过阅读本文附件中的GPLv3.txt中找到更多细节。

 

  【文件下载】   请到http://sourceforge.net/projects/jmp123/files/下载源码。

 

  【目录】 《用JAVA编写MP3解码器》系列共18篇,每篇的第一个网址是本站论坛,第二个是我的博客。

 

(一)用JAVA编写MP3解码器——前言

(二)用JAVA编写MP3解码器——帧头信息解码

(三)用JAVA编写MP3解码器——读取位流

(四)用JAVA编写MP3解码器——读取文件

(五)用JAVA编写MP3解码器——解析文件信息

(六)用JAVA编写MP3解码器——帧数据结构

(七)用JAVA编写MP3解码器——解码帧边信息

(八)用JAVA编写MP3解码器——解码增益因子

(九)用JAVA编写MP3解码器——哈夫曼解码

(十)用JAVA编写MP3解码器——逆量化和重排序

(十一)用JAVA编写MP3解码器——立体声处理

(十二)用JAVA编写MP3解码器——消混叠处理

(十三)用JAVA编写MP3解码器——IMDCT快速算法

(十四)用JAVA编写MP3解码器——多相合成滤波

(十五)用JAVA编写MP3解码器——音频输出

(十六)用JAVA编写MP3解码器——解码Layer2

(十七)用JAVA编写MP3解码器——解码Layer1

(十八)用JAVA编写MP3解码器——迷你播放器

【附】无论用什么样的编程语言,编写出MPEG 1.0/2.0/2.5音频解码器是不难的;编写出兼顾速度和存储开销的高效的解码器是很难的。

      我所知道的解码器,解码结果没有区别,不同的是效率问题。有人对不同的播放器作出这样的主观听感上不同评价:柔和、甜美、声音发干、偏冷等。这样的评价是值得商榷的,如果解码器是开源的,调试运行可以直接看到解码最后一步送入音频硬件的PCM数据,如果解码器不是开源的,可以编程抓取其PCM数据出来看,我测试几个解码器的结果是没的区别的。解码中间过程的计算误差是存在的,不同的解码器对同一输入解码出的中间结果(float/double类型)不同,经过最后一步乘上32767再取整得到16位整型的PCM,不同的解码器对同一输入结果就是相同的了,包括最古老的Xing
MP3解码器和最新的MPG123、LIBMAD。所以不要担心你美妙的歌曲被解码器折腾得不动听了,如果追求好的音质,用专业的声卡配高品质的音箱才行。

      控制台程序运行屏幕截图:

抱歉!评论已关闭.