2013-05-17 43 views
1

我試圖按順序播放音頻剪輯,但它們都在同一時間播放。我不知道我做錯了什麼。能否請你幫忙。我正在使用JFrame,並且此代碼給出了運行時錯誤。在JApplet中連續播放音頻剪輯

AudioClip click; 
AudioClip click2; 

URL urlClick1 = DisplayMath.class.getResource("number11.wav"); 
click = Applet.newAudioClip(urlClick1); 

URL urlClick2 = DisplayMath.class.getResource("number12.wav"); 
click2 = Applet.newAudioClip(urlClick2); 

click.play(); 
click.notify(); 

try { 
    click2.wait(); 
} 
catch (InterruptedException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
} 
click2.play(); 

回答

1

你想要實現的功能是不可能與AudioClip,但它是一個Clip到一個LineListener連接。看到這個例子在兩個剪輯之間翻轉。

import javax.sound.sampled.LineListener; 
import javax.swing.*; 

class TwoClips { 

    public static void main(String[] args) throws Exception { 
     URL url1 = new URL("http://pscode.org/media/100_2817-linear.wav"); 
     URL url2 = new URL("http://pscode.org/media/leftright.wav"); 
     final Clip clip1 = AudioSystem.getClip(); 
     clip1.open(AudioSystem.getAudioInputStream(url1)); 
     final Clip clip2 = AudioSystem.getClip(); 
     clip2.open(AudioSystem.getAudioInputStream(url2)); 
     LineListener listener = new LineListener() { 

      Clip currentClip = clip1; 

      @Override 
      public void update(LineEvent event) { 
       if (event.getType() == LineEvent.Type.STOP) { 
        if (currentClip == clip1) { 
         currentClip = clip2; 
        } else { 
         currentClip = clip1; 
        } 
        currentClip.setFramePosition(0); 
        currentClip.start(); 
       } 
      } 
     }; 
     clip1.addLineListener(listener); 
     clip2.addLineListener(listener); 
     Runnable r = new Runnable() { 

      @Override 
      public void run() { 
       clip1.start(); 
       JOptionPane.showMessageDialog(null, "Close me to exit!"); 
      } 
     }; 
     // Swing GUIs should be created and updated on the EDT 
     // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html 
     SwingUtilities.invokeLater(r); 
    } 
} 
+0

我有大約5剪輯,我希望他們按順序(僅一次)。我的意思是我不想讓剪輯發揮出比once..Thanks多打了很多 – Kopiko

+0

一個SourceDataLine的也可能是首選到一個剪輯,因爲你只播放一次音頻文件。 SDL也支持LineListener。 –