2013-05-17 4 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 불가능하지만, 이는 LineListener를 장착하는 Clip와 함께입니다. 두 클립 사이를 뒤집는이 예제를 참조하십시오.

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도 지원합니다. –