2013-05-17 6 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. –