在 applet 中播放声音文件非常简单,一般需要以下步骤:
站在用户的角度思考问题,与客户深入沟通,找到海兴网站设计与海兴网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广、主机域名、虚拟空间、企业邮箱。业务覆盖海兴地区。
创建一个 AudioClip 对象
装入 .au 声音文件到 AudioClip 对象
一次播放或者不停循环播放声音
停止播放
下面是相应的代码:import java.applet.*;AudioClip ac = getAudioClip(getCodeBase(), soundFile);
ac.play(); //play once
ac.stop(); //stop playing
解决这个问题的窍门是利用由 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.
playCycle(String s)这个是单曲重复播放;play(String s)这个是单曲播放。
/******* part one start *******/
//获取媒体文件流
AudioInputStream ais = AudioSystem.getAudioInputStream(new File(fileurl));
//获取文件格式
AudioFormat aif = ais.getFormat();
//这个类不知道是什么,没用过,在这里应该是对媒体流处理的一个类
SourceDataLine sdl = null;
//这个貌似通过媒体格式,获取媒体文件的信息
DataLine.Info info = new DataLine.Info(SourceDataLine.class,aif);
//通过媒体文件的信息初始化处理媒体文件的类
sdl = (SourceDataLine)AudioSystem.getLine(info);
//媒体工具类 打开媒体流
sdl.open(aif);
//媒体工具(播放器)开启
sdl.start();
/******* part one end *******/
/******* part two start ********/
int nByte = 0;
byte[] buffer = new byte[128];
//媒体工具类(播放器类)对媒体流进行写入处理,此时应该会有音乐响起吧
while(nByte != -1){
nByte = ais.read(buffer,0,128);
if(nByte = 0){
int oByte = sdl.write(buffer, 0, nByte);
//System.out.println(oByte);
}
}
//媒体流结束,并关闭这个媒体工具类
sdl.stop();
/******* part two end********/
import java.awt.*;
import java.applet.*;
import java.awt.Graphics;
public class dragon extends Applet
{
Image dg;
AudioClip sound;
public void init(){
dg=getImage(getDocumentBase(),"dragon.gif");
sound=getAudioClip(getDocumentBase(),"op.wav");
}
public void paint(Graphics g){
g.drawImage(dg,50,50,this);
}
public void start(){
sound.loop();
}
public void stop(){
sound.stop();
}
};
带声音的java程序最好嵌入到applet(applet又嵌入到网页中)中,这是我编写的程序,其中还有图片显示,和恐龙的声音。效果如图(动态的)
可以实现,参考如下代码:
package com.lolo;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.DataLine;
public class PlayMusic {
// 程序退出时执行的代码
public void doShutDownWork() {
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
try {
//Toolkit.getDefaultToolkit().beep();
Play();
Play();
} catch (Exception ex) {
}
}
});
}
//播放音频文件
public void Play(){
String fileurl = "file/tada.wav";
try{
AudioInputStream ais = AudioSystem.getAudioInputStream(new File(fileurl));
AudioFormat aif = ais.getFormat();
SourceDataLine sdl = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class,aif);
sdl = (SourceDataLine)AudioSystem.getLine(info);
sdl.open(aif);
sdl.start();
//play
int nByte = 0;
byte[] buffer = new byte[128];
while(nByte != -1){
nByte = ais.read(buffer,0,128);
if(nByte = 0){
int oByte = sdl.write(buffer, 0, nByte);
//System.out.println(oByte);
}
}
sdl.stop();
}catch(UnsupportedAudioFileException e){
e.printStackTrace();
} catch (IOException e) {
// TODO 自动产生 catch 区块
e.printStackTrace();
} catch (LineUnavailableException e) {
// TODO 自动产生 catch 区块
e.printStackTrace();
}
}
}
这个程序只要写对了音乐文件的URL地址,例如:new URL("file:/C:/tmp/1/Windows Ding.wav");
就可以播放音乐,除了可以播放.wav格式的音乐,还可以播放.au格式的音乐。
另外,如果你不希望音乐循环播放,你可以去掉audio1.loop();这一语句。
import java.applet.AudioClip;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.JFrame;
public class D extends JFrame{
D(){
setSize(200,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
URL codebase=null;
try {
codebase = new URL("file:/C:/tmp/1/Windows Ding.wav");
} catch (MalformedURLException e) {
e.printStackTrace();
}
AudioClip audio1=Applet.newAudioClip(codebase);
audio1.loop();
}
public static void main(String[] args) {
new D();
}
}