-
[안드로이드 kotlin] MediaPlayer 와 SoundPool안드로이드(kotlin)/기능 관련 2019. 12. 19. 17:45
간단한 연습 겸 실로폰앱을 만들었습니다. MediaPlayer 를 쓰면 될 줄 알았더니 다 만들고 테스트해보니 몇 가지 에러를 마주쳤네요.
첫 번째 문제) view must have a tag 가 나타남
두 번째 문제) 로딩 되고 버튼을 누르면 소리가 안나다가 한 번 멈춰야만 그동안 눌렸던 버튼들 소리가 한번에 다 남
세 번째 문제) 몇 번 누르면 더이상 소리가 재생되지 않음
이렇게 3가지 문제점을 마주쳤었습니다.
첫 번째 문제는 databinding 을 사용했었는데 거기에 빼먹은것이 있어서 나타났던 문제였습니다.
<layout> 안에 <data> 를 넣고 <variable> 내용을 넣지 않았더니 나타났었습니다. 내용을 추가해주니 에러가 더이상 나타나지 않네요.
두 번째 문제와 세 번째 문제는 MediaPlayer 를 사용했던것이 문제였습니다.
이전에 뭔가 영상이나 음원을 재생시킬 때 MediaPlayer 를 사용한적이 있어서 이걸 썼었는데
막상 다 완성시키고 보니 위와같은 문제가 생기더라구요
그래서 이건 뭔가 아닌거 같아서 구글링을 해보니 효과음처럼 짧은것들은 SoundPool 을 쓰는것이 낫다는 글을 발견하여 SoundPool 로 전부 적용시키고 실행해보니 이상없이 잘 재생 됩니다.
그럼 MediaPlayer 와 SoundPool 의 차이는 뭐길래 이러한 문제가 있었을까요?
MediaPlayer
일반적으로 영상파일이나 음악파일을 재생할 때 사용합니다. 효과음과 같은 짧은 파일들을 재생할 때 사용하면 버튼을 몇 번 누른 이후부터는 더이상 소리가 나지 않는 현상이 발생합니다.
(사용 예제입니다.)
12345678val mediaPlayer = MediaPlayer.create(this, R.raw.mi)button.setOnClickListener{mdiaPlayer.start()}// 사용이 끝나면 해제해주어야 합니다.mediaPlayer.release()cs create(context: Context, resId: Int)
SoundPool
효과음과 같이 짧은 것들을 재생할 때 사용합니다. 버튼들을 연타해도 씹히거나 소리가 안나는등의 문제가 없습니다.
(사용 예제입니다.)
1234val soundPool = SoundPool.Builder().build()val soundId = soundPool.load(this, R.raw.mi, 1)button.setOnClickListener{ soundPool.play(soundId, 1.0f, 1.0f, 0, 0, 1.0f)}cs load(context :Context, resId: Int, priority: Int)
play(soundId: Int, leftVolume: Float, rightVolume: Float, priority: Int, loop: Int, rate: Float)
'안드로이드(kotlin) > 기능 관련' 카테고리의 다른 글
[안드로이드 kotlin] webview 버튼 선택시 외부 브라우저가 실행되지 않도록 하기 (0) 2022.09.23 [안드로이드 kotlin] camera, gallery URI 확인 및 주의할 점 (0) 2022.04.12 [안드로이드 kotlin] retrofit 으로 내용이 비어있는 jsonoObject 요청 보내기 (0) 2021.12.12 [안드로이드 kotlin] 소프트 키보드 내리기(activity, custom dialog) (0) 2021.05.04 [안드로이드 kotlin] 토스트 메시지 사용하기 (0) 2020.01.04