Java 语言每发行一个主要版本,都会给音频功能带来稳步的提高。JDK 的 1.1 发行版以前(包括 1.1 发行版)的版本中,可以在 java.applet 包中找到对 8 位单声道声音的基本支持。一个 AU 格式的音频剪辑可以用 URL 来载入,并且只有三个操作可以使用:播放、停止和循环。1.2 发行版中改进了这种情况。
从 8 位到 16 位
Java 2 第一个发行版(版本 1.2)集成了一个经 Beatnik 公司许可的新的声音引擎,提供对各种常用格式的 16 位立体声的支持,包括 AU、WAV、AIFF 和多种 MIDI 格式。
这个版本中还附加了新的静态方法 java.applet.Applet.newAudioClip() ,它使得在应用程序中使用声音更加容易,而不仅仅在 applet 中。然后,1.3 版本取得了巨大的进步。
Java Sound API(Java 声音 API)
平台的 1.3 版本取得了目前为止最大的进步。这个版本使用相同的 Beatnik 声音引擎及以前所有的功能,并增加了一个全新的 API ― Java Sound API。
Java Sound API 提供了一套扩展的音频功能,并可通过新的 javax.media.sound.sampled 和 javax.media.sound.midi 包来访问。
javax.media.sound.sampled 包包含从各种声源回放声音的类,和最多能混合 64 声道的类。每一个音频信号可以通过不同的方法进行控制和处理,比如在不同文件格式之间的转换,和对效果(如增益和回响)的使用。同时还支持输入源(例如麦克风)的音频捕捉。
javax.media.sound.midi 包提供 MIDI 功能,包括载入音色库和从 MIDI 数据中生成声音,以及回放 MIDI 序列。
遗漏了什么?硬件加速
Java 音频功能还缺乏一个重要的方面 ― 硬件加速。缺乏这种支持意味着不管您的声卡硬件性能多么优秀,这些功能都无法被使用。这样的结构确实带来了好的跨平台可移植性,但付出的代价是高 CPU 开销和较低的性能。
自动化事件:AWT 机器人
1.3 版本中新加入的 java.awt.Robot 类被设计成在本机平台上生成输入事件。提供的操作包括:
移动鼠标指针到屏幕上给定的位置
生成鼠标键按下和释放事件
生成键盘按下和释放事件
这种功能为测试自动化带来了全新的可能性。例如,一系列事件可以被一次性记录,然后以全自动的方式自动回放任意遍。其它的功能还提供了测试一个屏幕坐标的像素颜色的方法,甚至可以将屏幕上的一整块区域作为一个图像缓冲捕捉下来。