好的,我正在做一个游戏,当你在不同的地区,或者如果有中断,比如AI,音乐会发生变化。
所以我刚刚学会了如何在我的程序中播放音乐,现在我正试图让它停止,但我不确定如何做,下面是音乐播放的代码片段,然后当一个动作发生时,我试图用新的音乐覆盖它。
public static void songs(String word) {
String temp = word;
if (temp.equals("start")) {
try {
try {
blah = new FileInputStream("C:/Users/Austin/Desktop/Storage/programimages/game/battle.wav");
} catch (Throwable e) {
e.printStackTrace();
}
AudioStream as = new AudioStream(blah);
AudioPlayer.player.start(as);
System.out.println("going");
} catch (IOException e) {
System.err.println(e);
}
}
if (temp.equals("stop")) {
try {
try {
blah = new FileInputStream("C:/Users/Austin/Desktop/Storage/programimages/game/silence.wav");
} catch (Throwable e) {
e.printStackTrace();
}
AudioStream as = new AudioStream(blah);
AudioPlayer.player.stop(as);
System.out.println("stopping");
} catch (IOException e) {
System.err.println(e);
}
}
}这是唯一的方法,我能够找到有音乐播放,但如果你们有任何其他建议,请让我知道。
再一次,我想要有音效和音乐,现在发生的一切都是一首歌将会播放,在任何情况下它都不会停止,直到它达到长度的尽头。我希望能够在新的歌曲出现时停止播放,并允许音效弹出。
谢谢!(由于我被困在这个问题上了,现在需要一个答案,我可能会在一个或两个java站点上转发,这样我就可以尽快得到回复,谢谢!)
编辑代码:(仍然不停止当前流,更多建议)
public static void songs(String word) throws IOException {
String temp = word;
if (temp.equals("go")) {
try {
blah = new FileInputStream("C:/Users/Austin/Desktop/Storage/programimages/game/battle.wav");
} catch (Throwable e) {
e.printStackTrace();
}
AudioStream as = new AudioStream(blah);
AudioPlayer.player.start(as);
System.out.println("going");
}
if (temp.equals("stop")) {
//don't try and do things with a null object!
if (as != null) {
AudioPlayer.player.stop(as);
System.out.println("stopping1");
}
System.out.println("stopping2");
AudioPlayer.player.stop(as);
}
}发布于 2012-03-12 22:00:48
目前,您正在stop分支中创建一个新的AudioStream,并使用它调用stop方法。这是一个与当前播放的对象不同的对象。尝试将AudioStream设置为类变量,并对其调用stop。
编辑:在包含您的代码的类的顶部...
class YourClass {
//the class member variable
private AudioStream as;
//[etc...]在start分支中:
// 'as' has already been defined above
as = new AudioStream(blah);
AudioPlayer.player.start(as);
System.out.println("going");在stop分支中:
try
{
//don't try and do things with a null object!
if (as != null)
{
AudioPlayer.player.stop(as);
}
System.out.println("stopping");
}
catch (IOException e)
{
System.err.println(e);
}您的方法上的static标识符可能有问题-如果您从实例化的类中调用此标识符,则不需要此标识符。
发布于 2012-03-13 15:22:42
我甚至不能在Eclipse IDE上访问这些sun.audio对象--我知道它们在rt.jar中,但是有关于它们是专有的之类的头信息。
Java Sound library (javax.sound.sampled)可以处理您想要做的事情吗?Clip和SourceDataLine都允许停止播放。如果您想使用原生Java,这是一种更常见的声音播放方式。
回放到这里:
http://docs.oracle.com/javase/tutorial/sound/playing.html
但总体而言,文档中并没有包含丰富的示例。在这个站点上有示例代码
http://www.jsresources.org/
如果您在使用原生Java方法时遇到问题,这里有很多人可以为您提供帮助。
https://stackoverflow.com/questions/9668361
复制相似问题