2015-01-10 3 views
0

WAV 클립을 재생하려고하는데 몇 가지 문제가 있습니다. 여기에 내가 사용하고 코드입니다 : 재생할 WAV 파일을 가져올 수 없습니다.

public class NewClass { 
private File soundFile = new File("/Project/src/model/soundfile.wav"); 

public NewClass() { 

    JLabel playArea = new JLabel(); 
    playArea.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent e) { 
     AudioClip clip = null; 
     try { 
     clip = Applet.newAudioClip(soundFile.toURI().toURL()); 
     } catch (MalformedURLException e1) { 
      // TODO Auto-generated catch block 
     e1.printStackTrace(); 
     } 
    clip.play();  
    }); 
} 

나는 내가 어떤 이미지를 가지고 또는 WAV 파일에 보관 (이 경우 내 MVC를 잘 작성하지 알고 src 폴더 내에서 별도의 폴더 (모델)가가, 그러나 그것은 다른 날 동안의 문제 다). 예외없이 실행되지만 아무 것도 재생하지 못합니다. 내가 전에 잠시 썼던 다른 프로젝트에서이 코드 스 니핏을 사용했는데 효과가 있었기 때문에 이제는 모든 것이 왜 엉망이 되었습니까? 이견있는 사람?

+0

유일한 예외 인 MalformedURLException 이후로 예외없이 실행된다는 것을 어떻게 알 수 있습니까? 또한 clip.play는 try 블록 안에 있어야합니다. 그렇지 않으면 예외가 발생하고 클립이 null 인 경우 보조 null 참조 예외를 가져옵니다. – jaket

+0

게임이 어딘가에서 끝나기를 기다리고 계십니까? 'play'를 호출 한 직후에 프로그램이 멈추는 경우 거의 또는 전혀 음악을 얻지 못할 것입니다. –

+0

jaket - 당신 말이 맞아요, 다른 예외를 던지고있는 건지 모르겠지만, 제 IDE로 Eclipse를 사용하고 있습니다. try/catch는 자동으로 생성됩니다. try 블록 안에 clip.play()를 넣으려고했지만 차이가없는 것 같습니다. 다시 말하지만,이 코드를 내가 사용한 다른 프로그램에서 잘라내어 붙여 넣었다. 이것은 내가 파일 경로에서 뭔가를 생각하게하지만 확실하지 않습니다. – user3226170

답변

0

그래서 AudioClip 대신 Clip 클래스로 전환하여 작동 시켰습니다.

File pop; 

try { 
     pop = new File(StartView.class.getResource("/model/pop.wav") 
       .toURI()); 
    } catch (URISyntaxException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

void playSound(File soundIn) { // Use pop as the input argument 

     File soundFile = soundIn; 
     AudioInputStream sound = null; 

     try { 
      sound = AudioSystem.getAudioInputStream(soundFile); 
     } catch (UnsupportedAudioFileException | IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     DataLine.Info info = new DataLine.Info(Clip.class, 
       sound.getFormat()); 
     clip = null; 
     try { 
      clip = (Clip) AudioSystem.getLine(info); 
     } catch (LineUnavailableException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     try { 
      clip.open(sound); 
     } catch (LineUnavailableException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     clip.start(); 
} 

내가 이전 코드가 작동하지만, 클립로 전환되지 않은 이유를 말할 수 없다 트릭을 할 것으로 보인다 : 여기에 나를 위해 그것을했던 코드가있다.

관련 문제