2012-08-23 69 views
2

我想在Java中播放声音文件。我写了这样的代码:在Java中播放声音7

import java.io.File; 
import java.io.IOException; 

import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.Clip; 
import javax.sound.sampled.LineUnavailableException; 
import javax.sound.sampled.UnsupportedAudioFileException; 

public class SoundBang 
{ 
    private File _file; 
    private AudioInputStream _audio; 
    private Clip _clip; 

    public SoundBang() 
    { 
     _file = new File("file/sound/bang.wav"); 

     try 
     { 
      _audio = AudioSystem.getAudioInputStream(_file); 
      _clip = AudioSystem.getClip(); 
      _clip.open(_audio); 
      _clip.start(); 
     } 
     catch (LineUnavailableException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (UnsupportedAudioFileException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public static void main (String[ ] args) 
    { 
     new SoundBang(); 
    } 
} 

问题是我没有听到什么,当我运行此代码。

声音文件的URL是正确的(我通过打印绝对URL测试它,并且很好)。我使用Eclipse Juno,openjdk-7和Fedora 17与KDE。

+0

您是否启动后试过不设置MicroSecondPosition? – hsanders

+0

嗯,我觉得这句话是不需要的。 – Chu

回答

2

两件事情:

  1. clip.start产生一个新的线程在后台执行,当应用程序死了,就死了。在开始剪辑后尝试睡觉。
  2. 开始后有必要寻求前进吗?看起来这只是一个额外的路线。

尝试使你的主要方法:

public static void main (String[ ] args) 
{ 
    new SoundBang(); 
    Thread.sleep(2000); // Sleep 2 seconds 
} 
+0

优秀!我只是找到了上面的Thread.sleep(2000)_clip.start()来根据我的需要调整类。谢谢! – Chu

+0

@BrallanAguilar当然,睡觉只是一种简单的方式,使其工作正确,并不一定是最好的答案。您可能希望使用while循环结合http://docs.oracle.com/javase/1.5.0/docs/api/javax/sound/sampled/DataLine.html#使用“半忙”等待isRunning()isRunning()并在每次迭代中休眠半秒,这将允许您等待任何长度的剪辑来完成。 – hsanders

+0

你能举一个例子吗? – Chu