2014-11-23 109 views
1

嗨Stackoverflow!如何在特定時間內暫停剪輯/對象?

所以基本上,我有兩個音頻剪輯在我的Java程序中進行,我希望其中一個在特定時間停止,另一個在特定時間開始。

我會盡我所能地解釋代碼。 http://pastebin.com/1zGdb30x Music.java

package testingground; 


import java.io.IOException; 
import java.net.URL; 

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 Music { 
    public void musictwo() { 
     URL url; 
     try { 
      url = new URL("file:///D:/Yes/GUI/song.wav"); 
      Clip clip = AudioSystem.getClip(); 
      AudioInputStream ais = AudioSystem. 
       getAudioInputStream(url); 
      clip.open(ais); 
      clip.loop(100); 

     } catch (UnsupportedAudioFileException | IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (LineUnavailableException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 


    public void musicone() { 
     URL url; 
     try { 
      url = new URL("file:///D:/Yes/GUI/rival.wav"); 
      Clip clip = AudioSystem.getClip(); 
      AudioInputStream ais = AudioSystem. 
       getAudioInputStream(url); 
      clip.open(ais); 
      clip.loop(100); 
     } catch (UnsupportedAudioFileException | IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (LineUnavailableException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

} 

http://pastebin.com/nGm4DZfr Program.java

package testingground; 

import javax.swing.JOptionPane; 

public class Program { 
    public static void main(String[] args) { 
     System.out.println("The first song should play now!"); 
     Music a = new Music(); 
     a.musicone(); 
     System.out.println("The second song should play now!"); 
     a.musictwo(); 
     JOptionPane.showMessageDialog(null,"Press 'ok' to end the application."); 
    } 
} 

在Music.java,我有音頻文件的工作,他們是當地唯一的.wav文件只是我的電腦上使用。在program.java中,輸出是musicone和musictwo同時播放。有沒有辦法讓muscone播放,停止,然後音樂播放?

我試過的東西 - - 在program.java中有if和else語句來執行clip.stop()。沒有錯誤,它只是沒有工作。 - 從program.java獲取if和else布爾值以執行Music.java中的clip.stop()。沒有語法錯誤,它只是沒有工作。

回答

1

我理解你的問題的方式,你可以使用LineListener

只是,例如,這裏是一個類,它通過一個例子不勝枚舉,每當前一個完成時播放下一個流:

class Playlist implements LineListener { 
    private final List<AudioInputStream> list = new ArrayList<>(); 
    private Clip clip; 
    private int next; 

    @Override 
    public void update(LineEvent evt) { 
     if(evt.getType() == LineEvent.STOP) { 
      try { 
       playNext(); 
      } catch(LineUnavailableException | IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    void enqueue(AudioInputStream ais) { 
     synchronized(this) { 
      list.add(ais); 
     } 
    } 

    void playNext() throws LineUnavailableException, IOException { 
     synchronized(this) { 
      if(list.isEmpty()) { 
       throw new IllegalStateException(); 
      } 
      if(clip != null) { 
       if(clip.isRunning()) clip.stop(); 
       if(clip.isOpen()) clip.close(); 
      } 

      clip = AudioSystem.getClip(); 
      clip.addLineListener(listener); 
      try { 
       clip.open(list.get(next)); 
      } finally { 
       next = (next + 1) % list.size(); 
      } 
      clip.start(); 
     } 
    } 
} 
+0

不一定是我在問,但我看到你的解釋。有沒有辦法讓它停下來?感謝您的輸入! – Nigel 2014-11-23 17:50:07

+0

我不確定你的意思是*'停止條件'*。 – Radiodef 2014-11-23 19:03:39

+0

musicPlays;如果(條件){musicStops} – Nigel 2014-11-24 01:37:53

相關問題