文档章节

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

暗之幻影
 暗之幻影
发布于 2015/01/04 15:29
字数 1210
阅读 25
收藏 0

  【内容提要】 《用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解码器——帧头信息解码

本文转载自:http://lfp001.iteye.com/blog/739585

暗之幻影
粉丝 20
博文 377
码字总数 71245
作品 0
南京
高级程序员
私信 提问
(五)用JAVA编写MP3解码器——解析文件信息

前文提到解析MP3标签,程序源码中也已经出现了调用解析MP3标签、打印MP3文件信息的功能,这儿先说说MP3文件信息的解析。 解析MP3的文件信息对MP3解码器来说只是一个附加功能,如果不加入这部...

暗之幻影
2015/01/04
61
0
疯狂Spring Cloud连载(11)——Feign的编码器与解码器

本文节选自《疯狂Spring Cloud微服务架构实战》 京东购买地址:https://item.jd.com/12256011.html 当当网购买地址:http://product.dangdang.com/25201393.html Spring Cloud教学视频:htt...

杨大仙的程序空间
2017/10/23
3.1K
5
System.arraycopy为什么快

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangyangzhizhou/article/details/79504818 前言 在 Java 编程中经常会遇到数组拷贝操作,一般会有如下四种方...

超人汪小建(seaboat)
2018/03/10
0
0
Java开发基础(三)——JDBC连接池

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/simonforfuture/article/details/90451339 文章目录 前言 数据库连接...

simon曦
05/22
0
0
Effective Go 中英双语版

Effective Go - 《实效 GO 编程》 Introduction Go is a new language. Although it borrows ideas from existing languages, it has unusual properties that make effective Go programs ......

兵戈天下
2016/08/13
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

Nginx 快速安装详解

一、Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамбле...

网络小虾米
30分钟前
4
0
技术分享 | slave_relay_log_info 表认知的一些展开

作者:胡呈清 slave_relay_log_info 表是这样的: mysql> select * from mysql.slave_relay_log_info\G *************************** 1. row *************************** Number_of_lin......

爱可生
32分钟前
3
0
nginx配置http访问自动跳转到https

server {listen 80;server_name www.域名.com;rewrite ^(.*) https://$server_name$1 permanent;}server {listen 443;server_name www.域名.com;root /home/www;ssl on;......

很好亦平凡ms
32分钟前
4
0
SpreadJS:一款中国研发的类Excel开发工具,功能涵盖Excel的 95% 以上

Excel 作为一款深受用户喜爱的电子表格工具,借助其直观的界面、出色的计算性能、数据分析和图表,已经成为数据统计领域不可或缺的软件之一。 基于Excel对数据处理与分析的卓越表现,把Excel...

葡萄城技术团队
33分钟前
4
0
用javafx框架tornadofx做了个天气预报的程序

class WeatherApp : App(WeatherView::class)class WeatherView : View("十五天天气预报") { val weatherVM: WeatherViewModel by inject() val controller: WeatherController by......

oschina4cyy
36分钟前
4
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部