2016-03-07 113 views
1

所以我被要求帮助一个Java游戏,并且我被赋予了音频角色。我得到的音频播放,但我需要它到我可以停止音频和启动一个新的音频字符串在另一个文件调用它。这就是我所拥有的;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"); 
} 
} 

回答

0

首先,声明你剪辑的运行功能之外,像这样: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等。

+0

在哪里可以实现剪辑的声明? – Jotohooh

+0

@Jotohooh在您的SoundTest文件的顶部 – ItzBenteThePig

+0

@Jotohooh编辑答案,让您更容易理解 – ItzBenteThePig