2013-11-23 2 views
1

사운드 풀에로드 한 후 3 개의 미디 파일 (각각 200Kb)을 동시에 재생하려고합니다. 재생 명령 후 각 스트림을 언로드하고 soundPool.I 볼륨을 1로 설정하고 전화가 조용하지 않습니다. (언어는 유감입니다.) 크 러쉬 나 무언가가 없습니다.SoundPool은 안드로이드에서 어떤 소리도 내지 않습니다

어떻게해야합니까? 사전에 들으

soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0); 
soundPool.play(sound_id1, leftVolume, rightVolume, 1, 0, rate); 
soundPool.play(sound_id2, leftVolume, rightVolume, 1, 0, rate); 
soundPool.play(sound_id3, leftVolume, rightVolume, 1, 0, rate); 
soundPool.unload(stream_id1); 
soundPool.unload(stream_id2); 
soundPool.unload(stream_id3); 
soundPool.release(); 

편집 : 임 및 디버그 모드에서이 위대한 작품을 플레이 명령을 통해 이동합니다. OnLoadCompleteListener를 아직 추가하지 않았습니다.

+0

오디오를로드 할 충분한 시간이 있고 실제로 제대로로드되는지 확인하십시오. SoundPool.setOnLoadCompleteListener를 사용하여이를 수행하십시오. –

+0

@MikeM. 내 편집 코멘트를 참조하십시오 –

+0

언로드 및 릴리스 문을 주석 처리하고 사용해보십시오. –

답변

0

사운드 리소스를 언로드하고 재생 직후 SoundPool 개체를 해제하는 대신 Runnable을 만들어 이러한 작업을 수행하고 지연 시간을두고 처리기에 게시하십시오. 당신은 사운드 자원 재생 한 후에

final Handler handler = new Handler(); 
Runnable delayedUnload = new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     soundPool.unload(sound_id1); 
     soundPool.unload(sound_id2); 
     soundPool.unload(sound_id3); 
     soundPool.release(); 
    } 
}; 

그리고 실행 가능한 게시 : 다음과 같은 선언

soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0); 
soundPool.play(sound_id1, leftVolume, rightVolume, 1, 0, rate); 
soundPool.play(sound_id2, leftVolume, rightVolume, 1, 0, rate); 
soundPool.play(sound_id3, leftVolume, rightVolume, 1, 0, rate); 

handler.postDelayed(delayedUnload, 5 * 1000); 

postDelayed()의 두 번째 매개 변수는 밀리 초 단위로 지연이다; 이 경우 지연은 5 초입니다. SoundPool은 사운드 재생이 완료된 시점을 결정하는 메서드를 제공하지 않으므로 그에 따라 지연을 조정해야합니다.

+0

thx 나는 그것을 시도 할 것이다 :) –

+0

쿨. Lemme이 나중에 작동하는지 알고 있습니다. @LeonNicetomeetya. –

+0

핸들러를 어디에 두겠습니까? –