我在日食上制作了一个视频游戏,我将制作一首菜单歌曲并停止播放该歌曲,但是剪辑了一下.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();不行。
(抱歉英语不好)
答案 0 :(得分:1)
您的代码中存在许多令人困惑的事情。首先,我认为sun.audio.AudioPlayer已被弃用。我没有在Java 7 API中看到它。我非常确定它在控制你编写的代码中的javax.audio.Clip方面没有任何作用。
有关sun.audio.AudioPlayer的更多信息 past StackOverflow question链接。
另一个混乱的来源是您的命名约定。如果第一个字母是大写字母,我们希望这是一个类,而不是变量或方法。修复缩进也会使它更容易阅读。
我不明白为什么要将变量设置为false然后调用例程来加载并快速连续启动和停止播放。
剪辑的设计与播放时分开打开。如上所述,您的代码必须在执行启动命令之前将整个剪辑加载到RAM中。如果您事先加载Clip,也许在MenuAudio的构造函数中,那么您可以考虑一个计划,例如将剪辑变量传递给负责启动或停止它的任何方法。