桌面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包中。
例如,假设有一个只能播放wav文件的程序,我们只要增加一个支持mp3文件解码的插件模块,就可以在不改动播放程序的任何一行代码的前提下,为这个播放程序添加播放mp3的能力。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器