首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的音乐(开始/停止)

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

Stack Overflow用户
提问于 2012-03-12 21:55:37
回答 2查看 18.3K关注 0票数 0

好的,我正在做一个游戏,当你在不同的地区,或者如果有中断,比如AI,音乐会发生变化。

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

代码语言:javascript
复制
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站点上转发,这样我就可以尽快得到回复,谢谢!)

编辑代码:(仍然不停止当前流,更多建议)

代码语言:javascript
复制
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);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-12 22:00:48

目前,您正在stop分支中创建一个新的AudioStream,并使用它调用stop方法。这是一个与当前播放的对象不同的对象。尝试将AudioStream设置为类变量,并对其调用stop。

编辑:在包含您的代码的类的顶部...

代码语言:javascript
复制
class YourClass {
    //the class member variable
    private AudioStream as;
    //[etc...]

在start分支中:

代码语言:javascript
复制
// 'as' has already been defined above
as = new AudioStream(blah);
AudioPlayer.player.start(as);
System.out.println("going");

在stop分支中:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-03-13 15:22:42

我甚至不能在Eclipse IDE上访问这些sun.audio对象--我知道它们在rt.jar中,但是有关于它们是专有的之类的头信息。

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

回放到这里:

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

但总体而言,文档中并没有包含丰富的示例。在这个站点上有示例代码

http://www.jsresources.org/

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9668361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档