2013-12-08 5 views
0

LWJGL 및 Slick2D를 사용하여 게임을 작성 중입니다. 나는 방금 전에 빠져 나갈 수없는 곳으로 들어갔다. MP3 파일의 크기가 3.2MB 인 OGG 오디오 파일을로드하여 재생하려고 시도했지만 MP3 라이센스 문제로 인해 대신 OGG를 사용하기로 결정했습니다. this converter을 사용하여 MP3를 OGG로). 내 환경은 Eclipse (최신 ADT, 표준 Java 개발을 위해 계속 작동), Mac OSX 10.9 Mavericks입니다. 여기 내 문제가있다.Slick2D를 사용하여 사운드를로드 할 때 Java 힙 오류가 발생했습니다.

Slick2D 오디오 로딩 스레드가 독립적이므로 45PPS 세트로 게임을로드합니다. (Slick2D의 BasicGame 클래스) 내 게임의 초기화, Slick2D의 로딩 자산 부분을 테스트하기 위해, 내가로드에서, 다음 직접 상기 3.2MB OGG 사운드 재생 : 내 게임을 실행하면

@Override 
public void Initialize(GameContainer _gameContainer) 
{ 
    org.newdawn.slick.Sound _testSound = null; 
     _testSound = new org.newdawn.slick.Sound("res/Sounds/Menu_Theme.ogg"); 
    } catch (SlickException e) { 
     e.printStackTrace(); 
    } 
    _testSound.play(); 

} 

, 나는 수를에 " 스레드 'main'의 예외 java.lang.OutOfMemoryError : Java 힙 공간 "예외. JVM 메모리 제한을 2048MB로 확장하려고 시도했지만 여전히 동일한 예외가있었습니다. 로드 후에 사운드를 직접 재생하지 않으려 고 시도했습니다. 여전히 예외가있었습니다 (큰 놀라움). 그러나 다른 OGG 사운드 파일을로드하려고 시도했는데 (이 파일은 이전과 같은 변환기를 통과했지만 훨씬 작았습니다 : 6KB) 사운드 파일이로드되어 올바르게 재생되었습니다. 이것은 제가 3.5MB 파일을 비효율적으로로드하고 있다고 생각합니까?

Sat Dec 07 23:15:01 PST 2013 INFO:Slick Build #237 
Sat Dec 07 23:15:01 PST 2013 INFO:LWJGL Version: 2.9.0 
Sat Dec 07 23:15:01 PST 2013 INFO:OriginalDisplayMode: 1280 x 800 x 32 @0Hz 
Sat Dec 07 23:15:01 PST 2013 INFO:TargetDisplayMode: 1280 x 800 x 0 @0Hz 
Sat Dec 07 23:15:01 PST 2013 INFO:Starting display 1280x800 
Sat Dec 07 23:15:01 PST 2013 INFO:Use Java PNG Loader = true 
Loading: net.java.games.input.OSXEnvironmentPlugin 
Sat Dec 07 23:15:02 PST 2013 INFO:Found 0 controllers 
Sat Dec 07 23:15:02 PST 2013 INFO:Initialising sounds.. 
Sat Dec 07 23:15:02 PST 2013 INFO:- Sound works 
Sat Dec 07 23:15:02 PST 2013 INFO:- 64 OpenAL source available 
Sat Dec 07 23:15:02 PST 2013 INFO:- Sounds source generated 
AL lib: (WW) FreeContext: (0x7ff50f813780) Deleting 64 Source(s) 
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Arrays.java:2786) 
    at java.io.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:133) 
    at org.newdawn.slick.openal.OggDecoder.getData(OggDecoder.java:322) 
    at org.newdawn.slick.openal.SoundStore.getOgg(SoundStore.java:835) 
    at org.newdawn.slick.openal.SoundStore.getOgg(SoundStore.java:793) 
    at org.newdawn.slick.Sound.<init>(Sound.java:87) 
    at classicsevolved.Main.Initialize(Main.java:31) 
    at com.zerocoolamusement.FaithfulFountain.Game.init(Game.java:45) 
    at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:393) 
    at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:317) 
    at classicsevolved.Main.main(Main.java:65) 

그래서, 내 질문에 좀 더 효율적으로 오디오 파일을로드 할 수있는 방법입니다

여기에 (큰 3.5MB 오디오 파일로) 내 프로그램에서 전체 콘솔 출력은? Slick2D가 내 게임에서 사운드 효과를로드하고 재생할 수있는 더 나은 프레임 워크가 있습니까? (나는 OpenAL을 모른다.하지만 나는 OpenGL을 알고있다. 쿼드와 라인을 만들기에는 충분하다 .-D).

아, 내 게임이 오디오 파일을로드하고 재생하는 것 외에는 아무것도하지 않는다는 것을 언급해야합니다.

+0

어떤 변환 소프트웨어를 사용하십니까? 다른 파일이 작동하면 변환기가 데이터를 손상시킬 수 있습니다. 시도하십시오 [media.io] (http://media.io) –

+0

@ CasperFærgemand 글쎄, 그 오디오 파일이 더 큰 파일을 통과 같은 변환기를 통과했다. 그러나 지금 막 media.io를 시도했지만 작동하지 않았습니다. 오디오 파일의 품질을 낮추려고 시도했지만 여전히 작동하지 않았습니다. GarageBand와 Chrome이 잘 열 수 있기 때문에 문제는 오디오 파일과 관련이 없습니다. 내 문제는 Java가 파일을로드 할 때 모든 메모리를 사용하고 있다는 것입니다. – pjrader1

+0

소리 대신 음악 클래스를 사용하면 차이가 있습니까? –

답변

0

지금 받으 셨습니다. 나는 그 문제가 Slick2D가 OGG를 파일 스트림에서 읽었을 때 압축을 풀었을 수도 있다는 것을 믿었습니다. 아무 것도 아닌 것처럼 모든 메모리를 사용했습니다. 원래 MP3를 WAV로 변환하고이를 내 프로젝트에 넣기 만하면됩니다. 완벽하게 일했습니다. 또한 오디오 파일을 매우 빠르게로드했기 때문에 압축을 풀 필요가 없기 때문에 생각했습니다. 나는 또한 MP3를 AIFF-C로 변환하려고 시도했는데 여전히 효과적이었다.

좋은 소식 : 내 오디오 파일이 작동하고 더 빨리로드됩니다. 나쁜 소식 : 비 압축 오디오 형식의 기능을 교환해야 오디오 파일이 원본 MP3보다 30 배나 커졌습니다. 하지만 개인적으로 크기에 신경 쓰지는 않습니다. 기능에 신경을 씁니다.