안드로이드 앱에서 음악 재생하기

이번 포스팅에서는 앱에서 음악을 재생하는 방법에 대해 알아보도록 하겠습니다.

여기서는 MediaPlayer 클래스를 이용하여 음악을 재생하는 앱을 만들어 볼 건데요, 플레이버튼을 누르면 음악이 재생되고, 포즈를 누르면 일시정지가 되며, 다시 누르면 음악이 시작이 되게 됩니다. 그리고 스탑버튼을 누르면 정지가 되고 플레이버튼을 누르면 음악이 처음부터 시작되게 됩니다.

# 음악파일 단순재생

프로젝트에서 실행할 음악파일은 res -> raw 폴더 안에 복사해줍니다. 저는 다음 사이트에서 다운받은 파일을 사용하겠습니다. https://maoudamashii.jokersounds.com/archives2/bgm_maoudamashii_orchestra02.html

그러면 메인 액티비티에서 재생을 해보겠습니다

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class MainActivity : AppCompatActivity() {
    private var mediaPlayer: MediaPlayer? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mediaPlayer = MediaPlayer.create(this, R.raw.bgm)
        mediaPlayer?.start()
    }
}

음악이 실행이 되는데 문제는 앱이 백그라운드로 넘어가도 음악이 계속 실행이 되게 됩니다. 이걸 막기 위해서는 메인액티비티의 onStop에서 리소스를 해제해 주면 됩니다.

1
2
3
4
5
override fun onStop() {
    mediaPlayer?.release()
    mediaPlayer = null
    super.onStop()
}

# 기능버튼 작성

다음은 Play, Pause, Stop 기능을 하는 버튼을 만들어 보겠습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/playButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="play"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/pauseButton"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/pauseButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="pause"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/stopButton"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/playButton"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/stopButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="stop"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/pauseButton"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

# 각 버튼에 기능 부여

다음은 이 버튼들에 클릭리스너로 동작을 지정해줍니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class MainActivity : AppCompatActivity() {
    private var mediaPlayer: MediaPlayer? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        playButton.setOnClickListener {
            if (mediaPlayer == null) {
                mediaPlayer = MediaPlayer.create(this, R.raw.bgm_maoudamashii_orchestra02)
            }
            mediaPlayer?.start()
        }

        pauseButton.setOnClickListener {
            if (mediaPlayer?.isPlaying == true) {
                mediaPlayer?.pause()
            } else {
                mediaPlayer?.start()
            }
        }

        stopButton.setOnClickListener {
            mediaPlayer?.stop()
            mediaPlayer = null
        }
    }

    override fun onStop() {
        super.onStop()
        mediaPlayer?.release()
        mediaPlayer = null
    }
}

플레이버튼은 미디어플레이어를 초기화하고 재생을 시작합니다. 이때 중복동작을 막기 위해서 객체가 null일때만 초기화하고 재생하도록 하였습니다. 포즈버튼은 현재 플레이중인지 확인하고 플레이중이면 pause, 그렇지 않으면 start를 실행하도록 합니다. 마지막으로 스탑버튼은 객체를 해방하고 null로 만들어 다시 재생할수 있게 준비합니다.

이렇게 MediaPlayer 클래스를 사용해서 음악을 재생하는 법에 대해 알아보았습니다.

Built with Hugo
Theme Stack designed by Jimmy