0

好的,所以我正在制作一个游戏,当你在不同的地区或有中断时,音乐会发生变化,比如人工智能。

所以我刚刚学会了如何在我的程序中显示音乐,现在我正试图让它停止,但我不确定如何,下面是一段音乐播放的代码片段,然后我尝试用新的覆盖它动作发生时的音乐。

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);
    }
}
4

2 回答 2

1

目前,您正在停止分支中创建一个新AudioStream分支并使用它调用停止方法。这是与当前正在播放的对象不同的对象。尝试制作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- 如果您从实例化类中调用它,则不需要它。

于 2012-03-12T14:00:47.773 回答
0

我什至无法在我的 Eclipse IDE 上访问这些 sun.audio 对象——我知道它们在 rt.jar 中,但是有关于它们是专有的等的标题信息。

Java Sound 库 (javax.sound.sampled) 可以处理您想做的事情吗?Clip 和 SourceDataLine 都允许停止播放。如果您想使用本机 Java,这是一种更常见的播放声音的方式。

回放到这里:

http://docs.oracle.com/javase/tutorial/sound/playing.html

但总体而言,文档中的示例并不十分丰富。这个网站上有示例代码

http://www.jsresources.org/

如果您在使用本机 Java 方法时遇到问题,这里有很多人可以提供帮助。

于 2012-03-13T07:22:41.720 回答