好的,所以我正在制作一个游戏,当你在不同的地区或出现中断时,音乐会发生变化,比如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);
}
}
当前您正在stop分支中创建一个新的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
标识符可能有问题——如果从实例化类中调用它,则不需要它。
我甚至无法在Eclipse IDE上访问这些sun.audio对象——我知道它们在rt.jar中,但有关于它们是专有的之类的头部信息。
Java声音库(javax.Sound.sampled)能处理您想要做的事情吗?Clip和SourceDataLine都允许停止播放。如果您想使用本机Java,这是一种更常见的声音播放方式。
播放到这里:
http://docs.oracle.com/javase/tutorial/sound/playing.html
但总的来说,文档中并没有非常丰富的示例。这个站点有示例代码
http://www.jsresources.org/
这里有很多人可以在您遇到本地Java方法的问题时提供帮助。