首页 > 解决方案 > 如何停止运行剪辑

问题描述

我在那里尝试了一些关于它的主题,但音乐不会停止。我的代码看起来不错,但可能我遗漏了什么?

public void playMusic(String musicLocation) {
        try {
            File musicPath = new File(musicLocation);
            AudioInputStream audioInput = AudioSystem.getAudioInputStream(musicPath);
            Clip clip = AudioSystem.getClip();
            clip.open(audioInput);
            if (musicPath.exists()&&inGame == true) {
                clip.start();
                clip.loop(Clip.LOOP_CONTINUOUSLY);
            } 
            if (musicPath.exists()&&inGame == false) {
                clip.stop();
            }
            else {
                System.out.println("Cannot find audio file!");
                
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

当游戏开始时,我点击开始,inGame值设置为 true,音乐开始播放。当回合结束时,值inGame设置为 false 但我上面的代码似乎不起作用。下面的代码使剪辑开始“当我按下's'键时”

if (key == 's' || key == 'S') {
                
                inGame = true;
                playMusic(filepath);
                initGame();

            }

谢谢你的想法。编辑:我忘了这个String filepath = "pacmanMusic.wav";

由于问题而添加:

private void death() {
        pacsLeft--;
        
        if(pacsLeft == 0) {
            inGame = false;
            //createFile();
            
        }
        writeScoreToFile();     
        continueLevel();
    }
    
    private void win() {
        N_GHOSTS--;
        if(N_GHOSTS == 0) {
            inGame = false;
            win_intro++;
        }
        
        continueLevelWin();
    }

标签: java

解决方案


我认为问题在于您假设 AudioSystem.getClip() 将返回当前剪辑,因此您可以在刚刚从 getClip() 获得的剪辑上调用 stop() 以停止当前播放音频,

据我所知,每次调用 getClip() 时,都会得到一个新剪辑。

因此,如果要停止当前正在播放的剪辑,则必须在开始播放时保留对剪辑的引用。然后,要停止该剪辑,您必须在同一个剪辑实例上调用 stop(),而不是一个新实例。


推荐阅读