티스토리 뷰

SoundPool 이란 Android 개발중 앱내에서 Sound를 재생해야 할 때 쓰이는 Class입니다.



#객체 생성


private SoundPool sound_pool;


sound_pool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);


SoundPool의 파라메터를 보겠습니다.


공식 Document를 보면 다음과 같이 정의되어 있습니다.


 SoundPool (int maxStreams, int streamType, int srcQuality) 


 - maxStreams에는 최대로 동시에 재생 가능한 음악파일 숫자를 넣습니다.

 - streamType는 재생 타입입니다. 보통은 AudioManager.STREAM_MUSIC을 씁니다.

 - srcQuality는 음악재생 품질을 나타냅니다. 0이 default입니다.




#파일 가져오기


sound_pool 객체를 생성했으니 재생할 파일을 Load합니다.


int sound_beep_alert    = sound_pool.load(this, R.raw.alert_error, 1);

load() 함수를 이용해서 재생시킬 파일을 불러옵니다. (mp3, wav 확장자 둘다 가능합니다)




#파일 재생



sound_pool.play(sound_beep_alert, 1f, 1f, 0, 0, 1f);

play()함수를 이용해서 파일을 재생시킵니다.


play함수의 파라메터를 살펴보겠습니다.


int play (int soundID, 
                float leftVolume, 
                float rightVolume, 
                int priority, 
                int loop, 
                float rate)

 - soundID : 재생시킬 파일의 resID

 - leftVolume : 왼쪽 볼륨 크기 (range : 0.0 ~ 1.0)

 - rightVolume : 오른쪽 볼륨 크리 (range : 0.0 ~ 1.0)

 - priority : 우선순위 ( 0이 가장 낮음을 나타냅니다)

 - loop : 재생횟수입니다. (0일경우 1번만 재생 -1일 경우에는 무한반복)

 - rate : 재생속도입니다.0.5로 할 경우 2배 느리게 재생되고 2.0으로 할 경우 2배 빠르게 재생됩니다. (range : 0.5 ~ 2.0) 




NOTE 재생이 제대로 되지 않을경우에는 Listener를 사용해야합니다.

sound_pool.setOnLoadCompleteListener (new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int soundId, int status) {
sound_pool.play(sound_beep_alert, 1f, 1f, 0, 0, 1f);
}
});


파일을 정상적으로 load하지 못했는데 파일을 재생하려고 하는경우 Error가 발생하거나 소리가 정상적으로 출력되지 않습니다. 이럴 경우에는 위와 같이 Listener를 사용합니다. Listener는 soundPool이 파일 load를 끝낸직후 호출됩니다.



댓글
댓글쓰기 폼