본문 바로가기

나의 플랫폼/안드로이드

[ Android ] not enough memory for AudioTrack

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

SoundPool객체를 사용할 때 볼 수 있는 에러 이다.

이 에러는 SoundPool에서 지정한 크기보다 더 많이 사용했다는 의미로써! 

더 이상 사용을 하지 않거나 초기화를 해줘야 한다는 말이다. 



우선 간단한 SoundPool 사용한 소스에서
http://gogorchg.tistory.com/entry/Android-SoundPool-%EC%8B%9C%EC%9E%91-%EB%B0%8F-%EC%A0%95%EC%A7%80 

playSound함수를 사용할 때는 문제가 생기지 않지만,
playLoopSound함수를 사용할 때가 문제가 된다.

만약 Loop함수로써 계속 메모리를 잡고 있는 상태에서 playSound함수를 계속 사용하면
메모리에 쌓여버려서 위와 같은 에러가 보이게 된다.

그래서 Loop함수를 사용하는 변수 따로
그냥 playSound함수를 사용하는 변수를 따로 만들어놓으면 된다.

public static SoundManager loopMusicManager;

public static SoundManager soundManager;

public static boolean isPlaying = false; // 현재 플레이 중인지 확인하는 Flag변수

...

              // 루프 음악 셋팅

  if(backgroundMusicManager == null){

  Log.d("DEBUG","Create soundManager");

  loopMusicManager= new SoundManager();

  loopMusicManager.initSounds(getApplicationContext(),1);

  loopMusicManager.addSound(Const.SOUND_INTRO_INDEX, R.raw.bgm_intro);

  }

 

  // 버튼 음악 셋팅

  if(soundManager == null){

  Log.d("DEBUG","Create soundManager");

soundManager = new SoundManager();

soundManager.initSounds(getApplicationContext(),2);

soundManager.addSound(Const.SOUND_BTN_INDEX, R.raw.btn);

soundManager.addSound(Const.SOUND_SELECT_INDEX, R.raw.select);

  


  전체 소스가 아니라 부분적으로 표현만 해놓았다.

혹시 궁금한거 있으시면 댓글 달아주시면 감사.

어디까지나 이건 저의 경험으로써 나온 답으로 다른 해답도 있을 수 있으니~ 참고하세요^^

그럼 즐코딩!