Java   Tip   24:   如何在应用程序中播放声音文件  
  一个在   Java   应用程序中播放声音程序的   step-by-step   的向导    
   
  Chong   Ser   Wah    
  John   D.   Mitchell    
  简介  
  现有的在   Java   applet   中对声音播放的支持使得声音播放任务变得很简单,但是在应用程序中缺少这样的支持。此篇小技巧将告诉你如何在   Java   应用程序中播放声音文件。(650   字)    
  在   Java   应用程序中播放声音文件在现有发行的   Java   版本中都没有正式的支持,但别担心,我们还是有办法的。此篇小技巧将告诉你怎么做--我们从   applet   中播放声音文件所需的基本步骤开始讲述,然后慢慢转到讲述   Java   应用程序中的支持。    
  在   applet   中播放声音文件非常简单,一般需要以下步骤:    
   
   
  创建一个   AudioClip   对象    
  装入   .au   声音文件到   AudioClip   对象    
  一次播放或者不停循环播放声音    
  停止播放    
  下面是相应的代码:    

import   java.applet.*;   
 
    
 
  AudioClip   ac   =   getAudioClip(getCodeBase(),   soundFile);   
 
  ac.play();   //play   once   
 
  ac.stop();   //stop   playing   
 
  ac.loop();   //play   continuously


   
   
  看起来,在   Java   应用程序中用相同的代码来播放声音文件似乎也是可行的。但很不幸,如果你真这样做,编译器就会报错。为什么呢?因为   AudioClip   对象及其方法   getAudioClip()   属于java.applet   包   --   而不属于应用程序包的。可喜的是我们还可以自己做些改变来实现声音播放功能。    
   
  解决这个问题的窍门是利用由   Sun   及   其JDK   提供的某些   undocumented   的特征。先看看   Sun   JDK   中的文件   classes.zip   (使用任何解压工具即可),发现其中不仅包含标准的   Java   包如   java.applet   而且还存在包   sun.audio.   (在   sun/audio   的目录下.)    
   
  包   sun.audio   中包含了用于播放声音文件所需的所有东西!下面是示例代码:    
   

import   sun.audio.*;   //import   the   sun.audio   package   
 
  import   java.io.*;   
 
    
 
  //**   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.   
 
  AudioPlayer.player.start(as);     
 
    
 
  //   Similarly,   to   stop   the   audio.   
 
  AudioPlayer.player.stop(as);


   
   
  如果要用一个   URL   做为声音流的源(source),则用下面的代码所示替换输入流来创建声音流:    
   

AudioStream   as   =   new   AudioStream   (url.openStream());


   
   
  如果需要持续播放声音文件,则要稍稍复杂一点:    
   

//   Create   audio   stream   as   discussed   previously.   
 
    
 
  //   Create   AudioData   source.   
 
  AudioData   data   =   as.getData();   
 
    
 
  //   Create   ContinuousAudioDataStream.   
 
  ContinuousAudioDataStream   cas   =   new   ContinuousAudioDataStream   (data);   
 
    
 
  //   Play   audio.   
 
  AudioPlayer.player.play   (cas);   
 
    
 
  //   Similarly,   to   stop   the   audio.   
 
  AudioPlayer.player.stop   (cas);


   
   
  现在知道怎么做了吧?别忘了,此技巧用到了没有写入文档的特征,所以它不保证在任何情况下都凑效,但用当前   SUN   的   JDK   是没有问题的。