2013-04-14 3 views
0

java에서 wav 사운드 파일을 재생하기위한 코드가 있고 netbeans IDE에서 완벽하게 작동하지만 jar 파일로 프로젝트를 내보내고 다른 컴퓨터에서 실행할 때 ' t 작업과 다음과 같은 예외 보여jar에서 wav 파일 재생 - java netbeans

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Invalid format 
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.createStream(PulseAudioDataLine.java:142) 
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:99) 
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:283) 
at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:402) 
at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:453) 
at quiz.Login.jButton3ActionPerformed(Login.java:178) 
at quiz.Login.access$200(Login.java:36) 
at quiz.Login$3.actionPerformed(Login.java:96) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6505) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3312) 
at java.awt.Component.processEvent(Component.java:6270) 
at java.awt.Container.processEvent(Container.java:2229) 
at java.awt.Component.dispatchEventImpl(Component.java:4861) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
at java.awt.Container.dispatchEventImpl(Container.java:2273) 
at java.awt.Window.dispatchEventImpl(Window.java:2719) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:688) 
at java.awt.EventQueue$3.run(EventQueue.java:686) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
at java.awt.EventQueue$4.run(EventQueue.java:702) 
at java.awt.EventQueue$4.run(EventQueue.java:700) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:699) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

내 코드입니다 : 내가 SRC 프로젝트 폴더와 내가 jar 파일을 실행하려고 다른 기계에 music.wav 파일을 넣어 넷빈즈에서

try { 
// Open an audio input stream. 
URL url = this.getClass().getClassLoader().getResource("music.wav"); 
AudioInputStream audioIn = AudioSystem.getAudioInputStream(url); 
// Get a sound clip resource. 
Clip clip = AudioSystem.getClip(); 
// Open audio clip and load samples from the audio input stream. 
clip.open(audioIn); 
clip.start(); 
} catch (UnsupportedAudioFileException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} catch (LineUnavailableException e) { 
e.printStackTrace(); 
} 

나는 음악을 넣는다. 병 안쪽에 그리고 그것 옆에.

예외가 무엇인지 궁금합니다.

어떤 도움말이 필요합니까?

+1

로그가 클수록 도움이됩니다. –

+0

나는 질문을 편집했다 –

+0

당신이 개발하고있는 JVM과 다른 기계가 같지 않은 것 같아서 문제 다. –

답변

1

오디오 파일을 다운로드했습니다 : 16 비트 스테레오 PCM이지만 비정상적인 샘플 속도는 11kHz입니다. 내가하는 대부분의 wav 재생은 44kHz입니다 (참고 : 값은 Windows 등록 정보 디스플레이에서 반올림 됨). 어쩌면이 형식은 일부 IDE에서는 지원되지만 다른 IDE에서는 지원되지 않을 수 있습니까? 또는 일부 JVM이 아닌 다른 JVM? Audacity (무료 소프트웨어 DAW)를 사용하여 44kHz로 변환 한 다음 실행되는지 확인할 수 있습니다. 또는 다른 44kHz wav를 찾아 동일한 코드를 사용하여 테스트하십시오.

URL을 사용하고 있기 때문에 jar 파일에 저장된 리소스에 사용할 수 있습니다. 나는 오디오를 얻기 위해 다음을 사용하는 경향이있다 :

1) "오디오"하위 폴더를 만든다. 따라서 코드가 com.zaid.game 패키지에 있으면 wav 파일은 ..../com/zaid/game/audio에 있습니다.

2) 파일 이름을 호출 할 때 문자열에 하위 폴더를 추가하십시오 : 당신이로

URL url = this.getClass().getResource(fileName); 

다음

AudioInputStream aiStream = AudioSystem.getAudioInputStream(url); 

:

fileName = "audio/" + fileName; 

3)는 URL에 변수를 설정하려면 다음을 사용합니다.

"this.getClass()"는 'audio'폴더 위의 패키지에 있다고 가정합니다.

추신 : 나는 'getClassLoader()'가 URL 할당에서 무엇을하는지 명확하지 않습니다. 나는 그것을 사용하지 않으며 그것에 익숙하지 않다.

+0

11025 Hz (1/4 of 44100)는 'AM 라디오'품질이 필요합니다. 11000 Hz에서 샘플을 본적이 없습니다. –

+0

Windows 등록 정보가 반올림되었으며 해당 수치가 보존되었습니다. –

+0

허. 그저 내가 언급 한 * 시간에 당신이 그것을 언급했다면. 내 잘못이야. : P –