Java剪辑(Clip.Stop无法正常工作)

时间:2016-05-21 18:24:10

标签: java eclipse audio lwjgl

我在日食上制作了一个视频游戏,我将制作一首菜单歌曲并停止播放该歌曲,但是剪辑了一下.stop();不工作我不知道为什么请帮助我。菜单歌曲Clip.play();和Clip.loop(Clip.LOOP_CONTINUOUSLY);但只有当我关闭游戏时,我才能停止播放歌曲。

package Audio;

import java.io.File;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

import sun.audio.AudioPlayer;


public class MenuAudio {

public static boolean stopped = false;

public static void Start(){
System.out.println(stopped);
try{
File f = new File("C:\\Games\\Test\\Assets\\sound\\menu\\menuLoop.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream(f);
clip.open(ais);
clip.start();
clip.loop(Clip.LOOP_CONTINUOUSLY);
AudioPlayer.player.stop(ais);
if(stopped == true) // work
{
    clip.stop(); //not work
    clip.close(); //not work
    stopped = false; //work
    System.out.println(stopped);//work
} 

}catch(Exception exception){System.out.println("WAV FILES NOT FOUND!! ");}

}

} 

boolean停止在此代码的另一个类中返回true

    int test = 0;
 //code useless
    ........
 //code useless
    MenuAudio.Start(); // play the sound
 //code useless
    ........
 //code useless

if(Keyboard.isKeyDown(Keyboard.KEY_LEFT)){  //work
            test = 0;
        }

        if(test == 0 && Keyboard.isKeyDown(Keyboard.KEY_RIGHT)){ //work
            MenuAudio.stopped = true;
            MenuAudio.Start();
            test = 1;
        }

这段代码很有用 控制台返回: 真正 假 如果我按下右后的左键。 我不知道为什么Clip.stop();不行。

(抱歉英语不好)

1 个答案:

答案 0 :(得分:1)

您的代码中存在许多令人困惑的事情。首先,我认为sun.audio.AudioPlayer已被弃用。我没有在Java 7 API中看到它。我非常确定它在控制你编写的代码中的javax.audio.Clip方面没有任何作用。

有关sun.audio.AudioPlayer的更多信息 past StackOverflow question链接。

另一个混乱的来源是您的命名约定。如果第一个字母是大写字母,我们希望这是一个类,而不是变量或方法。修复缩进也会使它更容易阅读。

我不明白为什么要将变量设置为false然后调用例程来加载并快速连续启动和停止播放。

剪辑的设计与播放时分开打开。如上所述,您的代码必须在执行启动命令之前将整个剪辑加载到RAM中。如果您事先加载Clip,也许在MenuAudio的构造函数中,那么您可以考虑一个计划,例如将剪辑变量传递给负责启动或停止它的任何方法。