当前位置: 首页 > 知识库问答 >
问题:

在后台开始和停止音乐

章承基
2023-03-14

我正在做一个游戏,里面有背景音乐。我想添加一个启动和停止音乐的静音按钮,但我不知道怎么做。创建音乐的方法是:

public static void backgroundMusic() {
    try {
      AudioInputStream audio = AudioSystem.getAudioInputStream(new File("SoundFile.wav"));
      Clip clip = AudioSystem.getClip();
      clip.open(audio);
      clip.start();
    } 
    catch(UnsupportedAudioFileException uae) {
      System.out.println(uae);
    } 
    catch(IOException ioe) { 
      System.out.println(ioe);
    } 
    catch(LineUnavailableException lua) { 
      System.out.println(lua);
    }
}

我想做的是在按钮的动作处理程序中,我想添加一个静音按钮,如果用户愿意,它可以启动和停止音频。所以它应该是这样的:如果(e.getSource()==muteButton){//启动和停止音乐}

我该怎么做?谢谢你的帮助!

共有1个答案

戴高远
2023-03-14

它与声音无关,它与能够访问Clip引用有关。因为您已经创建了对Clip的本地引用,所以其他任何东西都无法访问引用以更改状态…

您需要更改本地引用,使其成为类级引用,允许其他方法与之交互。。。

例如

protected static Clip clip;


public static void backgroundMusic() {
    try {
      if (clip == null) {
          AudioInputStream audio = AudioSystem.getAudioInputStream(new File("SoundFile.wav"));
          clip = AudioSystem.getClip();
          clip.open(audio);
      } 
      if (!clip.isRunning()) {
          clip.start();
      }
    } 
    catch(UnsupportedAudioFileException uae) {
      System.out.println(uae);
    } 
    catch(IOException ioe) { 
      System.out.println(ioe);
    } 
    catch(LineUnavailableException lua) { 
      System.out.println(lua);
    }
}

public static void stopBackgroundMusic() {
    if (clip != null) {
      clip.stop();
    } 
}

PS-我从来没有真正处理过音频API,所以您可能需要进行一些其他调整,但这是您所追求的基本概念……

 类似资料:
  • 当开始播放时,会抛出以下断言: 进入后台状态后,抛出以下断言,音频挂起: 这在iOS 12中是不发生的,当它在后台时,音频会正常播放。

  • 在我的一个活动中,有一个使用mediaPlayer播放音乐的按钮。它还可以选择在后台播放音乐,或者在活动结束时停止。 我用这个代码。 这很好用。现在的问题是,当用户返回活动并按下播放按钮时,它会启动一个新的mediaPlayer并播放新的音乐。当新音乐开始播放时,我想在后台停止播放以前的音乐。 这是我的代码 以及MediaPlayer声明 在创建之前

  • 我有一个关于和应用程序间音频的问题。让我解释一下情况: 我有一个像spotify这样的应用程序,它可以在背景中播放音乐 我有一个应用程序可以打开webview()并播放像youtube一样的视频或仅播放声音。 当视频或声音在webview中播放时,背景音乐也会停止

  • 所以这是我需要解决的大事。我有Visual C#应用程序。在这个应用程序中,用户输入数据并单击Execute。当他们点击执行时,核心方法开始在新线程中,在那个线程和方法是一个循环。不断地使用方法调用器,我向UserForm发送更新,循环实际上在做什么。例如,像这样,我在每个cicle中更新progressBar。