2015-01-17 2 views
0

JAR에서 WAV 파일을 재생하는 데 이상한 문제가 있습니다.
Eclipse에서 작업 할 때 먼저 ClassLoader를 사용하여 읽을 수 있습니다. 모든 것이 잘 작동합니다.
그런 다음 프로젝트를 JAR 파일로 내 보냅니다. 하지만 이제는 기록 보관 인과 함께 볼 수는 있지만 그러한 파일이 없다고 말합니다. 비 WAV 파일의 경우 제대로 작동합니다.
외부 파일로 내보내려면 먼저 WAV 파일을 손상 시키십시오 (다른 파일은 손상되지 않은 반면).
그럼 내 문제는 무엇입니까? 조사를했는데 WAV 파일이나 무거운 파일과 관련된 문제는 발견 할 수 없었습니다.
어떻게 올바르게 수행 할 수 있습니까? 작은 파일은 큰 파일 (또는 사운드 파일)이 아닌 이유는 무엇입니까?JAR에서 .wav 파일을 재생할 때 문제가 발생했습니다.

감사합니다.

편집 :
이클립스의 패키지 탐색기 :
http://i.imgur.com/7TTyQit.png
실제로 파일 얻기 위해 사용되는 코드 :
private static MusicPlayer music = new MusicPlayer(new InputStream[]{MusicPlayer.class.getResourceAsStream("default/Final.wav")}, new InputStream[]{});
마지막으로, 예외 :
java.io.IOException: mark/reset not supported at java.util.zip.InflaterInputStream.reset(Unknown Source) at java.io.FilterInputStream.reset(Unknown Source) at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source) at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source) at ru.windcorp.game.music.Music.run(Music.java:31) at ru.windcorp.game.music.MusicPlayer.playMenu(MusicPlayer.java:29) at ru.windcorp.game.GameMain.main(GameMain.java:152)

+1

실제로 문제가되는 코드를 확인하고 (이상적으로) 디렉토리/jar 구조를 확인해야합니다. – Radiodef

답변

0

것은하지 마십시오 InputStream의 AudioInputStream입니다. URL에서 확인하십시오.

(1) URL을 jar 파일로 볼 수 있습니다.

(2) getAudioInputStream (InputStream inputStream)은 InputStream으로 변환 될 때 오디오 파일에서 Markability 또는 Resetability 테스트 (또는 둘 모두)를 실행합니다. 대부분의 오디오 파일은이 단계에서 실패한 것 같습니다.

(3) getAudioInputStream (URL url)은 오디오의 Markability 테스트를 실행하지 않으므로 문제를 회피합니다.

AudioSystem 객체에 대해이 메소드의 여러 입력 매개 변수에 대한 API를 확인하십시오.

와우! 왜 com.sun.media.sound 코드를 사용하고 있습니까? 나는 그것이 대부분 비추천 적이라고 생각하지 않습니까? SoftMidiAudioFileReader는 Java 7 SE API에서 찾을 수 없습니다. 수많은 사람들이 이것을 사용하여 오류를 생성하고 있습니다. 이걸 사용하라는 제안을 어디에서 얻었습니까?

+0

저는 개인적으로 비추천 API 사용을 피하고 com.sun .media.sound 항목에 대해서는 언급하지 않았습니다. 나는이 코드를 보았을 때 문자 그대로 놀랐다. Java 8을 사용하고 있지만 ... 예,이 코드는 Java 7 라이브러리를 사용합니다 (프로그램이 오래된 JVM을 사용하는 컴퓨터에서 실행되는지 확인하기 위해). – OLEGSHA

+0

Re "언급하지 않았습니다 ..."오류 메시지는 com.sun.media.sound 라이브러리에 대한 호출을 참조합니다. 그래서 그걸 가져 왔습니다. javax.audio.sampled API를 사용하면 괜찮을 것입니다. 합리적으로 안정되어 Java 7 또는 8, 심지어는 6에서도 작동합니다. 다시 한 번, MusicPlayer 객체를 발견 한 곳이 궁금합니다. 너 스스로 작성 했니? 잘라 내기/붙여 넣기 다른 곳에서? 나는이 코드를 사용하려고 시도하는 것에 대해 비판적이어서는 안된다. 단지 궁금하다. –

+0

MusicPlayer 내 자신의 창조물이며이 코드는 마지막으로 음악을 시작하는 데 사용 후 약간의 기술 클래스, 호출 '@Override \t 공공 무효 실행() { \t \t 시도 { \t \t \t 클립 클립 =의 AudioSystem. getClip(); \t \t \t AudioInputStream inputStream = AudioSystem.getAudioInputStream (file); \t \t \t clip.open (inputStream); \t \t \t clip.start(); \t \t} 캐치 (예외 E) { \t \t \t e.printStackTrace(); \t \t} \t} – OLEGSHA

관련 문제