안드로이드에서 sound를 발생시키는 방법은 여러가지가 있습니다. 그중에서 오늘은 soundpool을 이용한 방법에 대해 알아보고자 합니다.

우선 재생할 sound를 프로젝트에 포함시키고, soundpool 객체 생성을 해야하는데요.


0.  res/raw 폴더를 만들어서 click.wav 파일 추가



1.     객체 변수 선언 및 생성

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


* SoundPool 생성자

SoundPool (int maxStreams, int streamType, int srcQuality) 

 

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

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

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



2. 재생할 사운드 파일 미리 로드

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



3.    파일 재생


mSoundPool.play(1f, 1f, 0, 0, 1f);



* SoundPool 의 play() 메소드 

/**
 * Play a sound from a sound ID.
 *
 * Play the sound specified by the soundID. This is the value
 * returned by the load() function. Returns a non-zero streamID
 * if successful, zero if it fails. The streamID can be used to
 * further control playback. Note that calling play() may cause
 * another sound to stop playing if the maximum number of active
 * streams is exceeded. A loop value of -1 means loop forever,
 * a value of 0 means don't loop, other values indicate the
 * number of repeats, e.g. a value of 1 plays the audio twice.
 * The playback rate allows the application to vary the playback
 * rate (pitch) of the sound. A value of 1.0 means play back at
 * the original frequency. A value of 2.0 means play back twice
 * as fast, and a value of 0.5 means playback at half speed.
 *
 * @param
soundID a soundID returned by the load() function
 * @param
leftVolume left volume value (range = 0.0 to 1.0)
 * @param
rightVolume right volume value (range = 0.0 to 1.0)
 * @param
priority stream priority (0 = lowest priority)
 * @param
loop loop mode (0 = no loop, -1 = loop forever)
 * @param
rate playback rate (1.0 = normal playback, range 0.5 to 2.0)
 * @return non-zero streamID if successful, zero if failed
 */


- 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) 



* 만약, 사운드 재생이 제대로 되지 않는 경우 *


- 이런 경우는 사운드를 제대로 로드하지 못한 경우일 때가 많습니다. 이 경우는 리스너를 사용하여 사운드가 로드된 후 재생하도록 해야합니다.


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





* SoundPool을 이용하여 글자가 입력될때마다 사운드가 발생하는 예제입니다.

예제) EditText 글자를 입력할 때마다 사운드를 발생시키는 프로젝트

Sound + EditText


[[미네르바's IT]/[미네르바's 안드로이드]] - SoundPool 을 이용한 EditText에서 소리내기 예제




블로그 이미지

미네르바98

안드로이드와 영화 리뷰, 생활정보에 관한 내용을 기재합니다.

,