SoundPool을 사용하면 간단하게 음성파일(효과음)을 재생할 수 있다.
메모리에 로드하여 사용하기 때문에 용량은 크지 않는게 좋다.
1. 음성 파일 등록
음성 파일을 res에 New Resource Directory - raw파일을 추가해서 이 raw파일 안에 음성 파일을 넣는다.
2. 코드 (kotlin)
//sound pool build 해서 load 시킴 (기본 준비)
private val soundPool = SoundPool.Builder().build()
//load 할 때 sound id가 리턴으로 옴
var soundId = soundPool.load(this, R.raw.your_video_name, 1)
// play
soundPool.play(soundId, 1f, 1f, 0, -1, 1f)
// stop
soundPool.autoPause()
// resume
soundPool.autoResume()
// release(더 이상 사용하지 않을 때)
soundPool.release()
2-1 SoundPool.Builder
* setAudioAttributes (오디오에 대한 정보 설명, 지정 - 스트림 유형 전달)
val audioAttr =
AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
val soundPool = SoundPool.Builder()
.setAudioAttributes(audioAttr)
.build()
https://developer.android.com/reference/android/media/AudioAttributes
- setMaxStreams(동시에 재상할 수 있는 최대 동시 스트림 수) - 1보다 큰 값(Int)
val soundPool = SoundPool.Builder()
.setMaxStreams(2)
.build()
2-2 play
public final int play (int soundID,
float leftVolume,
float rightVolume,
int priority,
int loop,
float rate)
soundID
|
load시 리턴 받았던 아이디 값
|
leftVolume
|
왼쪽 볼륨 0.0(최소) ~ 1.0(최대)
|
rightVolume
|
오른쪽 볼륨 0.0(최소) ~ 1.0(최대)
|
priority
|
우선 순위 (0이 최소)
|
loop
|
무한 반복이 -1, 반복 없음이 0
|
rate
|
재생 속도(기본 1.0, 범위 0.5~2.0)
|
2-3 resume / stop
- autoResume()/autoPause() 이전에 활성화된/활성화 되어있는 모든 스트림을 재시작/멈춤
- 리턴받은 id를 통한 resume(int streamId)/ stop(int streamId)
// stop
soundPool.autoPause()
soundPool.stop(soundId)
// resume
soundPool.autoResume()
soundPool.resume(soundId)
2-4 onLoadCompleteListener
플레이를 했으나 로드가 아직 안된 경우 나오지 않을 수 있다. 그런 경우를 대비해 로드가 완료 되었는지 확인할 때 필요한 리스너이다.
soundPool.setOnLoadCompleteListener { soundPool, sampleId, status -> }
// sampleId - load된 soundId
// status (0 = success)
'개발 공부 > 안드로이드' 카테고리의 다른 글
안드로이드 onNewIntent 관련 알아보기, lauchMode (0) | 2022.07.03 |
---|---|
android, kotlin 시간차이 구하기 (0) | 2022.07.03 |
android 권한 요청 (0) | 2022.07.03 |
android/kotlin Thread, runOnUiThread (0) | 2022.07.03 |
android NumberPicker custom number/string 원하는 값으로 변경, wrapSelectorWheel (0) | 2022.07.03 |