好的,所以我正在制作一个游戏,当你在不同的地区或者有中断时音乐会发生变化,就像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);
}
}
答案 0 :(得分:1)
目前,您正在停止分支中创建新的AudioStream
,并使用此方法调用stop方法。这是当前正在播放的不同对象。尝试将AudioStream
作为一个类变量,并在其上调用stop。
编辑:在包含您的代码的类的顶部...
class YourClass {
//the class member variable
private AudioStream as;
//[etc...]
在你的开始分支中:
// 'as' has already been defined above
as = new AudioStream(blah);
AudioPlayer.player.start(as);
System.out.println("going");
在你的停止分支中:
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
标识符可能有问题 - 如果您在实例化的类中调用此标识符,则不需要此标识符。
答案 1 :(得分:0)
我甚至无法在Eclipse IDE上访问这些sun.audio对象 - 我知道它们位于rt.jar中,但是有关于它们的标题信息是专有的等等。
Java Sound库(javax.sound.sampled)可以处理您想要做的事情吗? Clip和SourceDataLine都允许停止播放。如果你想使用原生Java,这是一种更常用的播放声音方式。
回放到这里:
http://docs.oracle.com/javase/tutorial/sound/playing.html
但总体而言,文档并不完全丰富,并附有示例。这个站点有示例代码
如果你遇到本机Java方法的问题,很多人都可以提供帮助。