简介
现有的在 Java applet 中对声音播放的支持使得声音播放任务变得很简单但是在应用程序中缺少这样的支持此篇小技巧将告诉你如何在 Java 应用程序中播放声音文件( 字)
在 Java 应用程序中播放声音文件在现有发行的 Java 版本中都没有正式的支持但别担心我们还是有办法的此篇小技巧将告诉你怎么做我们从 applet 中播放声音文件所需的基本步骤开始讲述然后慢慢转到讲述 Java 应用程序中的支持
在 applet 中播放声音文件非常简单一般需要以下步骤
创建一个 AudioClip 对象
装入 au 声音文件到 AudioClip 对象
一次播放或者不停循环播放声音
停止播放
下面是相应的代码
import javaapplet*;
AudioClip ac = getAudioClip(getCodeBase() soundFile);
acplay(); //play once
acstop(); //stop playing
acloop(); //play continuously
看起来在 Java 应用程序中用相同的代码来播放声音文件似乎也是可行的但很不幸如果你真这样做编译器就会报错为什么呢?因为 AudioClip 对象及其方法 getAudioClip() 属于javaapplet 包 而不属于应用程序包的可喜的是我们还可以自己做些改变来实现声音播放功能
解决这个问题的窍门是利用由 Sun 及 其JDK 提供的某些 undocumented 的特征先看看 Sun JDK 中的文件 classeszip (使用任何解压工具即可)发现其中不仅包含标准的 Java 包如 javaapplet 而且还存在包 sunaudio (在 sun/audio 的目录下)
包 sunaudio 中包含了用于播放声音文件所需的所有东西!下面是示例代码
import sunaudio*; //import the sunaudio package
import javaio*;
//** add this into your application code as appropriate
// Open an input stream to the audio file
InputStream in = new FileInputStream(Filename);
// Create an AudioStream object from the input stream
AudioStream as = new AudioStream(in);
// Use the static class member player from class AudioPlayer to play
// clip
AudioPlayerplayerstart(as);
// Similarly to stop the audio
AudioPlayerplayerstop(as);
如果要用一个 URL 做为声音流的源(source)则用下面的代码所示替换输入流来创建声音流
AudioStream as = new AudioStream (urlopenStream());
如果需要持续播放声音文件则要稍稍复杂一点
// Create audio stream as discussed previously
// Create AudioData source
AudioData data = asgetData();
// Create ContinuousAudioDataStream
ContinuousAudioDataStream cas = new ContinuousAudioDataStream (data);
// Play audio
AudioPlayerplayerplay (cas);
// Similarly to stop the audio
AudioPlayerplayerstop (cas);