Java声音重复播放

时间:2013-03-24 19:46:33

标签: java audio

我正在尝试为我一直在制作的游戏添加声音,而且我无法让声音不止一次播放。我想我已经找到了原因,但我不确定如何解决它。我正在使用我在搜索Java声音教程时找到的枚举器。

问题是我在一个线程中调用声音,在我的update()方法中,并且每次调用声音的play()方法时,它都会开始剪辑。它第一次被调用,声音播放正常(我可能会有点冻结),但之后所有尝试播放声音都失败了。我没有任何例外或错误,声音不起作用。

public enum Sounds {
    RIFLE("rifle_fire.wav");

    private Clip clip;

    Sounds(String filename) {
        openClip(filename);
    }

    public synchronized void openClip(String filename) {
        try {
            URL audioFile = Sounds.class.getResource("/resources/sounds/" + filename);

            AudioInputStream audio = AudioSystem.getAudioInputStream(audioFile);
            AudioFormat format = audio.getFormat();
            DataLine.Info info = new DataLine.Info(Clip.class, format);
            clip = (Clip) AudioSystem.getLine(info);

            clip.open(audio);
        } catch (UnsupportedAudioFileException uae) {
            System.out.println(uae);
        } catch (IOException ioe) {
            System.out.println(ioe);
        } catch (LineUnavailableException lue) {
            System.out.println(lue);
        }
    }

    public synchronized void play() {
        if(clip.isRunning()) clip.stop();
        clip.setFramePosition(0);
        clip.start();
    }

    public static void init() {
        values();
    }
}

这是我使用的枚举器。它是从我主线程的update()方法调用的,每20 ms更新一次。在更新方法中,我这样称呼它。

// If the left mouse button is held down, create a new projectile.
if(Globals.buttons[0] && !player.isOnCooldown()) {
    createParticle(pAngle);
    Sounds.RIFLE.play();
}

有人建议我在使用它之后需要关闭它,但声音只打开一次......为什么我需要关闭它?有谁知道问题是什么?

0 个答案:

没有答案