Java游戏的背景音乐

时间:2016-03-07 15:40:15

标签: java audio

所以我被要求帮助Java游戏并且我已经获得了音频角色。我得到了要播放的音频,但是我需要将它发送到可以停止音频并在另一个调用它的文件中启动新音频字符串的地方。这就是我所拥有的;

import java.io.*;
import java.net.URL;
import javax.sound.sampled.*;
import javax.swing.*;

public class SoundTest{

// Constructor
public static void Run(String pen)throws InterruptedException {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setTitle("Test Sound");
f.setSize(300, 200);
f.setVisible(false);       

try {
     // Open an audio input stream.           
      File soundFile = new File(pen); 
      AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);              
      Clip clip = AudioSystem.getClip();

     clip.open(audioIn);
     clip.start();
  } catch (UnsupportedAudioFileException e) {
     e.printStackTrace();
  } catch (IOException e) {
     e.printStackTrace();
  } catch (LineUnavailableException e) {
     e.printStackTrace();
  }
 }
}

我有这个称之为

 import java.io.*;
 import java.net.URL;
 import javax.sound.sampled.*;
 import javax.swing.*;

public class SoundCall{


public static void main(String[] args)throws InterruptedException {
JFrame f = new JFrame();

SoundTest sound = new SoundTest();
sound.Run("Jskee_-_I_Am_Pharaoh_.wav");

JOptionPane.showMessageDialog(f,"Window","Cracker",JOptionPane.PLAIN_MESSAGE);
sound.stop;
sound.Run("Rejekt_-_Crank.wav");
 }
}

1 个答案:

答案 0 :(得分:0)

首先,在Run函数之外声明你的Clip,如下所示:Clip clip;然后只做clip = AudioSystem.getClip();最后,在你的SoundTest类中创建一个看起来像这样的停止函数:

public boolean stop(int id) {
    if (clips.get(id-1) != null) {
        clips.get(id-1).stop();
        return true;
    }
    return false;
}

返回布尔值用于检查,以便您的应用程序确定它是否已停止音乐。这就是你的完整SoundTest文件之后的样子:

import java.io.*;
import java.net.URL;
import javax.sound.sampled.*;
import javax.swing.*;

public class SoundTest{

private ArrayList<Clip> clips = new ArrayList<Clip>();

// Constructor
public void Run(String pen)throws InterruptedException {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setTitle("Test Sound");
f.setSize(300, 200);
f.setVisible(false);       

try {
     // Open an audio input stream.           
      File soundFile = new File(pen); 
      AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);              
      Clip clip = AudioSystem.getClip();

     clip.open(audioIn);
     clip.start();
     clips.add(clip);
  } catch (UnsupportedAudioFileException e) {
     e.printStackTrace();
  } catch (IOException e) {
     e.printStackTrace();
  } catch (LineUnavailableException e) {
     e.printStackTrace();
  }
 }
 public boolean stop(int id) {
    if (clips.get(id-1) != null) {
        clips.get(id-1).stop();
        return true;
    }
    return false;
}
}

在SoundCall课程中,只需执行

即可
if(sound.stop(1)) { //1 is an id, I made it so that it starts at 1, not 0.
      System.out.println("Audio stopped.");
} else {
      System.out.println("Audio has not stopped.");
}

id是剪辑被调用的时候,有点儿。如果它是第一个要执行的剪辑,则id为1,如果是第二个id为2等。