解码一帧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解码器——解码Layer2
相关推荐
这个压缩包文件的标题揭示了它的核心内容——一个使用jmp123解码器的MP3播放器项目。jmp123是一个开源的、用C语言编写的MP3解码库,它能够解析并解码MP3音频文件,将压缩的数字音频数据转化为可以播放的格式。这个...
综上所述,"jmpg123.tar.gz_jmpg1_jmpg123_mp1_mp2_mp3 解码"涉及到的是用Java编写的MP1、MP2和MP3音频解码器的源代码,其在多媒体处理领域有广泛应用前景,同时也展示了Java在实现跨平台音频处理上的能力。...
【Java课程设计——电子音乐盒】是一个以Java技术为基础,利用Java Media Framework(JMF)开发的音乐播放软件。这个项目旨在让学生掌握Java编程语言在多媒体应用中的实践,特别是音频处理和用户界面设计方面的能力...
开发者需要了解如何加载音频文件,如MP3或WAV,然后使用AudioInputStream和Clip类来解码和播放音频流。 3. **进度条显示**:进度条用于显示当前音乐的播放进度。这涉及到监听音乐播放状态,通过获取音乐总时长和...
今天我们将聚焦于一个名为"jmp123_400_utf8_mini"的JAVA开源项目,它包含了MP3解码器库和播放器,对于那些想要深入理解音频处理和JAVA编程的朋友们来说,这是一个宝贵的资源。 首先,我们来解析一下这个项目的名称...
Java Sound API提供了一套接口和类,允许开发者处理音频输入、输出和处理,支持多种音频格式,如MP3、WAV等。此外,为了实现网络收音机功能,程序可能利用了HTTP流媒体技术,通过连接到电台服务器获取音频流并实时...
FFmpeg的JNI接口会被用来在Java层调用C/C++编写的解码器,这样可以充分利用CPU的性能并降低内存消耗。 4. **Android多媒体框架**: Android系统本身提供了一个多媒体框架,包括MediaPlayer类,它可以播放本地和网络...
- 考虑到性能和内存消耗,合理选择FFmpeg的编译选项,如是否包含所有解码器和编码器。 - 处理好异步操作,避免在主线程中执行耗时的原生代码,以免引起UI卡顿。 这个"Android 使用 FFmpeg (一)——编译.so文件...
3. **FFmpeg**:FFmpeg是一个开源的跨平台多媒体处理工具,它包含了各种音频和视频编解码器,可以进行音视频的编码、解码、转换、封装等操作。在直播系统中,FFmpeg用于处理视频源,将其转化为适合网络传输的格式,...
5. **解析器与解码器**:korau包含音频文件的解析器,能够读取和验证音频文件的头部信息,然后使用相应的解码器将压缩的数据转换为可播放的音频流。 6. **API友好**:korau的API设计简洁且直观,使得开发者可以轻松...
可能还会包含音频格式转换的逻辑,因为不同的音乐文件可能需要不同的解码器来播放。 在开发过程中,Eclipse作为集成开发环境(IDE)被提及,这意味着源代码是在Eclipse中编写、编译和调试的。Eclipse提供了丰富的...
java实现邮件邮件源码真棒去 一个非常棒的 Go 库、资源和闪亮事物的精选列表。 贡献 如果您在此处看到不再维护或不适合的包或项目,请提交拉取请求以改进此文件。 谢谢! 内容 音频和音乐 用于处理音频的库。 名称 ...
在"pcm-capture-play"这个项目中,源代码很可能是用C++、C#或Java等编程语言编写的,涵盖了音频采集、编码/解码(如果涉及G711-Alaw)和播放的整个流程。开发者可能使用了一些开源库,如PortAudio用于跨平台的音频I/...
有时,Android内置的编解码器可能无法满足特殊需求,这时可以考虑编写自定义编解码器。这需要深入理解编码算法,如MPEG-4 AAC编码、H.264编码等,并实现MediaCodec接口。 六、实战应用 1. 视频直播:通过推流和拉流...
使用硬件加速可以提升解码速度,但需要检查设备是否支持相应的编码器或解码器。 这个压缩包中的源码示例可能涵盖了如何在 Android 上构建 FFmpeg,如何初始化和使用 FFmpeg API,以及如何处理 Android 中特有的问题...
Java接口到OpenCV FFmpeg和更多的主题涉及到计算机视觉和音视频处理领域,主要涵盖了Java编程语言如何与两个强大的开源库——OpenCV和FFmpeg进行交互。OpenCV是用于图像处理和计算机视觉的强大库,而FFmpeg则是一个...
其次,FFmpeg是一个强大的多媒体处理框架,它包含了各种编解码器、音视频容器格式的读写、音视频过滤等功能。在Android播放器源码中,FFmpeg扮演了核心角色,负责解析、解码音视频流。开发者可以借此了解如何在...
【Java实现雷霆战机简易程序】是一个使用Java编程语言开发的游戏项目,主要涵盖了游戏设计、图形渲染、音频处理等多方面的技术。在这个项目中,开发者利用Java的灵活性和强大的库支持,构建了一个简单的飞行射击游戏...
它以其“一次编写,到处运行”(Write Once, Run Anywhere, WORA)的特性而闻名,因为Java程序可以在支持Java虚拟机(JVM)的任何平台上运行。在本文中,我们将关注基于Java的音乐播放器——JMPlayer的开发。 1. **...