반응형
SoundPool
설명
- 동시에 여러가지 사운드를 플레이해야할 경우 사용하는 클래스
- MediaPlayer는 음악 재생과 같은 역할을 한다면 SoundPool은 효과음 재생을 위한 역할을 수행
코드
MainActivityclass MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var soundPool: SoundPool
private val soundIdMap = hashMapOf<String, Int>()
private val streamIdMap = hashMapOf<String, Int>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater).apply {
setContentView(root)
lifecycleOwner = this@MainActivity
}
soundPool = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
SoundPool.Builder()
.setAudioAttributes(
AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
)
.setMaxStreams(1) // 동시에 재생 가능한 사운드 최대 수
.build()
} else {
SoundPool(1, AudioManager.STREAM_MUSIC, 0)
}
soundPool.apply {
soundIdMap["sound1"] = load(this@MainActivity, R.raw.sound1, 1)
soundIdMap["sound2"] = load(this@MainActivity, R.raw.sound2, 1)
setOnLoadCompleteListener { soundPool, sampleId, status ->
Toast.makeText(this@MainActivity, "load complete", Toast.LENGTH_SHORT).show()
}
}
}
override fun onDestroy() {
super.onDestroy()
soundPool.release()
}
fun onClickPlay(view: View) {
streamIdMap["sound1"] = soundPool.play(soundIdMap["sound1"]!!, 0.5f, 0.5f, 1, 0, 1f)
}
fun onClickStop(view: View) {
soundPool.stop(streamIdMap["sound1"]!!)
// soundPool.pause(streamIdMap["sound1"]!!) // 해당 사운드 일시정지
// soundPool.autoPause() // 재생중인 사운드 모두 일시정지
}
}
참고
반응형
'Development > Android' 카테고리의 다른 글
[Android] DataBinding (0) | 2021.02.09 |
---|---|
[Android] kotlin-android-extensions (0) | 2021.02.09 |
[Android] MediaPlayer (0) | 2021.02.09 |
[Android] Resources (0) | 2021.02.09 |
[Android] SQLite (0) | 2021.02.09 |