在[url=http://ldjsyl.iteye.com/blog/174690]系统自动退出[/url]这篇文章中,遇到了声音上报频繁的时候,系统会毫无症状自动退出的情况。大概是因为AudioClip发声的时候,声音混合时会引起异常,以致JVM不能处理这个异常导致系统退出。下面大概讲讲java的发声实现。
一、AudioClip
AudioClip 接口是用于播放音频剪辑的简单抽象。多个 AudioClip 项能够同时播放,得到的声音混合在一起可产生合成声音。void play()开始播放此音频剪辑。每次调用此方法时,剪辑都从头开始重新播放。缺点就是声音混合时,系统会异常退出,优点是实现了循环播放功能。代码示例:
二、音频流
SUN公司提供的音频流,它的好处是不会出现声音卡的现象,坏处是没有循环功能,要实现循环就必须自己写算法控制。代码示例:
一、AudioClip
AudioClip 接口是用于播放音频剪辑的简单抽象。多个 AudioClip 项能够同时播放,得到的声音混合在一起可产生合成声音。void play()开始播放此音频剪辑。每次调用此方法时,剪辑都从头开始重新播放。缺点就是声音混合时,系统会异常退出,优点是实现了循环播放功能。代码示例:
import java.applet.*;
public class PlayAudio extends Applet {
String soundFile = "....";
AudioClip ac = getAudioClip(getCodeBase(), soundFile);
ac.play(); //play once
ac.stop(); //stop playing
ac.loop(); //play continuously
}
二、音频流
SUN公司提供的音频流,它的好处是不会出现声音卡的现象,坏处是没有循环功能,要实现循环就必须自己写算法控制。代码示例:
// 播放音乐、音效方法
public static void soundPlay(String sound) {
try {
InputStream music = new java.io.FileInputStream(sound);
AudioStream play_music = new sun.audio.AudioStream(music);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sun.audio.AudioPlayer.player.start(play_music);
}