【问题标题】:Starting and stopping music in background在后台启动和停止音乐
【发布时间】:2014-02-04 11:39:30
【问题描述】:

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

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);
    }
}

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

我该怎么做呢?感谢您的帮助!

【问题讨论】:

  • 你需要引用当前活动的Clip,这样你就可以与它的方法进行交互
  • @MadProgrammer 你能解释一下怎么做吗?我以前从未真正处理过声音。
  • Clip javadoc。我建议您阅读它,并注意启动/停止功能。

标签: java audio


【解决方案1】:

它与声音无关,它与能够访问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,因此您可能需要进行一些其他调整,但这是您所追求的基本概念...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多