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

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

阅读更多

解码一帧Layer3第10步:音频输出  -- class Audio

 

      这里给出音频输出的示例代码,后文给出的播放器是基于命令行,所以音频输出模块就写得很简单,如果你想了解音频输出细节,请查阅《Java API文档》中javax.sound.sampled库相关方法的文档。源码中第37行调用objSDL.open方法时设置了音频缓冲区大小为176400字节。音频缓冲应该设置多大比较好呢?这和你的音频硬件有关,缓冲区设置为合适的值有利于提高性能(官方文档上是这么说的)。前面讲到采用标准立体声编码的MP3一帧有2304个PCM样本,16位PCM输出时长度为4608字节。若PCM样本的采样率为44100Hz,那么解码端播放时一个声道每秒送入音频硬件的PCM样本数为44100个,立体声的话就是44100*2=88200个,这88200个PCM样本的长度为88200*2=176400字节。MP3一帧的播放时长为4608/176400秒(约等于26毫秒),解码器显然能在26ms内完成解码一帧并将PCM写入到音频输出模块。无论采用什么样的MP3编码方式,每帧的播放时长是相同的。关于音频缓冲区就说到这儿,缓冲区设为多大,你自己看着办哈~

 

class Audio 源码如下:

/*
* Audio.java -- 音频输出示例
* Copyright (C) 2010
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
* If you would like to negotiate alternate licensing terms, you may do
* so by contacting the author: <http://jmp123.sourceforge.net/>
*/
package output;

import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;

public final class Audio {
	private static SourceDataLine objSDL;

	// Start Output
	public static void open(int intFreq, int iBits, int channels) throws Exception {
		AudioFormat af = new AudioFormat(intFreq, 16, channels, true, false);
		DataLine.Info info = new DataLine.Info(SourceDataLine.class, af);
		objSDL = (SourceDataLine) AudioSystem.getLine(info);
		//objSDL.open(af);
		objSDL.open(af, 176400);
		objSDL.start();
	}

	public static void write(byte[] b, int len) {
		objSDL.write(b, 0, len);
	}

	/*
	* bPause=true pause; bPause=false resume
	*/
	public static void pause(boolean bPause) {
		if(bPause)
			objSDL.stop();
		else
			objSDL.start();
	}

	// Close Output
	public static void close() {
		objSDL.drain();
		objSDL.stop();
		objSDL.close();
		objSDL = null;
	}
}

  

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

下一篇:(十六)用JAVA编写MP3解码器——解码Layer2

 

【下载地址】http://jmp123.sourceforge.net/

分享到:
评论

