안드로이드에서 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에서 소리내기 예제
'[미네르바's IT] > [미네르바's 안드로이드]' 카테고리의 다른 글
안드로이드 editText max 설정 (0) | 2017.10.12 |
---|---|
SoundPool 을 이용한 EditText에서 소리내기 예제 (0) | 2017.10.11 |
안드로이드 스튜디오 애드몹 테스트 광고 달기 (0) | 2017.08.07 |
안드로이드 스튜디오 애드몹 광고 달기 2차 - 소스코드 수정 (0) | 2017.08.04 |
안드로이드 스튜디오 애드몹 광고 달기 (0) | 2017.08.03 |