`
lfp001
  • 浏览: 100708 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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

  • 大小: 3.4 KB
分享到:
评论
8 楼 lfp001 2010-09-04  
long64783977 写道
decoder.Layer3.GRInfo
private Synthesis objSynt;
Layer2 287行 filter.synthesisSubBand
Synthesis.java
htBV[0] = new HuffTab(0, htbv0);
怎么没有

到http://jmp123.sf.net/下载完整的源码。
7 楼 keke020 2010-09-01  
收藏起来~~~~~~
6 楼 mwei 2010-09-01  
lfp001 写道
mwei 写道
楼主精神可赞,我下载了运行,文件名含空格,无法运行,不知LZ有这样的问题吗
java -jar c:/15 - Nobody's Listening (Green Lantern Remix).mp3

你的命令格式不对吧。不是程序的原因,带空格的长文件名要用双引号括起来:
java -jar jmp123.jar "c:/15 - Nobody's Listening (Green Lantern Remix).mp3"
文件名有空格,程序会认为你输入了多个参数。

恩,谢谢,之前没有读你的说明文件。
5 楼 long64783977 2010-09-01  
decoder.Layer3.GRInfo
private Synthesis objSynt;
Layer2 287行 filter.synthesisSubBand
Synthesis.java
htBV[0] = new HuffTab(0, htbv0);
怎么没有
4 楼 lfp001 2010-09-01  
mwei 写道
楼主精神可赞,我下载了运行,文件名含空格,无法运行,不知LZ有这样的问题吗
java -jar c:/15 - Nobody's Listening (Green Lantern Remix).mp3

你的命令格式不对吧。不是程序的原因,带空格的长文件名要用双引号括起来:
java -jar jmp123.jar "c:/15 - Nobody's Listening (Green Lantern Remix).mp3"
文件名有空格,程序会认为你输入了多个参数。
3 楼 mwei 2010-09-01  
楼主精神可赞,我下载了运行,文件名含空格,无法运行,不知LZ有这样的问题吗
java -jar c:/15 - Nobody's Listening (Green Lantern Remix).mp3
2 楼 freespace521 2010-08-20  
1 楼 nakupanda 2010-08-20  
支持楼主

相关推荐

    java编写的解码器

    Java编写的解码器是一种基于Java编程语言实现的软件组件,专门用于解析和播放MP3音频文件。在本文中,我们将深入探讨Java MP3解码器的原理、实现细节以及其在面试和项目中的应用。 首先,理解MP3格式是至关重要的。...

    java的mp3解码器(非JMF、控制台播放音乐)

    标签"java mp3 无JMF 解码器"进一步强调了这个解码器的关键特性:它是用Java语言编写的,专注于MP3格式,且不依赖JMF。这使得它具有跨平台性,可以在任何支持Java的系统上运行。 压缩包内的文件"jmp123_400_utf8_...

    java mp3 音频文件解码器

    总结来说,Java MP3音频文件解码器是一个独立的、用纯Java编写的工具,用于将MP3文件转换为可处理的原始音频数据。它的设计和实现涉及了音频编码原理、数据处理优化以及Java编程技术,对于理解和处理音频数据的...

    纯JAVA的MP3解码器jmp

    《纯JAVA的MP3解码器jmp:深入解析与应用》 MP3解码器是数字音频处理领域的重要工具,它能够将存储的MP3格式音频数据转化为人类可听的声音信号。在众多的MP3解码器中,“jmp123”以其独特的纯JAVA实现和出色的性能...

    基于通用可编程GPU的视频编解码器——架构、算法与实现

    基于通用可编程GPU的视频编解码器——架构、算法与实现

    C++实现的Mp3解码器

    这些头文件对于使用解码器的开发者来说至关重要,因为它们提供了与解码器交互的API,包括打开MP3文件、初始化解码器、解码音频帧和获取解码后的声音数据等功能。 最后,`Makefile`是构建系统的配置文件,它定义了...

    java编写的mp3播放器

    Java编写的MP3播放器是一种基于Java编程语言开发的软件应用,主要用于播放音频文件,特别是MPEG音频层3(MP3)格式的音乐。在Java中实现MP3播放功能涉及多个核心技术和组件,下面将详细阐述相关的知识点。 1. **...

    mp3解码算法原理——具体解码算法

    2. **尺度因子解码**:基于帧头信息,解码器计算出尺度因子,这是用于逆量化的关键参数之一。 3. **哈夫曼解码**:通过对已压缩的音频数据进行哈夫曼解码,还原出原本的音频数据。 4. **逆量化**:此步骤通过逆向...

    mp3解码器论文和Java源码

    MP3解码器是音频处理领域的一个重要组成部分,它负责将存储在MP3文件中的压缩音频数据还原成可听的模拟信号。这篇论文和Java源码的组合为开发者提供了一个深入理解MP3解码过程的实践平台。MP3格式通过高效的有损压缩...

    java编写mp3播放器.doc

    《使用Java编写MP3播放器》是一份关于利用Java编程语言实现MP3音频解码的文档。MP3作为广泛使用的音频压缩格式,其解码技术是数字音频处理领域的重要组成部分。该文档旨在介绍如何利用Java编写一个MP3解码器,并提供...

    H.264编解码器——jm最新版14.2

    在描述中提到的VC下的C工程源码,意味着这个编解码器是用C语言编写,并且可以在Visual C++环境下编译和运行。这对于软件开发者来说非常有用,因为C语言的源代码通常更容易理解和修改,便于进行二次开发和定制。 ...

    mina自定义编解码器详解

    - 文件`example`可能包含了一个使用mina编写的服务器或客户端程序,其中包含了自定义编解码器的应用实例。 - `MinaCodec`可能是一个包含编码器和解码器的类,我们来详细分析其工作流程: - 在编码器中,通常有一...

    jmf_mp3解码器

    总的来说,"jmf_mp3解码器"结合JLayer1.0.1的使用,为Java开发者提供了一个跨平台的解决方案,使得在Java应用程序中播放MP3文件变得简单而有效。这种技术的应用场景广泛,可以用于开发音乐播放器、多媒体教学软件、...

    JAVA编写的MP3播放器(有代码的哦)

    Java编写的MP3播放器是一种基于Java编程语言开发的音频播放软件,主要用于播放MP3格式的音频文件。这种播放器的实现主要依赖于Java的多媒体处理库,如Java Media Framework (JMF) 或者 jogl 等第三方库。下面我们将...

    MP3播放器——JAVA实现

    在本文中,我们将深入探讨如何使用Java编程语言来实现一个MP3播放器。MP3播放器是音频处理软件,能够读取、解码并播放MP3格式的音频文件。Java以其跨平台的特性,成为开发此类应用的理想选择。让我们一起探讨实现这...

    java对于MP3的spi

    这个库可能包含了MP3解码器,将压缩的MP3数据转换为Java Sound API可以理解和播放的原始PCM音频数据。使用这个库,开发者无需关心底层的解码细节,只需调用Java Sound API提供的类和方法,就能实现MP3文件的播放。 ...

    MP3解码器 MP3播放器

    这个解决方案包括一个独立的MP3解码器,它被编译为静态链接库(LIB文件),以及一个能够调用此解码器的MP3播放器。 首先,我们来详细了解一下MP3解码器。MP3是一种有损音频压缩格式,通过使用 psychoacoustic ...

    jmp123JAVA MP3解码

    JMP123是一款基于Java编写的开源MP3解码库,它允许开发者在Java应用程序中实现对MP3文件的解码功能。本文将深入探讨JMP123库的关键特性、工作原理以及如何在实际项目中应用。 1. **JMP123库概述** JMP123是专门为...

    rtcm2.3解码器

    在Java版的RTCM 2.3解码器中,通常会包含两个主要部分:`RtcmT.java`和`RtcmH.java`。`RtcmT.java`可能代表"RTCM Transport",负责处理数据传输相关的逻辑,比如读取RTCM数据流、解包和打包RTCM消息。它可能包含解析...

Global site tag (gtag.js) - Google Analytics