2013-11-28 2 views
0

한 번에 하나의 오디오 파일을 재생하는 방법은 무엇입니까?한 번에 하나의 오디오 파일 재생

그래서 여러 개의 버튼이있는 GUI를 만들었으며 각 버튼마다 액션 리스너가 첨부되었습니다. 버튼을 누르면 오디오 파일 (.wav)이 재생됩니다. 이것은 잘 작동합니다. 문제는 내가 한 번에 하나의 파일 만 재생하므로 소리가 겹치지 않아서 무엇을 해야할지 모르겠다는 것입니다.

스레딩 및 동기화를 사용해야합니까? 모든 조언은 대단히 감사하겠습니다.

클래스 변수로 선언

편집

:

String soundName; 
AudioInputStream audioInputStream; 
Clip clip; 

의 ActionListener :

@Override 
public void actionPerformed(ActionEvent e) { 
    if(e.getSource()==buttonOne){ 
    soundName = "messageOne.wav"; 
    }else if(e.getSource()==buttonTwo){ 
    soundName = "messageTwo.wav"; 
    }else if(e.getSource()==buttonThree){ 
    soundName = "messgaeThree.wav"; 
    }else if(e.getSource()==buttonFour){ 
    soundName = "messageFour.wav"; 
    } 
    try { 
     audioInputStream = AudioSystem.getAudioInputStream(new File(soundName).getAbsoluteFile()); 
    } catch (UnsupportedAudioFileException ex) { 
     Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    try { 
     clip = AudioSystem.getClip(); 
    } catch (LineUnavailableException ex) { 
     Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    try { 
     clip.open(audioInputStream); 
    } catch (LineUnavailableException ex) { 
     Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    clip.start(); 
} 
+0

수행 할 경로가 많이 있습니다. 하나는 모든 버튼에 의해 사용되는 하나의 'Clip' 인스턴스 만 가지는 것입니다. –

+0

@AndrewThompson, 좀 더 자세히 설명해 주시겠습니까? – Student

+0

예, 할 수 있습니다. 당신이 이해하지 못하는 것에 대한 세부 사항을 제공 할 수 있습니까? –

답변

1

정지를 재 할당하고 새로 시작하기 전에 클립.

@Override 
public void actionPerformed(ActionEvent e) { 
    if (clip != null) { 
     if (clip.isActive()) clip.stop(); 
     if (clip.isOpen()) clip.close(); 
    } 
+0

고마워, 지금은 잘 작동한다! :) – Student