【内容提要】 《用JAVA编写MP3解码器》系列文章将对JAVA实现MP3解码的技术细节作介绍,本着开源的精神,文中给出完整的MPEG 1.0/2.0/2.5 Audio Layer I/II/III 解码的JAVA源代码。在哈夫曼解码、逆量化和重排序、多相合成滤波等模块中采用了卓有成效方法来提高程序运行效率;采用了IMDCT、DCT经典的快速算法,根据自己对算法的理解编写代码,对快速算法有详细的推导和说明;整个程序采用模块化设计,程序结构比较清晰。即使你之前对JAVA语言不太熟悉,由于JAVA的语法类似于C语言,也是很容易看懂的。
对解码规范理解不到位导致的错误和疏漏之处再所难免,欢迎批评指正。
【许可协议】 文中给出的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解码器——前言
http://www.iteye.com/topic/739585
http://lfp001.iteye.com/blog/739585
(二)用JAVA编写MP3解码器——帧头信息解码
http://www.iteye.com/topic/739606
http://lfp001.iteye.com/blog/739606
(三)用JAVA编写MP3解码器——读取位流
http://www.iteye.com/topic/739678
http://lfp001.iteye.com/blog/739678
(四)用JAVA编写MP3解码器——读取文件
http://www.iteye.com/topic/740090
http://lfp001.iteye.com/blog/740090
(五)用JAVA编写MP3解码器——解析文件信息
http://www.iteye.com/topic/740930
http://lfp001.iteye.com/blog/740930
(六)用JAVA编写MP3解码器——帧数据结构
http://www.iteye.com/topic/741558
http://lfp001.iteye.com/blog/741558
(七)用JAVA编写MP3解码器——解码帧边信息
http://www.iteye.com/topic/742913
http://lfp001.iteye.com/blog/742913
(八)用JAVA编写MP3解码器——解码增益因子
http://www.iteye.com/topic/743318
http://lfp001.iteye.com/blog/743318
(九)用JAVA编写MP3解码器——哈夫曼解码
http://www.iteye.com/topic/744000
http://lfp001.iteye.com/blog/744000
(十)用JAVA编写MP3解码器——逆量化和重排序
http://www.iteye.com/topic/744417
http://lfp001.iteye.com/blog/744417
(十一)用JAVA编写MP3解码器——立体声处理
http://www.iteye.com/topic/746850
http://lfp001.iteye.com/blog/746850
(十二)用JAVA编写MP3解码器——消混叠处理
http://www.iteye.com/topic/748157
http://lfp001.iteye.com/blog/748157
(十三)用JAVA编写MP3解码器——IMDCT快速算法
http://www.iteye.com/topic/749785
http://lfp001.iteye.com/blog/749785
(十四)用JAVA编写MP3解码器——多相合成滤波
http://www.iteye.com/topic/749974
http://lfp001.iteye.com/blog/749974
(十五)用JAVA编写MP3解码器——音频输出
http://www.iteye.com/topic/750060
http://lfp001.iteye.com/blog/750060
(十六)用JAVA编写MP3解码器——解码Layer2
http://www.iteye.com/topic/750070
http://lfp001.iteye.com/blog/750070
(十七)用JAVA编写MP3解码器——解码Layer1
http://www.iteye.com/topic/750076
http://lfp001.iteye.com/blog/750076
(十八)用JAVA编写MP3解码器——迷你播放器
http://www.iteye.com/topic/751013
http://lfp001.iteye.com/blog/751013
【附】无论用什么样的编程语言,编写出MPEG 1.0/2.0/2.5音频解码器是不难的;编写出兼顾速度和存储开销的高效的解码器是很难的。
我所知道的解码器,解码结果没有区别,不同的是效率问题。有人对不同的播放器作出这样的主观听感上不同评价:柔和、甜美、声音发干、偏冷等。这样的评价是值得商榷的,如果解码器是开源的,调试运行可以直接看到解码最后一步送入音频硬件的PCM数据,如果解码器不是开源的,可以编程抓取其PCM数据出来看,我测试几个解码器的结果是没的区别的。解码中间过程的计算误差是存在的,不同的解码器对同一输入解码出的中间结果(float/double类型)不同,经过最后一步乘上32767再取整得到16位整型的PCM,不同的解码器对同一输入结果就是相同的了,包括最古老的Xing MP3解码器和最新的MPG123、LIBMAD。所以不要担心你美妙的歌曲被解码器折腾得不动听了,如果追求好的音质,用专业的声卡配高品质的音箱才行。
控制台程序运行屏幕截图:
相关推荐
纯java实现的MP3解码器,装逼使用,面试使用,很好的实现。
java的mp3解码器(非JMF、控制台播放音乐) 用于在你自己的程序中引入,播放MP3文件 运行前先编译---build.bat/build.sh
基于通用可编程GPU的视频编解码器——架构、算法与实现
纯java写的解码器 不含任何jar包
jmp123是一个解码速度很快的纯JAVA的开源的MP3解码器。在2核2.9G CPU上跑,解码速度达到每秒15000帧以上;在4核 CPU上会跑得更快。
C++实现的Mp3解码器
H.264的三大编解码器之一JM最新版,为VC下C工程源码,可直接使用或二次开发。 文件中包含说明文档
好不容易找到的,虽然使用matlab实现,但对理解MP3格式很有帮助!
1、好用的mp3播放器,可以试试 2、mp3解码器
Huffman编解码问题——讲解.docx
许多刚接触mina的朋友,对于mina的编解码器的编写很迷惑.希望这个文档可以帮助朋友们少走弯路。 资源中是一个比较典型的编解码器写法。生成了可执行文件。并对编解码器的代码有详细注释。
JCodec 是一个实现一组流行的视频和音频编解码器的库。目前 JCodec 支持 MP4 视频格式。JCodec 是在 FreeBSD 许可证下分发的自由软件。支持的功能:从视频文件中解码特定的图像帧。性能/质量注意事项 由于 JCodec 是...
mp3解码库,千千静听,kugou等mp3播放器使用的解码库
用vc6.0编写的MP3播放器和MP3解码器。 单独将MP3解码器编译成静态链接库lib文件, 然后MP3播放器中再调用lib。 很有参考价值。。。
Netty 框架学习 —— 编解码器框架(csdn)————程序
该程序是一个非常好的学习MP3 解码器的说明文档,并且他还介绍了MP3编码的原理对于我们理解MP3解码有很好的帮助,是一个不可多得的好文档
jmp123 JAVA MP3解码,jmp123 JAVA MP3解码
Netty 框架学习 —— 预置的 ChannelHandler 和编解码器(csdn)————程序
接轨生活,解码术语——初中语文文学术语的生活化理解方法探究.pdf