用Java实现音频播放
日期:2008年2月13日 作者: 查看:[大字体 中字体 小字体]-
桌面PC的性能日益提高,Java虚拟机的优化技术也不断获得突破,这一切使得用Java处理实时信号成为可能。本文将通过设计和构造一个支持实时mp3、WAV和Ogg音频格式解码/回放的Java音乐播放器,阐述用JavaSound API编写音频处理程序的思路和一般过程。 JavaSound是一个小巧的低层API,支持数字音频和MIDI数据的记录/回放。在JDK 1.3.0之前,JavaSound是一个标准的Java扩展API,但从Java 2的1.3.0版开始,JavaSound就被包含到JDK之中。由于Java有着跨平台(操作系统、硬件平台)的特点,基于JavaSound的音频处理程序(包括本文的程序)能够在任何实现了Java 1.3+的系统上运行,无需加装任何支持软件。
一、JavaSound的体系结构
当前JDK的JavaSound API随同Java媒体框架(JMF,Java Media Framework)一起发布,主页在java.sun.com/prodUCts/java-media/jmf/,适合JDK 1.1以及更高的版本。除了JDK实现的JavaSound API之外,还有一个源代码开放的JavaSound实现是Tritonus,主页在http://www.tritonus.org/。
图一描述了JavaSound API的体系结构,虚线表示Sun的JavaSound标准定义的API调用。上面一根虚线表示我们编写音频处理程序要调用的API,JavaSound API包含在javax.sound.sampled和javax.sound.midi包中。两根虚线之间的部分就是JavaSound API的具体实现。

图一:JavaSound体系结构就象上面一根虚线表示的API具有统一标准一样,在所有的JavaSound实现中,图一下面一根虚线表示的SPI(服务提供者接口, Service Provider Interface)也是统一的。SPI的作用是以插件(Plug-In)的形式提供自定义的扩展模块,我们只要提供与SPI兼容的插件扩展模块,就可以在不改变API的情况下扩展音频处理程序的能力。SPI包含在java.sound.sampled.spi和javax.sound.midi.spi包中。
二、JavaSound混频原理
例如,假设有一个只能播放WAV文件的程序,我们只要增加一个支持MP3文件解码的插件模块,就可以在不改动播放程序的任何一行代码的前提下,为这个播放程序添加播放MP3的能力。图二阐述了JavaSound的混频器原理。在处理输入音频的应用中,对于来自各种音频输入端口的信号,例如麦克风、CD播放器、磁带播放器,等等,我们可以在它们到达TargetDataLine之前,利用混频器控制输入混频,最后在程序中通过TargetDataLine获得数字化的音频输入流。
图二:JavaSound混频器类似地,在处理输出音频的应用中,混频器用来对一系列来自SourceDataLine的数据进行混频处理,经处理后的信号可输出到各种输出端口,例如扬声器、耳机等。SourceDataLine是一个可写入音频信号数字流的设备,例如,我们可以从一个WAV文件读取内容写入到SourceDataLine,然后再通过扬声器输出。
输入到混频器的信号可以来源于剪辑。剪辑(Clip)是一个包含一段完整音频数据流的设备,或者说,剪辑就是一个缓冲在内存中的完整音频数据流。在一些要求反复播放音乐片段的场合,例如游戏的背景音乐,剪辑是很有用的。
图三描述了JavaSound API中一些常用的类、接口及其关系,所有图三显示的类、接口都通过Line这个基本接口统一起来。Line接口用来关闭/打开设备、注册事件监听器,以及提供一些用来调整声音效果的对象,例如调整音量大小的对象。AudioSystem在JavaSound体系中起着一个工厂(Factory)类的作用,提供了一系列的静态方法,我们通过这些静态方法来获取JavaSound系统默认配置的资源(所谓静态方法,就是可以在不创建AudioSystem实例的情况下直接调用的方法)。

- [1] [2] [3] [4] [5] 下一页
-
- 用Java实现音频播放 相关文章:
- ·PPS网络电视播放器常见问题解答
- ·QQ空间MP3播放器代码-800首音乐超酷版
- ·用VB6.0编写自己的MP3播放器
- ·QQ空间周杰伦FLASH播放器
- ·MediaPlayer9.0媒体播放器
- ·常用网页播放器代码
- ·放浪冒险谭 - 游戏攻略
- ·QQ空间一款视频播放器
- ·网页在线播放器代码大全
- ·好骡快走 迅雷电骡下载技巧放送
- 用Java实现音频播放 相关软件
- ·Storm Player 影音风暴播放器 V1.0.4
- ·csf文件播放器 V5.0.0 1118
- ·鼎点梦幻播放器 V4.0精简版
- ·电雷影音播放器 V1.0
- ·青霜微软媒体播放器RM解码器 V3.0
- ·Mplayer电影播放器 V20051105 绿色汉化版
- ·超级播放器(网络影视) V13.20
- ·确然影音播放器 V5.1.1.0
- ·Swfer Flash播放器 V0.5.11
- ·放浪冒险潭汉化版
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:手机Java小程序DIY
下一篇:EJB技术之旅(三)
精品推荐
热点TOP10
- ·Web2.0时代的核心应用:Ajax简介
- ·O/R MAPPING(Hibernate)方法小结
- ·开源技术——体验Struts
- ·利用JMF进行多媒体编程
- ·在桌面应用中使用JAVA DB
- ·tftp 服务器
- ·Hibernate一对多单向关系
- ·用Java实现音频播放
- ·Struts+Spring+Hibernate实现上传下载
- ·根据IP找地址的java实现
- ·J2ME游戏开发实例讲解
- ·[SNAP]实例讲解移动QQ在线平台
- ·候捷谈Java反射机制
- ·Why Java can be used for games?
- ·利用 Java Web Start发布你用java程序
- ·J2EE核心:iBatis DAO入门与进阶二
- ·FreeMarker概述
- ·一种通用的输入校验方法和气球泡提示的实现(键盘用户界面模块)
- ·如何制作动画程序
- ·Tapestry入门
特别推荐
- ·你能过关吗?J2EE面试题集锦(附答案)
- ·面向过程与面向对象的区别
- ·Tapestry入门
- ·候捷谈Java反射机制
- ·标准的web.xml
- ·Java异常处理的特殊情况
- ·SOAP协议初级指南
- ·Why Java can be used for games?
- ·用Java Socket制作广播信使程序
- ·J2ME游戏开发实例讲解
- ·用java实现print screen,读取位图文件,将位图文件转化位jpeg格式并保存成文件输出!
- ·[SNAP]实例讲解移动QQ在线平台
- ·0. Preface: Core Technologies
- ·一个简单实用的数据库操作框架
- ·开源技术——体验Struts
- ·Java资料:Swing中的事件处理详细资料
- ·Tomcat性能调整
- ·Java基础:三步学会Java Socket编程
- ·一种通用的输入校验方法和气球泡提示的实现(键盘用户界面模块)
- ·JBoss 4.0 简化了中间件的开发
