Java音乐(开始/停止)



好的,所以我正在制作一个游戏,当你在不同的地区或出现中断时,音乐会发生变化,比如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方法的问题时提供帮助。

相关内容

  • 没有找到相关文章

最新更新