服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

如何在java应用程序中播放声音文件


  简介
  现有的在 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);

扫描关注微信公众号