【Android-kotlin】 사운드 음원 재생 SoundPool 과 MediaPlayer 사용법 관련 최신 버전으로 정리
안드로으드 스튜디오에서(Kotlin) 사운드 음원 재생 SoundPool 과 MediaPlayer 사용법 관련 최신 버전으로 정리
현재 시점을 기준으로 블로그나 안내 되어 있는 각종 사이트에 올라와 있는 대부분의 코드가 이전 kotlin 버전에 사용되던 코드여서 에러가 나시는 분들은 아래 내용을 참고해서 해보세요.
기본적으로 안드로이드 스튜디오에서 사용할 수(재생되는) 음원은 Wav, ogg, MP3 정도이며 가급적 Wav 형태로 변환해서 사용하는 것은 좋습니다.
▣ 음원 재생 방법 2가지 (음원의 길이 등에 따른)
1. SoundPool 클래스 활용 (비교적 짧은 1분 미만의 음원으로 활용 가능)
→ 예시)
val mPlay = SoundPool.Builder().build()
val SD = mPlay.load(this, R.raw.bgm3, 1)
val btn = binding.btnSound
btn.setOnClickListener {
mPlay.play(SD, 1.0f,1.0f,0,0,1.0f)
}
※ 참고, mPlay.play(①, ②, ③, ④, ⑤, ⑥)
① 사운드 파일을 구분하기 위한 구분자
② float leftVolume: 사운드 왼쪽 볼륨(소리 크기 범위는 0과 1사이)
③ float rightVolume: 사운드 오른쪽 볼륨(소리 크기 범위는 0과 1사이)
④ int priority : 사운드 우선순위
⑤ int loop : 재생 반복 1은 1회, 2는 2회, -1은 무한 반복
⑥ float rate : 재생 속도, 1은 정상 속도, -1은 느리게, 2는 빠르게
2. MediaPlayer 클래스 활용 (비교적 긴 음원 또는 영상 재생 가능)
→ 예시)
※ 추가로 MediaPlayer에서 오디오 소스 및 출력을 관리하기 위해 사용하는 클래스가
AudioManager 입니다.
→ 예시)
▶ 기존 에러가 나는 코드 :
var mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1)
mediaPlayer.start( )
현재 위의 코드의 경우 context 에러가 나기 때문에 이를 this로 바꾸어 입력하면 해결됩니다.
▶ 에러 해결된 코드 :
var mediaPlayer = MediaPlayer.create(this, R.raw.sound_file_1)
mediaPlayer.start( )
▶ MediaPlayer가 시스템 리소스를 낭비할 수 있으니 작업이 끝나면 항상 release( )를 호출하여 할당된 시스템 리소스를 해제해야 한다.
mPlayer?.release( )
mPlayer = null
▣ 음원 리소스에 따른 재생 방법 3가지
- 로컬 리소스
- ContentResolver에서 가져올 수 있는 것과 같은 내부 URI
- 외부 URL (스트리밍)
먼저 MediaPlayer를 사용하여 애플리케이션 개발을 시작하기 전에 manifest에 적절한 선언이 있어야 하는지 확인해야 합니다.
인터넷 권한 : MediaPlayer를 사용하여 네트워크 기반 콘텐츠를 스트리밍할 경우
<uses-permission android:name="android.permission.INTERNET"/>
Wake Lock권한 : 플레이어 애플리케이션 화면이 어두워지는 것이나 프로세서의 절전 모드를 방지해야 하는 경우 MediaPlayer.setScreenOnWhilePlaying()이나MediaPlayer.setWakeMode() 메서드를 사용한다면 이 권한을 아래와 같이 기입해서 요청해야 합니다.
<uses-permission android:name="android.permission.WAKE_LOCK"/>
- 로컬 리소스 → 이 글 위에서 소개한 방법으로 하면 됩니다
- ContentResolver에서 가져올 수 있는 것과 같은 내부 URI →
val myUri: Uri = .... // initialize Uri here
val mediaPlayer: MediaPlayer? = MediaPlayer( ).apply setAudioStreamType(AudioManager.STREAM_MUSIC) setDataSource(applicationContext, myUri)
prepare( )
start( )
- 외부 URL (스트리밍) →
댓글
댓글 쓰기