SoundPool pool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
int ding = pool.load(this, R.raw.laugh, 1);
pool.play(ding, 1, 1, 1, 0, 1);
딸랑 이거 세개 밖에 없는데 재생이 안되네요
R.raw.laugh 파일도 다 있고 한데
뭔가 퍼미션을 정의해줘야 하는것도 아니고 왜이런거죠;;
라고 뜨네요..
sample 1 not READY 가 뭐지..;
혹시 재생가능한 확장자인지 확인해보시고요
또 다른 의문점은 soundpool은 저용량 사운드 파일만 재생되는걸로 알고 있습니다
파일용량도 확인해 보시기 바랍니다
좀 오래된 글이긴 합니다만, 혹시나 해서 답변 드립니다.
해당 문제는 말 그대로 sound pool이 음원 재생 전 load 단계에서 준비가 되지 않아 발생한 문제입니다.
해당 사항에 대한 해결 방안이 제가 기억하기로는 크게 2가지로 나뉩니다.
1. SoundPool.setOnLoadCompleteListener을 이용한 방법
해당 API가 아마 2.2부터 지원하는 형태라서 조금 껄꺼로울순 있지만 해당 리스너의 완료 응답을 받은 후 재생을 하시면
재생에 문제가 없을 것입니다.
2. 딜레이 시간을 주기
어떻게 보면 구 버전을 위한 방안이 될 수 있겠는데, 이 부분에 대해서는 말씀드리지 않아도 잘 알고 계실것 같네요....
강제로 딜레이를 주어 soundpool이 load될 시간을 벌어 주는 것입니다.
물론 타이밍적인 문제가 발생할 가능성이 있기 때문에 다소 관리를 잘 해야 하는 케이스 이긴 한데.....
일단 제가 아는 부분에 대해선 이정도네요...^^;;
추후 저처럼 검색 하시다 에이~ 하면서 창 닫지 마시구 같이 공유했으면 하는 마음에 몇자 적었습니다..^^;
저도 이문제로 검색을 하다가 알게되서 소스공유드립니다.
//선택된 소리 재생.////////////////////////////////////////////////////////
// 사운드풀 생성하기
// ** parameters **
// 1: 동시출력 가능 스트림수
// 2: AudioManager에 정의된 스트림 타입
// 3: sample rate 컨버터의 품질. default로 0을 줌
SoundPool sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
// 사운드풀 로드하기
//int intSoundCorrect = sp.load(, 1);
int intSoundCorrect = sp.load(m_strDataColumn, 1);
// 미디어 재생하기
// ** parameters **
// 1: 리소스 식별
// 2-3: 소리크기
// 4: 우선순위
// 5: 파라미터 반복정보(0==반복안함, 1==1번반복(총2번), -1==무한반복)
// 6: 재생속도(1==1x, 2==2x)
// sp.play(intSoundCorrect, 1.0f, 1.0f, 0, 0, 1.0f);
int waitLimit = 1000;
int waitCounter = 0;
int throttle = 10;
while(sp.play(intSoundCorrect, 1.f, 1.f, 1, 0, 1.f) == 0 && waitCounter < waitLimit){
waitCounter++; SystemClock.sleep(throttle);
}