2014-03-27 26 views
0

这是用来播放声音的代码,它适用于我的需求。我只是不知道我是如何停止播放剪辑时,我想要的。我会如何阻止播放声音? -Java

public class Sound { 

    public Clip play(String filename) { 
     Clip clip = null; 

      try { 
       File file = new File(filename); 
       AudioInputStream audioIn = AudioSystem.getAudioInputStream(file); 
       clip = AudioSystem.getClip(); 
       clip.open(audioIn); 
       clip.stop(); 
       clip.start(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return clip; 
     } 
} 

回答

1

如果你看一看JavaDoc中Clip你应该注意,从DataLine继承的方法之一是stop

停止线。停止的行应停止I/O活动。但是,如果行 已打开并正在运行,则应该保留要求的资源 以恢复活动。停止的线路应保留其缓冲区中的所有音频数据,而不是将其丢弃,以便在恢复时,如果可能,I/O可以从 处继续停止。 (这并不保证 将不会有当前缓冲区之外的不连续点,当然如果停止条件持续太久,输入或输出样本可能会丢失。)如果需要,保留的数据可以是 通过调用flush方法丢弃。当音频捕获或回放 停止时,会生成STOP事件。

您可能需要验证这一点,但我似乎明白start是一个阻塞方法,也就是说,一旦调用,以将不返回,直到Clip播放完毕。这将需要Clip在单独启动Thread