相关推荐

    基于jmp123解码器的mp3播放器.zip

    这个压缩包文件的标题揭示了它的核心内容——一个使用jmp123解码器的MP3播放器项目。jmp123是一个开源的、用C语言编写的MP3解码库,它能够解析并解码MP3音频文件,将压缩的数字音频数据转化为可以播放的格式。这个...

    jmpg123.tar.gz_jmpg1_jmpg123_mp1_mp2_mp3 解码

    综上所述,"jmpg123.tar.gz_jmpg1_jmpg123_mp1_mp2_mp3 解码"涉及到的是用Java编写的MP1、MP2和MP3音频解码器的源代码,其在多媒体处理领域有广泛应用前景,同时也展示了Java在实现跨平台音频处理上的能力。...

    Java课程设计——电子音乐盒

    【Java课程设计——电子音乐盒】是一个以Java技术为基础,利用Java Media Framework(JMF)开发的音乐播放软件。这个项目旨在让学生掌握Java编程语言在多媒体应用中的实践,特别是音频处理和用户界面设计方面的能力...

    音乐播放器——湘潭大学JAVA课程设计题目

    开发者需要了解如何加载音频文件,如MP3或WAV,然后使用AudioInputStream和Clip类来解码和播放音频流。 3. **进度条显示**:进度条用于显示当前音乐的播放进度。这涉及到监听音乐播放状态,通过获取音乐总时长和...

    jmp123_400_utf8_mini:JAVA开源程序,包含MP3解码器库和播放器

    今天我们将聚焦于一个名为"jmp123_400_utf8_mini"的JAVA开源项目,它包含了MP3解码器库和播放器,对于那些想要深入理解音频处理和JAVA编程的朋友们来说,这是一个宝贵的资源。 首先,我们来解析一下这个项目的名称...

    java音乐播放器+网络收音机

    Java Sound API提供了一套接口和类,允许开发者处理音频输入、输出和处理,支持多种音频格式,如MP3、WAV等。此外,为了实现网络收音机功能,程序可能利用了HTTP流媒体技术,通过连接到电台服务器获取音频流并实时...

    安卓Android源码——基于SDL、FFmpeg的播放器源码.zip

    FFmpeg的JNI接口会被用来在Java层调用C/C++编写的解码器,这样可以充分利用CPU的性能并降低内存消耗。 4. **Android多媒体框架**: Android系统本身提供了一个多媒体框架,包括MediaPlayer类,它可以播放本地和网络...

    Android 使用 FFmpeg (一)——编译.so文件Demo

    - 考虑到性能和内存消耗,合理选择FFmpeg的编译选项,如是否包含所有解码器和编码器。 - 处理好异步操作,避免在主线程中执行耗时的原生代码,以免引起UI卡顿。 这个"Android 使用 FFmpeg (一)——编译.so文件...

    毕业设计——流媒体视频直播服务器(Java + MySQL + FFmpeg + RTSP + RTP).zip

    3. **FFmpeg**:FFmpeg是一个开源的跨平台多媒体处理工具,它包含了各种音频和视频编解码器,可以进行音视频的编码、解码、转换、封装等操作。在直播系统中,FFmpeg用于处理视频源,将其转化为适合网络传输的格式,...

    korau:Kotlin程序AUdio-纯Kotlin WAV,MP3和OGG vorbis解码器

    5. **解析器与解码器**:korau包含音频文件的解析器,能够读取和验证音频文件的头部信息,然后使用相应的解码器将压缩的数据转换为可播放的音频流。 6. **API友好**:korau的API设计简洁且直观,使得开发者可以轻松...

    java_ttplayer_src.rar_java 酒店管理系统_java 播放_界面_音乐播放器

    可能还会包含音频格式转换的逻辑,因为不同的音乐文件可能需要不同的解码器来播放。 在开发过程中,Eclipse作为集成开发环境(IDE)被提及,这意味着源代码是在Eclipse中编写、编译和调试的。Eclipse提供了丰富的...

    java实现收发邮件源码-awesome-go:令人惊叹的Go库、资源和闪亮事物的精选列表

    java实现邮件邮件源码真棒去 一个非常棒的 Go 库、资源和闪亮事物的精选列表。 贡献 如果您在此处看到不再维护或不适合的包或项目,请提交拉取请求以改进此文件。 谢谢! 内容 音频和音乐 用于处理音频的库。 名称 ...

    pcm-g711a-采集器-播放器 源代码

    在"pcm-capture-play"这个项目中,源代码很可能是用C++、C#或Java等编程语言编写的,涵盖了音频采集、编码/解码(如果涉及G711-Alaw)和播放的整个流程。开发者可能使用了一些开源库,如PortAudio用于跨平台的音频I/...

    【eoeAndroid特刊】第18期:Android音视频的编解码(实用1).zip

    有时,Android内置的编解码器可能无法满足特殊需求,这时可以考虑编写自定义编解码器。这需要深入理解编码算法,如MPEG-4 AAC编码、H.264编码等,并实现MediaCodec接口。 六、实战应用 1. 视频直播:通过推流和拉流...

    安卓Android源码——FFMpeg.rar

    使用硬件加速可以提升解码速度,但需要检查设备是否支持相应的编码器或解码器。 这个压缩包中的源码示例可能涵盖了如何在 Android 上构建 FFmpeg,如何初始化和使用 FFmpeg API,以及如何处理 Android 中特有的问题...

    Java接口到OpenCV FFmpeg和更多.zip

    Java接口到OpenCV FFmpeg和更多的主题涉及到计算机视觉和音视频处理领域,主要涵盖了Java编程语言如何与两个强大的开源库——OpenCV和FFmpeg进行交互。OpenCV是用于图像处理和计算机视觉的强大库,而FFmpeg则是一个...

    安卓Andriod源码——基于SDL、FFmpeg的播放器源码.zip

    其次,FFmpeg是一个强大的多媒体处理框架,它包含了各种编解码器、音视频容器格式的读写、音视频过滤等功能。在Android播放器源码中,FFmpeg扮演了核心角色,负责解析、解码音视频流。开发者可以借此了解如何在...

    Java实现雷霆战机简易程序

    【Java实现雷霆战机简易程序】是一个使用Java编程语言开发的游戏项目,主要涵盖了游戏设计、图形渲染、音频处理等多方面的技术。在这个项目中,开发者利用Java的灵活性和强大的库支持,构建了一个简单的飞行射击游戏...

    JAVA的相关

    它以其“一次编写,到处运行”(Write Once, Run Anywhere, WORA)的特性而闻名,因为Java程序可以在支持Java虚拟机(JVM)的任何平台上运行。在本文中,我们将关注基于Java的音乐播放器——JMPlayer的开发。 1. **...

Global site tag (gtag.js) - Google Analytics