社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

Android(kotlin) 音楽ファイル(mp3)を再生する

android.media.MediaPlayer を使うことで簡単に音楽ファイルを再生できます。

完成イメージ

f:id:blueskyarea:20200511181220p:plain

作成・編集するファイル
  • strings.xml
  • activity_main.xml
  • MusicManager.kt
  • MainActivity.kt
  • music1.mp3 (res/raw ディレクトリ内に入れておきます)
strings.xml で表示文字列の定義
<resources>
    <string name="app_name">MusicPractice</string>
    <string name="music_start">Music start</string>
    <string name="music_stop">Music stop</string>
</resources>
activity_main.xml で画面レイアウトの定義
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
              android:gravity="center"
              android:background="#ffffff"
              tools:context=".MainActivity">

    <Button
            android:id="@+id/start_music"
            android:text="@string/music_start"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="40dp" />

    <Button
            android:id="@+id/stop_music"
            android:text="@string/music_stop"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="40dp" />

</LinearLayout>
MusicManager.kt 音再生

raw ディレクトリ(mp3 ファイル保管場所)にアクセスするため、コンテキストを受け取っています。

class MusicManager(context: Context) {

    private lateinit var mediaPlayer: MediaPlayer
    private val myContext: Context = context

    fun startMusic() {
        mediaPlayer = MediaPlayer.create(myContext, R.raw.music1)
        mediaPlayer.isLooping = true
        mediaPlayer.start()
    }

    fun stopMusic() {
        mediaPlayer.stop()
        mediaPlayer.reset()
        mediaPlayer.release()
    }
}
MainActivity.kt ボタン操作
class MainActivity : AppCompatActivity() {

    private val musicManager: MusicManager = MusicManager(this@MainActivity)

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

        // Button for start music
        val buttonStart: Button = findViewById(R.id.start_music)

        // Resister listener
        buttonStart.setOnClickListener {
            musicManager.startMusic()
        }

        // Button for stop music
        val buttonStop: Button = findViewById(R.id.stop_music)

        // Resister listener
        buttonStop.setOnClickListener {
            musicManager.stopMusic()
        }
    }
}
ビルド・実行

Run ボタンでエミュレーターを起動します。
"MUSIC START" ボタンをタッチすると、mp3 が再生されます。
mediaPlayer.isLooping = true としているため、再生時間が終了するとループ再生されます。
"MUSIC STOP" ボタンをタッチすると、音楽が停止します。