Java中的音乐(开始/停止)

时间:2012-03-12 13:55:37

标签: java javasound fileinputstream audiostreamer

好的,所以我正在制作一个游戏,当你在不同的地区或者有中断时音乐会发生变化,就像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);
    }
}

2 个答案:

答案 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

但总体而言,文档并不完全丰富,并附有示例。这个站点有示例代码

http://www.jsresources.org/

如果你遇到本机Java方法的问题,很多人都可以提供帮助。